summaryrefslogtreecommitdiff
path: root/3dc/win95/Di_func.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3dc/win95/Di_func.cpp')
-rw-r--r--3dc/win95/Di_func.cpp1344
1 files changed, 0 insertions, 1344 deletions
diff --git a/3dc/win95/Di_func.cpp b/3dc/win95/Di_func.cpp
deleted file mode 100644
index c29b4c1..0000000
--- a/3dc/win95/Di_func.cpp
+++ /dev/null
@@ -1,1344 +0,0 @@
-// Interface functions (written in C++) for
-// Direct3D immediate mode system
-
-// Must link to C code in main engine system
-
-extern "C" {
-
-// Note: INITGUID has NOT been defined here,
-// since the definition in d3_func.cpp is amply
-// sufficient.
-
-#include "3dc.h"
-#include "module.h"
-#include "inline.h"
-#include "stratdef.h"
-#include "gamedef.h"
-#include "gameplat.h"
-#include "usr_io.h"
-extern "C++"{
-#include "iofocus.h"
-};
-
-#include "showcmds.h"
-
-// DirectInput key down value
-#define DikOn 0x80
-
-// Internal DirectInput driver
-// buffer Size for direct mouse read
-#define DMouse_BufferSize 128
-
-// Maximum number of buffered events retrievable
-// from a mouse data acquisition
-#define DMouse_RetrieveSize 128
-
-/*
- These are (hopefully) temporary #defines,
- introduced as a hack because the curious
- FIELD_OFFSET macros in the dinput.h header
- don't appear to compile, at least in Watcom 10.6.
- They will obviously have to be kept up to date
- with changes in the DIMOUSESTATE structure manually.
-*/
-
-#define DIMouseXOffset 0
-
-#define DIMouseYOffset 4
-#define DIMouseZOffset 8
-
-#define DIMouseButton0Offset 12
-
-#define DIMouseButton1Offset 13
-
-#define DIMouseButton2Offset 14
-
-#define DIMouseButton3Offset 15
-
-
-/*
- Globals
-*/
-
-
-static LPDIRECTINPUT lpdi; // DirectInput interface
-static LPDIRECTINPUTDEVICE lpdiKeyboard; // keyboard device interface
-static LPDIRECTINPUTDEVICE lpdiMouse; // mouse device interface
-static BOOL DIKeyboardOkay; // Is the keyboard acquired?
-
-static IDirectInputDevice* g_pJoystick = NULL;
-static IDirectInputDevice2* g_pJoystickDevice2 = NULL; // needed to poll joystick
-
- static char bGravePressed = No;
- // added 14/1/98 by DHM as a temporary hack to debounce the GRAVE key
-
-/*
- Externs for input communication
-*/
-
-extern HINSTANCE hInst;
-extern HWND hWndMain;
-
-int GotMouse;
-unsigned int MouseButton;
-int MouseVelX;
-int MouseVelY;
-int MouseVelZ;
-int MouseX;
-int MouseY;
-int MouseZ;
-
-extern unsigned char KeyboardInput[];
-extern unsigned char GotAnyKey;
-static unsigned char LastGotAnyKey;
-unsigned char DebouncedGotAnyKey;
-
-int GotJoystick;
-JOYCAPS JoystickCaps;
-JOYINFOEX JoystickData;
-int JoystickEnabled;
-
-DIJOYSTATE JoystickState; // DirectInput joystick state
-
-
-/*
- 8/4/98 DHM: A new array, analagous to KeyboardInput, except it's debounced
-*/
-extern "C"
-{
- unsigned char DebouncedKeyboardInput[MAX_NUMBER_OF_INPUT_KEYS];
-}
-
-// Implementation of the debounced KeyboardInput
-// There's probably a more efficient way of getting it direct from DirectInput
-// but it's getting late and I can't face reading any more Microsoft documentation...
-static unsigned char LastFramesKeyboardInput[MAX_NUMBER_OF_INPUT_KEYS];
-
-
-extern int NormalFrameTime;
-
-static char IngameKeyboardInput[256];
-extern IngameKeyboardInput_KeyDown(unsigned char key);
-extern IngameKeyboardInput_KeyUp(unsigned char key);
-extern IngameKeyboardInput_ClearBuffer(void);
-
-/*
-
- Create DirectInput via CoCreateInstance
-
-*/
-
-
-BOOL InitialiseDirectInput(void)
-
-{
- // try to create di object
- if (DirectInputCreate(hInst, DIRECTINPUT_VERSION, &lpdi, NULL) != DI_OK)
- {
- #if debug
- ReleaseDirect3D();
- exit(0x4111);
- #else
- return FALSE;
- #endif
- }
-
- return TRUE;
-}
-
-/*
-
- Release DirectInput object
-
-*/
-
-
-void ReleaseDirectInput(void)
-
-{
- if (lpdi!= NULL)
- {
- lpdi->Release();
- lpdi = NULL;
- }
-}
-
-
-
-
-// see comments below
-
-#define UseForegroundKeyboard No
-
-GUID guid = GUID_SysKeyboard;
-BOOL InitialiseDirectKeyboard()
-
-{
- HRESULT hRes;
-
- // try to create keyboard device
- if (lpdi->CreateDevice(guid, &lpdiKeyboard, NULL) !=DI_OK)
- {
- #if debug
- ReleaseDirect3D();
- exit(0x4112);
- #else
- return FALSE;
- #endif
- }
-
- // Tell DirectInput that we want to receive data in keyboard format
- if (lpdiKeyboard->SetDataFormat(&c_dfDIKeyboard) != DI_OK)
- {
- #if debug
- ReleaseDirect3D();
- exit(0x4113);
- #else
- return FALSE;
- #endif
- }
-
- // set cooperative level
- // this level is the most likely to work across
- // multiple hardware targets
- // (i.e. this is probably best for a production
- // release)
- #if UseForegroundKeyboard
- if (lpdiKeyboard->SetCooperativeLevel(hWndMain,
- DISCL_NONEXCLUSIVE | DISCL_FOREGROUND) != DI_OK)
- #else
- // this level makes alt-tabbing multiple instances in
- // SunWindow mode possible without receiving lots
- // of false inputs
- if (lpdiKeyboard->SetCooperativeLevel(hWndMain,
- DISCL_NONEXCLUSIVE | DISCL_BACKGROUND) != DI_OK)
- #endif
- {
- #if debug
- ReleaseDirect3D();
- exit(0x4114);
- #else
- return FALSE;
- #endif
- }
-
- // try to acquire the keyboard
- hRes = lpdiKeyboard->Acquire();
- if (hRes == DI_OK)
- {
- // keyboard was acquired
- DIKeyboardOkay = TRUE;
- }
- else
- {
- // keyboard was NOT acquired
- DIKeyboardOkay = FALSE;
- }
-
- // if we get here, all objects were created successfully
- return TRUE;
-}
-
-
-
-/*
-
- Use DirectInput to read keyboard
-
- PS: I know this function involves an
- apparently unnecessary layer of translation
- between one keyboard array and another one.
- This is to allow people to swap from a windows
- procedure keyboard handler to a DirectInput one
- without having to change their IDemand functions.
-
- I can't think of a faster way to do the translation
- below, but given that it only runs once per frame
- it shouldn't be too bad. BUT NOTE THAT IT DOES
- ONLY RUN ONCE PER FRAME (FROM READUSERINPUT) AND
- SO YOU MUST HAVE A DECENT FRAME RATE IF KEYS ARE NOT
- TO BE MISSED.
-
- NOTE ALSO THAT IF YOU ARE USING THIS SYSTEM YOU CAN
- ACCESS THE KEYBOARD ARRAY IN A TIGHT LOOP WHILE CALLING
- READUSERINPUT BUT -->NOT<-- CHECKWINDOWSMESSAGES (AS REQUIRED
- FOR THE WINPROC HANDLER). BUT CHECKFORWINDOWSMESSAGES WON'T DO
- ANY HARM.
-*/
-
-void DirectReadKeyboard(void)
-{
- // Local array for map of all 256 characters on
- // keyboard
- BYTE DiKeybd[256];
- HRESULT hRes;
-
- // Get keyboard state
- hRes = lpdiKeyboard->GetDeviceState(sizeof(DiKeybd), DiKeybd);
- if (hRes != DI_OK)
- {
- if (hRes == DIERR_INPUTLOST)
- {
- // keyboard control lost; try to reacquire
- DIKeyboardOkay = FALSE;
- hRes = lpdiKeyboard->Acquire();
- if (hRes == DI_OK)
- DIKeyboardOkay = TRUE;
- }
- }
-
- // Check for error values on routine exit
- if (hRes != DI_OK)
- {
- // failed to read the keyboard
- #if debug
- ReleaseDirect3D();
- exit(0x999774);
- #else
- return;
- #endif
- }
-
- // Take a copy of last frame's inputs:
- memcpy((void*)LastFramesKeyboardInput, (void*)KeyboardInput, MAX_NUMBER_OF_INPUT_KEYS);
- LastGotAnyKey=GotAnyKey;
-
- // Zero current inputs (i.e. set all keys to FALSE,
- // or not pressed)
- memset((void*)KeyboardInput, FALSE, MAX_NUMBER_OF_INPUT_KEYS);
- GotAnyKey = FALSE;
-
- #if 1
- {
- int c;
-
- for (c='a'; c<='z'; c++)
- {
- if (IngameKeyboardInput[c])
- {
- KeyboardInput[KEY_A + c - 'a'] = TRUE;
- GotAnyKey = TRUE;
- }
- }
- if (IngameKeyboardInput[246])
- {
- KeyboardInput[KEY_O_UMLAUT] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[228])
- {
- KeyboardInput[KEY_A_UMLAUT] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[252])
- {
- KeyboardInput[KEY_U_UMLAUT] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[223])
- {
- KeyboardInput[KEY_BETA] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['+'])
- {
- KeyboardInput[KEY_PLUS] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['#'])
- {
- KeyboardInput[KEY_HASH] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[161])
- {
- KeyboardInput[KEY_UPSIDEDOWNEXCLAMATION] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[231])
- {
- KeyboardInput[KEY_C_CEDILLA] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[241])
- {
- KeyboardInput[KEY_N_TILDE] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[')'])
- {
- KeyboardInput[KEY_RIGHTBRACKET] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['*'])
- {
- KeyboardInput[KEY_ASTERISK] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['$'])
- {
- KeyboardInput[KEY_DOLLAR] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[249])
- {
- KeyboardInput[KEY_U_GRAVE] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['!'])
- {
- KeyboardInput[KEY_EXCLAMATION] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[':'])
- {
- KeyboardInput[KEY_COLON] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[96])
- {
- KeyboardInput[KEY_DIACRITIC_GRAVE] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[180])
- {
- KeyboardInput[KEY_DIACRITIC_ACUTE] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[94])
- {
- KeyboardInput[KEY_DIACRITIC_CARET] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[168])
- {
- KeyboardInput[KEY_DIACRITIC_UMLAUT] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['<'])
- {
- KeyboardInput[KEY_LESSTHAN] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[176])
- {
- KeyboardInput[KEY_ORDINAL] = TRUE;
- GotAnyKey = TRUE;
- }
-
-
- if (IngameKeyboardInput['['])
- {
- KeyboardInput[KEY_LBRACKET] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[']'])
- {
- KeyboardInput[KEY_RBRACKET] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[';'])
- {
- KeyboardInput[KEY_SEMICOLON] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['\''])
- {
- KeyboardInput[KEY_APOSTROPHE] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['\\'])
- {
- KeyboardInput[KEY_BACKSLASH] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['/'])
- {
- KeyboardInput[KEY_SLASH] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['-'])
- {
- KeyboardInput[KEY_MINUS] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['='])
- {
- KeyboardInput[KEY_EQUALS] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput[','])
- {
- KeyboardInput[KEY_COMMA] = TRUE;
- GotAnyKey = TRUE;
- }
- if (IngameKeyboardInput['.'])
- {
- KeyboardInput[KEY_FSTOP] = TRUE;
- GotAnyKey = TRUE;
- }
-
- }
-
- #endif
-
- // Check and set keyboard array
- // (test checks only for the moment)
- if (DiKeybd[DIK_LEFT] & DikOn)
- {
- KeyboardInput[KEY_LEFT] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_RIGHT] & DikOn)
- {
- KeyboardInput[KEY_RIGHT] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_UP] & DikOn)
- {
- KeyboardInput[KEY_UP] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_DOWN] & DikOn)
- {
- KeyboardInput[KEY_DOWN] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_ESCAPE] & DikOn)
- {
- KeyboardInput[KEY_ESCAPE] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_RETURN] & DikOn)
- {
- KeyboardInput[KEY_CR] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_TAB] & DikOn)
- {
- KeyboardInput[KEY_TAB] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F1] & DikOn)
- {
- KeyboardInput[KEY_F1] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F2] & DikOn)
- {
- KeyboardInput[KEY_F2] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F3] & DikOn)
- {
- KeyboardInput[KEY_F3] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F4] & DikOn)
- {
- KeyboardInput[KEY_F4] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F5] & DikOn)
- {
- KeyboardInput[KEY_F5] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F6] & DikOn)
- {
- KeyboardInput[KEY_F6] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F7] & DikOn)
- {
- KeyboardInput[KEY_F7] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F8] & DikOn)
- {
- KeyboardInput[KEY_F8] = TRUE;
-/* KJL 14:51:38 21/04/98 - F8 does screen shots, and so this is a hack
-to make F8 not count in a 'press any key' situation */
-// GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F9] & DikOn)
- {
- KeyboardInput[KEY_F9] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F10] & DikOn)
- {
- KeyboardInput[KEY_F10] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F11] & DikOn)
- {
- KeyboardInput[KEY_F11] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_F12] & DikOn)
- {
- KeyboardInput[KEY_F12] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_INSERT] & DikOn)
- {
- KeyboardInput[KEY_INS] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_DELETE] & DikOn)
- {
- KeyboardInput[KEY_DEL] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_END] & DikOn)
- {
- KeyboardInput[KEY_END] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_HOME] & DikOn)
- {
- KeyboardInput[KEY_HOME] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_PRIOR] & DikOn)
- {
- KeyboardInput[KEY_PAGEUP] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_NEXT] & DikOn)
- {
- KeyboardInput[KEY_PAGEDOWN] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_BACK] & DikOn)
- {
- KeyboardInput[KEY_BACKSPACE] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_SPACE] & DikOn)
- {
- KeyboardInput[KEY_SPACE] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_LSHIFT] & DikOn)
- {
- KeyboardInput[KEY_LEFTSHIFT] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_RSHIFT] & DikOn)
- {
- KeyboardInput[KEY_RIGHTSHIFT] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_LCONTROL] & DikOn)
- {
- KeyboardInput[KEY_LEFTCTRL] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_RCONTROL] & DikOn)
- {
- KeyboardInput[KEY_RIGHTCTRL] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_CAPSLOCK] & DikOn)
- {
- KeyboardInput[KEY_CAPS] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_NUMLOCK] & DikOn)
- {
- KeyboardInput[KEY_NUMLOCK] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_SCROLL] & DikOn)
- {
- KeyboardInput[KEY_SCROLLOK] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_LMENU] & DikOn)
- {
- KeyboardInput[KEY_LEFTALT] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_RMENU] & DikOn)
- {
- KeyboardInput[KEY_RIGHTALT] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_0] & DikOn)
- {
- KeyboardInput[KEY_0] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_1] & DikOn)
- {
- KeyboardInput[KEY_1] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_2] & DikOn)
- {
- KeyboardInput[KEY_2] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_3] & DikOn)
- {
- KeyboardInput[KEY_3] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_4] & DikOn)
- {
- KeyboardInput[KEY_4] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_5] & DikOn)
- {
- KeyboardInput[KEY_5] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_6] & DikOn)
- {
- KeyboardInput[KEY_6] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_7] & DikOn)
- {
- KeyboardInput[KEY_7] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_8] & DikOn)
- {
- KeyboardInput[KEY_8] = TRUE;
- GotAnyKey = TRUE;
- }
-
- if (DiKeybd[DIK_9] & DikOn)
- {
- KeyboardInput[KEY_9] = TRUE;
- GotAnyKey = TRUE;
- }
-
-
- /* KJL 16:12:19 05/11/97 - numeric pad follows */
- if (DiKeybd[DIK_NUMPAD7] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD7] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPAD8] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD8] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPAD9] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD9] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_SUBTRACT] & DikOn)
- {
- KeyboardInput[KEY_NUMPADSUB] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPAD4] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD4] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPAD5] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD5] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPAD6] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD6] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_ADD] & DikOn)
- {
- KeyboardInput[KEY_NUMPADADD] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPAD1] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD1] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPAD2] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD2] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPAD3] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD3] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPAD0] & DikOn)
- {
- KeyboardInput[KEY_NUMPAD0] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_DECIMAL] & DikOn)
- {
- KeyboardInput[KEY_NUMPADDEL] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_NUMPADENTER] & DikOn)
- {
- KeyboardInput[KEY_NUMPADENTER] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_DIVIDE] & DikOn)
- {
- KeyboardInput[KEY_NUMPADDIVIDE] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_MULTIPLY] & DikOn)
- {
- KeyboardInput[KEY_NUMPADMULTIPLY] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_CAPITAL] & DikOn)
- {
- KeyboardInput[KEY_CAPITAL] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_LWIN] & DikOn)
- {
- KeyboardInput[KEY_LWIN] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_RWIN] & DikOn)
- {
- KeyboardInput[KEY_RWIN] = TRUE;
- GotAnyKey = TRUE;
- }
- if (DiKeybd[DIK_APPS] & DikOn)
- {
- KeyboardInput[KEY_APPS] = TRUE;
- GotAnyKey = TRUE;
- }
-
-
- #if 0
- // Added 14/1/98 by DHM: Process the grave key (known to some as the tilde key)
- // Done this way as a bit of a hack to avoid touching PLATFORM.H
- // which would force big recompiles
- if (DiKeybd[DIK_GRAVE] & DikOn)
- {
- if ( !bGravePressed )
- {
- IOFOCUS_Toggle();
- }
-
- bGravePressed = Yes;
-
- GotAnyKey = TRUE;
- }
- else
- {
- bGravePressed = No;
- }
- #else
- if (DiKeybd[DIK_GRAVE] & DikOn)
- {
- KeyboardInput[KEY_GRAVE] = TRUE;
- }
- #endif
-
- /* mouse keys */
- if (MouseButton & LeftButton)
- {
- KeyboardInput[KEY_LMOUSE] = TRUE;
- GotAnyKey = TRUE;
- }
- if (MouseButton & MiddleButton)
- {
- KeyboardInput[KEY_MMOUSE] = TRUE;
- GotAnyKey = TRUE;
- }
- if (MouseButton & RightButton)
- {
- KeyboardInput[KEY_RMOUSE] = TRUE;
- GotAnyKey = TRUE;
- }
-
- /* mouse wheel - read using windows messages */
- {
- extern signed int MouseWheelStatus;
- if (MouseWheelStatus>0)
- {
- KeyboardInput[KEY_MOUSEWHEELUP] = TRUE;
- GotAnyKey = TRUE;
- }
- else if (MouseWheelStatus<0)
- {
- KeyboardInput[KEY_MOUSEWHEELDOWN] = TRUE;
- GotAnyKey = TRUE;
- }
- }
-
-
- /* joystick buttons */
- if (GotJoystick)
- {
- unsigned int n,bit;
-
- for (n=0,bit=1; n<16; n++,bit*=2)
- {
- if(JoystickData.dwButtons&bit)
- {
- KeyboardInput[KEY_JOYSTICK_BUTTON_1+n]=TRUE;
- GotAnyKey = TRUE;
- }
- }
-
- }
-
-
- /* update debounced keys array */
- {
- for (int i=0;i<MAX_NUMBER_OF_INPUT_KEYS;i++)
- {
- DebouncedKeyboardInput[i] =
- (
- KeyboardInput[i] && !LastFramesKeyboardInput[i]
- );
- }
- DebouncedGotAnyKey = GotAnyKey && !LastGotAnyKey;
- }
-
-
-}
-/*
-
- Clean up direct keyboard objects
-
-*/
-
-void ReleaseDirectKeyboard(void)
-{
- if (DIKeyboardOkay)
- {
- lpdiKeyboard->Unacquire();
- DIKeyboardOkay = FALSE;
- }
-
- if (lpdiKeyboard != NULL)
- {
- lpdiKeyboard->Release();
- lpdiKeyboard = NULL;
- }
-}
-
-
-BOOL InitialiseDirectMouse()
-
-{
- GUID guid = GUID_SysMouse;
- HRESULT hres;
-
- //MouseButton = 0;
-
- // Obtain an interface to the system mouse device.
- hres = lpdi->CreateDevice(guid, &lpdiMouse, NULL);
- if (hres != DI_OK) return FALSE;
-
- // Set the data format to "mouse format".
- hres = lpdiMouse->SetDataFormat(&c_dfDIMouse);
- if (hres != DI_OK) return FALSE;
-
- // Set the cooperativity level.
-
- #if debug
- // This level should allow the debugger to actually work
- // not to mention drop 'n' drag in sub-window mode
- hres = lpdiMouse->SetCooperativeLevel(hWndMain,
- DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
- #else
- // this level is the most likely to work across
- // multiple mouse drivers
- hres = lpdiMouse->SetCooperativeLevel(hWndMain,
- DISCL_EXCLUSIVE | DISCL_FOREGROUND);
- #endif
- if (hres != DI_OK) return FALSE;
-
- // Set the buffer size for reading the mouse to
- // DMouse_BufferSize elements
- // mouse-type should be relative by default, so there
- // is no need to change axis mode.
- DIPROPDWORD dipdw =
- {
- {
- sizeof(DIPROPDWORD), // diph.dwSize
- sizeof(DIPROPHEADER), // diph.dwHeaderSize
- 0, // diph.dwObj
- DIPH_DEVICE, // diph.dwHow
- },
- DMouse_BufferSize, // dwData
- };
-
- hres = lpdiMouse->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph);
-
- if (hres != DI_OK) return FALSE;
-
- // try to acquire the mouse
- hres = lpdiMouse->Acquire();
-
- return TRUE;
-}
-
-void DirectReadMouse(void)
-{
- DIDEVICEOBJECTDATA od[DMouse_RetrieveSize];
- DWORD dwElements = DMouse_RetrieveSize;
- HRESULT hres;
- int OldMouseX, OldMouseY, OldMouseZ;
-
- GotMouse = No;
- MouseVelX = 0;
- MouseVelY = 0;
- MouseVelZ = 0;
-
- hres = lpdiMouse->GetDeviceData(sizeof(DIDEVICEOBJECTDATA),&od[0],&dwElements, 0);
-
-
- if (hres == DIERR_INPUTLOST || hres==DIERR_NOTACQUIRED)
- {
- // We had acquisition, but lost it. Try to reacquire it.
- hres = lpdiMouse->Acquire();
- // No data this time
- return;
- }
-
- // Unable to read data
- if (hres != DI_OK) return;
-
- // Check for any data being picked up
- GotMouse = Yes;
- if (dwElements == 0) return;
-
- // Save mouse x and y for velocity determination
- OldMouseX = MouseX;
- OldMouseY = MouseY;
- OldMouseZ = MouseZ;
-
- // Process all recovered elements and
- // make appropriate modifications to mouse
- // status variables.
-
- int i;
-
- for (i=0; i<dwElements; i++)
- {
- // Look at the element to see what happened
-
- switch (od[i].dwOfs)
- {
- // DIMOFS_X: Mouse horizontal motion
- case DIMouseXOffset:
- MouseX += od[i].dwData;
- break;
-
- // DIMOFS_Y: Mouse vertical motion
- case DIMouseYOffset:
- MouseY += od[i].dwData;
- break;
-
- case DIMouseZOffset:
- MouseZ += od[i].dwData;
- textprint("z info received %d\n",MouseZ);
- break;
-
- // DIMOFS_BUTTON0: Button 0 pressed or released
- case DIMouseButton0Offset:
- if (od[i].dwData & DikOn)
- // Button pressed
- MouseButton |= LeftButton;
- else
- // Button released
- MouseButton &= ~LeftButton;
- break;
-
- // DIMOFS_BUTTON1: Button 1 pressed or released
- case DIMouseButton1Offset:
- if (od[i].dwData & DikOn)
- // Button pressed
- MouseButton |= RightButton;
- else
- // Button released
- MouseButton &= ~RightButton;
- break;
-
- case DIMouseButton2Offset:
- case DIMouseButton3Offset:
- if (od[i].dwData & DikOn)
- // Button pressed
- MouseButton |= MiddleButton;
- else
- // Button released
- MouseButton &= ~MiddleButton;
- break;
-
- default:
- break;
- }
- }
-
- MouseVelX = DIV_FIXED(MouseX-OldMouseX,NormalFrameTime);
- MouseVelY = DIV_FIXED(MouseY-OldMouseY,NormalFrameTime);
- //MouseVelZ = DIV_FIXED(MouseZ-OldMouseZ,NormalFrameTime);
-
-
- #if 0
- textprint("MouseNormalFrameTime %d\n",MouseNormalFrameTime);
- textprint("Got Mouse %d\n", GotMouse);
- textprint("Vel X %d\n", MouseVelX);
- textprint("Vel Y %d\n", MouseVelY);
- #endif
-}
-
-void ReleaseDirectMouse(void)
-
-{
- if (lpdiMouse != NULL)
- {
- lpdiMouse->Release();
- lpdiMouse = NULL;
- }
-}
-
-
-
-/*KJL****************************************************************
-* *
-* JOYSTICK SUPPORT - I've moved all joystick support to here. *
-* *
-****************************************************************KJL*/
-
-
-/* KJL 11:32:46 04/30/97 -
-
- Okay, this has been changed for the sake of AvP. I know that this
- isn't in AvP\win95\..., but moving this file probably isn't worth
- the trouble.
-
- This code is designed to read only one joystick.
-
-*/
-
-
-/*
- Decide which (if any) joysticks
- exist, access capabilities,
- initialise internal variables.
-*/
-#if 1
-void InitJoysticks(void)
-{
- JoystickData.dwFlags = (JOY_RETURNALL | JOY_RETURNCENTERED | JOY_USEDEADZONE);
- JoystickData.dwSize = sizeof(JoystickData);
-
- GotJoystick = CheckForJoystick();
-}
-
-void ReadJoysticks(void)
-{
- GotJoystick = ReadJoystick();
-}
-
-int ReadJoystick(void)
-{
- MMRESULT joyreturn;
-
- if(!JoystickControlMethods.JoystickEnabled) return No;
-
- joyreturn = joyGetPosEx(JOYSTICKID1,&JoystickData);
-
- if (joyreturn == JOYERR_NOERROR) return Yes;
-
- return No;
-}
-
-int CheckForJoystick(void)
-{
- MMRESULT joyreturn;
-
- joyreturn = joyGetDevCaps(JOYSTICKID1,
- &JoystickCaps,
- sizeof(JOYCAPS));
-
- if (joyreturn == JOYERR_NOERROR) return Yes;
-
- return No;
-}
-#else
-// Eleventh hour rewrite of joystick code, to support PantherXL trackerball.
-// Typical. KJL, 99/5/1
-BOOL CALLBACK EnumJoysticksCallback( LPCDIDEVICEINSTANCE pInst, LPVOID lpvContext );
-
-
-void InitJoysticks(void)
-{
- HRESULT hr;
- GotJoystick = No;
- g_pJoystick = NULL;
-
- hr = lpdi->EnumDevices(DIDEVTYPE_JOYSTICK, EnumJoysticksCallback, NULL, DIEDFL_ATTACHEDONLY);
- if ( FAILED(hr) ) return;
-
- hr = g_pJoystick->SetDataFormat( &c_dfDIJoystick );
- if ( FAILED(hr) ) return;
-
- hr = g_pJoystick->SetCooperativeLevel( hWndMain, DISCL_EXCLUSIVE | DISCL_FOREGROUND);
- if ( FAILED(hr) ) return;
-
- GotJoystick = Yes;
-}
-
-void ReadJoysticks(void)
-{
-
- GotJoystick = No;
-
- if(!JoystickControlMethods.JoystickEnabled || g_pJoystick==NULL)
- {
- return;
- }
-
- HRESULT hr = DIERR_INPUTLOST;
-
- // if input is lost then acquire and keep trying
- while ( DIERR_INPUTLOST == hr )
- {
- // poll the joystick to read the current state
- hr = g_pJoystickDevice2->Poll();
- if ( FAILED(hr) ) return;
-
- // get the input's device state, and put the state in dims
- hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE), &JoystickState );
-
- if ( hr == DIERR_INPUTLOST )
- {
- // DirectInput is telling us that the input stream has
- // been interrupted. We aren't tracking any state
- // between polls, so we don't have any special reset
- // that needs to be done. We just re-acquire and
- // try again.
- hr = g_pJoystick->Acquire();
- if ( FAILED(hr) ) return;
- }
- }
-
- if ( FAILED(hr) ) return;
-
- GotJoystick = Yes;
- PrintDebuggingText("%d %d\n",JoystickState.rglSlider[0],JoystickState.rglSlider[1]);
-
-}
-//-----------------------------------------------------------------------------
-// Function: EnumJoysticksCallback
-//
-// Description:
-// Called once for each enumerated joystick. If we find one,
-// create a device interface on it so we can play with it.
-//
-//-----------------------------------------------------------------------------
-BOOL CALLBACK EnumJoysticksCallback( LPCDIDEVICEINSTANCE pInst,
- LPVOID lpvContext )
-{
- HRESULT hr;
- LPDIRECTINPUTDEVICE pDevice;
-
- // obtain an interface to the enumerated force feedback joystick.
- hr = lpdi->CreateDevice( pInst->guidInstance, &pDevice, NULL );
-
- // if it failed, then we can't use this joystick for some
- // bizarre reason. (Maybe the user unplugged it while we
- // were in the middle of enumerating it.) So continue enumerating
- if ( FAILED(hr) )
- return DIENUM_CONTINUE;
-
- // we successfully created an IDirectInputDevice. So stop looking
- // for another one.
- g_pJoystick = pDevice;
-
- // query for IDirectInputDevice2 - we need this to poll the joystick
- pDevice->QueryInterface( IID_IDirectInputDevice2, (LPVOID *)&g_pJoystickDevice2 );
-
- return DIENUM_STOP;
-}
-#endif
-
-
-extern IngameKeyboardInput_KeyDown(unsigned char key)
-{
- IngameKeyboardInput[key] = 1;
-}
-
-extern IngameKeyboardInput_KeyUp(unsigned char key)
-{
- IngameKeyboardInput[key] = 0;
-}
-
-extern IngameKeyboardInput_ClearBuffer(void)
-{
- int i;
-
- for (i=0; i<=255; i++)
- {
- IngameKeyboardInput[i] = 0;
- }
-}
-
-// For extern "C"
-};
-
-
-