home *** CD-ROM | disk | FTP | other *** search
/ Game Programming in C++ - Start to Finish / GameProgrammingS.iso / developer_install / ReplicaNetFreewareV5_4.exe / data1.cab / Program_Executable_Files / Example4 / DIInterface.h < prev    next >
Encoding:
C/C++ Source or Header  |  2005-10-30  |  4.2 KB  |  185 lines

  1. /* START_LICENSE_HEADER
  2.  
  3. Copyright (C) 2000 Martin Piper, original design and program code
  4. Copyright (C) 2001-2005 Replica Software
  5.  
  6. This program file is copyright (C) Replica Software and can only be used under license.
  7. For more information visit: http://www.replicanet.com/
  8. Or email: info@replicanet.com
  9.  
  10. END_LICENSE_HEADER */
  11. #ifndef _DIInterface_H_
  12. #define _DIInterface_H_
  13.  
  14. // buttons...
  15.  
  16. #define DIRECTINPUT8_VERSION 0x0701
  17. #define DIRECTINPUT8_VERSION_BETA1 0x70e
  18. #define DIRECTINPUT8_VERSION_WEEKLY2 0x70f
  19.  
  20. #define JOYSTICK_LEFT            0x00000001
  21. #define JOYSTICK_RIGHT            0x00000002
  22. #define JOYSTICK_UP                0x00000004
  23. #define JOYSTICK_DOWN            0x00000008
  24.  
  25. #define JOYSTICK_ACCELERATE        0x00000010
  26. #define JOYSTICK_BRAKE            0x00000020
  27.  
  28. #define JOYSTICK_MAP            0x00000040
  29. #define JOYSTICK_PAUSE            0x00000080
  30. #define JOYSTICK_USE1            0x00000100      // Handbrake
  31. #define JOYSTICK_USE2            0x00000200      // Reset
  32. #define JOYSTICK_JUMP            0x00000400
  33. #define JOYSTICK_HORN            0x00000800
  34. #define JOYSTICK_USE3            0x00001000      // Weapon1
  35. #define JOYSTICK_PULL_CAMERA    0x00002000
  36.  
  37. #define JOYSTICK_W                0x00004000
  38. #define JOYSTICK_A                0x00008000
  39. #define JOYSTICK_S                0x00010000
  40. #define JOYSTICK_D                0x00020000
  41.  
  42.  
  43. #define MAX_NUM_DEVICES 6
  44.  
  45.  
  46. class TDIDevice;
  47.  
  48. class TJoystick 
  49. {
  50. public:
  51.     TJoystick() {Clear();}
  52.  
  53.     DWORD fButtons;
  54.     LONG  fstickX, fstickY;
  55.     LONG  frightstickX, frightstickY;
  56.     bool  bAnalogX, bAnalogY;
  57.  
  58.     void Clear() { fstickX = 0; fstickY = 0; fButtons = 0; frightstickX = 0; frightstickY = 0;}
  59.  
  60.     TDIDevice *fDIDevice; // TDIDevice this belongs to
  61. };
  62.  
  63. class TDIDevice
  64.     public:
  65.         TDIDevice(void);
  66.         ~TDIDevice(void);
  67.  
  68.         void Read();
  69.         void Acquire(int acquire); // true = acquire, false = unacquire
  70.  
  71.         virtual void ReadInputs()  = 0;
  72.  
  73.  
  74. #if DIRECTINPUT_VERSION < DIRECTINPUT8_VERSION
  75.         LPDIRECTINPUTDEVICE2 fDevice;
  76. #else
  77.         LPDIRECTINPUTDEVICE8 fDevice;
  78. #endif
  79.         IDirectInputEffect*  fEffect;
  80.         int fBufSize;
  81.         void* fBuffer;
  82.  
  83.         TJoystick fJoystick;
  84.  
  85.  
  86.     void SetForce(float x, float y);
  87. };
  88.  
  89.  
  90.  
  91. class TDIKeyboard : public TDIDevice
  92. {
  93. public:
  94.     int  fDeBounce[256];
  95.  
  96.     void InitialiseKeyboard(REFGUID guid,LPCDIDATAFORMAT dataFormat,int bufferSize);
  97.     virtual void ReadInputs();
  98. };
  99.  
  100. class TDIJoystick : public TDIDevice
  101. {
  102. public:
  103.     virtual void ReadInputs();
  104. };
  105.  
  106.  
  107.  
  108. // scheduled object that reads the input devices
  109. class TDIHandler 
  110. {
  111.     public:
  112.         TDIHandler(void);
  113.         virtual ~TDIHandler(void);
  114.  
  115.         void Initialise(void);
  116.  
  117. #if DIRECTINPUT_VERSION >= DIRECTINPUT8_VERSION
  118.         LPDIRECTINPUT8 fDI;
  119. #else
  120.         LPDIRECTINPUT fDI;
  121. #endif
  122.  
  123.         BOOL ReacquireJoystick(void);
  124.  
  125.         void ReadAllInputs();
  126.  
  127.         int         fNumDevices;
  128.         TDIDevice*  fDevice[MAX_NUM_DEVICES];
  129.  
  130.         TDIKeyboard* fDISysKeyboard;  // Points to last used entry in the above array,
  131.                                       // this is always the keyboard
  132.  
  133.         int fNextJoystick;
  134.  
  135.         TJoystick* GetJoystick(int theIndex);
  136.         TJoystick* GetNextJoystick();
  137.         void ResetJoystickAllocation();
  138.  
  139. #if DIRECTINPUT_VERSION >= DIRECTINPUT8_VERSION
  140.         LPDIRECTINPUTDEVICE8 fMouse; 
  141. #else
  142.         LPDIRECTINPUTDEVICE    fMouse;
  143. #endif
  144.         bool fGrabbed;
  145.  
  146.         void ReleaseMouse();
  147.         void GrabMouse();
  148.         void InitMouse();
  149.  
  150.  
  151. };
  152.  
  153. extern TDIHandler* gDIHandler;          // All inputs live in here
  154.  
  155.  
  156. inline int SysKeyDown(int key)
  157. {
  158.     assert (gDIHandler->fDISysKeyboard->fBuffer);
  159.     return (int)((char*)gDIHandler->fDISysKeyboard->fBuffer)[key];
  160. }
  161.  
  162.  
  163. inline int SysKeyDownOnce(int key)
  164. {
  165.     assert (gDIHandler->fDISysKeyboard->fBuffer);
  166.     bool down = false;
  167.     if ((gDIHandler->fDISysKeyboard->fDeBounce[key] == 0) && (((char*)gDIHandler->fDISysKeyboard->fBuffer)[key] != 0))
  168.     {
  169.         down = true;
  170.     }
  171.  
  172.     gDIHandler->fDISysKeyboard->fDeBounce[key] = (int)((char*)gDIHandler->fDISysKeyboard->fBuffer)[key];
  173.  
  174.     return down;
  175. }
  176.  
  177. // Enumeration callback
  178. BOOL PASCAL InitialiseJoystickEnum(LPCDIDEVICEINSTANCE pdinst, LPVOID pvRef);
  179. BOOL PASCAL JoystickEffectsEnum(LPCDIEFFECTINFO pdei, LPVOID pvRef);
  180.  
  181. extern TJoystick        *joyStick;
  182.  
  183. #endif
  184.