1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#pragma once
// same as RW skeleton
enum Key
{
// ascii...
KEY_ESC = 128,
KEY_F1 = 129,
KEY_F2 = 130,
KEY_F3 = 131,
KEY_F4 = 132,
KEY_F5 = 133,
KEY_F6 = 134,
KEY_F7 = 135,
KEY_F8 = 136,
KEY_F9 = 137,
KEY_F10 = 138,
KEY_F11 = 139,
KEY_F12 = 140,
KEY_INS = 141,
KEY_DEL = 142,
KEY_HOME = 143,
KEY_END = 144,
KEY_PGUP = 145,
KEY_PGDN = 146,
KEY_UP = 147,
KEY_DOWN = 148,
KEY_LEFT = 149,
KEY_RIGHT = 150,
// some stuff ommitted
KEY_BACKSP = 168,
KEY_TAB = 169,
KEY_CAPSLK = 170,
KEY_ENTER = 171,
KEY_LSHIFT = 172,
KEY_RSHIFT = 173,
KEY_LCTRL = 174,
KEY_RCTRL = 175,
KEY_LALT = 176,
KEY_RALT = 177,
KEY_NULL, // unused
KEY_NUMKEYS,
};
class CControllerState
{
public:
int16 leftX, leftY;
int16 rightX, rightY;
int16 l1, l2;
int16 r1, r2;
int16 up, down, left, right;
int16 start, select;
int16 square, triangle, cross, circle;
int16 leftshock, rightshock;
int16 networktalk;
float getLeftX(void) { return leftX/32767.0f; };
float getLeftY(void) { return leftY/32767.0f; };
float getRightX(void) { return rightX/32767.0f; };
float getRightY(void) { return rightY/32767.0f; };
void Clear(void);
};
static_assert(sizeof(CControllerState) == 0x2A, "CControllerState: error");
struct CMouseControllerState
{
uint32 btns; // bit 0-2 button 1-3
int x, y;
};
class CPad
{
public:
CControllerState NewState;
CControllerState OldState;
CControllerState PCTempKeyState;
CControllerState PCTempJoyState;
CControllerState PCTempMouseState;
// straight out of my IDB
int16 Phase;
int16 Mode;
int16 ShakeDur;
int8 ShakeFreq;
int8 bHornHistory[5];
int8 iCurrHornHistory;
int8 DisablePlayerControls;
int8 JustOutOfFrontEnd;
int8 bApplyBrakes;
int32 unk[3];
int32 LastTimeTouched;
int32 AverageWeapon;
int32 AverageEntries;
static CPad *Pads; //[2];
static uint16 *OldKeyState; //[KEY_NUMKEYS];
static uint16 *NewKeyState; //[KEY_NUMKEYS];
static uint16 *TempKeyState; //[KEY_NUMKEYS];
static CMouseControllerState &OldMouseControllerState;
static CMouseControllerState &NewMouseControllerState;
static CMouseControllerState &PCTempMouseControllerState;
static CPad *GetPad(int n) { return &Pads[n]; }
};
static_assert(sizeof(CPad) == 0xFC, "CPad: error");
#define IsButtonJustDown(pad, btn) \
(!(pad)->OldState.btn && (pad)->NewState.btn)
|