Wing Commander II
Reconstructed Win32 source (1996)
Toggle main menu visibility
Loading...
Searching...
No Matches
input.c
Go to the documentation of this file.
1
/*
2
* Menu input devices and joystick button events.
3
*
4
* Retail object 0x421210-0x42190F (link order; see docs/ORDER.md).
5
*/
6
#include "
game.h
"
7
8
short
g_nInputDoubleClickInterval
= 1;
/* 0x00493050 */
9
short
g_nMenuPointerSpeed
= 2;
/* 0x00493054 */
10
11
/* Function start: 0x421210 */
12
short
UpdateInputDeviceTransitions
(
short
raw)
13
{
14
short
changed;
15
short
buttons;
16
short
activeDevice;
17
18
activeDevice =
g_8_nActiveInputDeviceWord
;
19
if
(raw == 0)
20
ReadCalibratedJoystick
();
21
else
22
SampleJoystickDevice
(&
g_aInputDeviceSamplesList
[activeDevice],
23
activeDevice, 0);
24
25
g_7_asInputButton2DoubleClickValues
[activeDevice] = 0;
26
g_asControlsButton1DoubleClickTable
[activeDevice] =
27
g_7_asInputButton2DoubleClickValues
[activeDevice];
28
g_9_asInputButton2ChangedList
[activeDevice] = 0;
29
g_3_asControlsButton1ChangedValues
[activeDevice] =
30
g_9_asInputButton2ChangedList
[activeDevice];
31
buttons = (short)
g_aInputDeviceSamplesList
[activeDevice].buttons;
32
if
(
g_2_asPreviousInputButtonsList
[activeDevice] != buttons) {
33
changed = buttons & 1;
34
changed ^=
g_2_asPreviousInputButtonsList
[activeDevice] & 1;
35
if
(changed != 0) {
36
g_3_asControlsButton1ChangedValues
[activeDevice]++;
37
if
((buttons & 1) != 0) {
38
if
(
g_196_nInputTimerTicks
-
39
g_anControlsButton1PressTime
[activeDevice] <=
40
g_nInputDoubleClickInterval
*
41
g_3_nEventClockScaleValue
)
42
g_asControlsButton1DoubleClickTable
[activeDevice]++;
43
g_anControlsButton1PressTime
[activeDevice] =
44
g_196_nInputTimerTicks
;
45
}
46
}
47
changed = buttons & 2;
48
changed ^=
g_2_asPreviousInputButtonsList
[activeDevice] & 2;
49
if
(changed != 0) {
50
g_9_asInputButton2ChangedList
[activeDevice]++;
51
if
((buttons & 2) != 0) {
52
if
(
g_196_nInputTimerTicks
-
53
g_9_anInputButton2PushTime
[activeDevice] <=
54
g_nInputDoubleClickInterval
*
55
g_3_nEventClockScaleValue
)
56
g_7_asInputButton2DoubleClickValues
[activeDevice]++;
57
g_9_anInputButton2PushTime
[activeDevice] =
58
g_196_nInputTimerTicks
;
59
}
60
}
61
g_2_asPreviousInputButtonsList
[activeDevice] = buttons;
62
}
63
return
1;
64
}
65
66
/* Function start: 0x4213FE */
67
/* Nothing in the shipped executable calls this; the DOS joystick pointer
68
* module's null procedure. */
69
void
JoystickInputHook
(
void
)
70
{
71
}
72
73
/* Function start: 0x421409 */
74
void
PollJoystickButtonEvents
(
void
)
75
{
76
short
doubleClick;
77
78
if
(
g_8_nActiveInputDeviceWord
== -1)
79
return
;
80
if
(
g_3_bInputPollingGuard
== 0) {
81
g_3_bInputPollingGuard
++;
82
UpdateInputDeviceTransitions
(1);
83
if
(
g_3_asControlsButton1ChangedValues
84
[
g_8_nActiveInputDeviceWord
] != 0) {
85
doubleClick = 0;
86
if
(
g_asControlsButton1DoubleClickTable
87
[
g_8_nActiveInputDeviceWord
] != 0)
88
doubleClick = 3;
89
QueueInputEventAtCursor
(
90
(
g_aInputDeviceSamplesList
91
[
g_8_nActiveInputDeviceWord
].buttons & 1) + 1,
92
0, doubleClick);
93
}
94
if
(
g_9_asInputButton2ChangedList
95
[
g_8_nActiveInputDeviceWord
] != 0) {
96
doubleClick = 0;
97
if
(
g_7_asInputButton2DoubleClickValues
98
[
g_8_nActiveInputDeviceWord
] != 0)
99
doubleClick = 3;
100
QueueInputEventAtCursor
(
101
((
g_aInputDeviceSamplesList
102
[
g_8_nActiveInputDeviceWord
].buttons & 2) >> 1) + 1,
103
1, doubleClick);
104
}
105
g_6_stPersonnelMouseData
.
secondaryButton
=
106
(
unsigned
char)
g_aInputDeviceSamplesList
107
[
g_8_nActiveInputDeviceWord
].buttons;
108
g_6_stPersonnelMouseData
.
primaryButton
=
109
g_6_stPersonnelMouseData
.
secondaryButton
;
110
g_3_bInputPollingGuard
--;
111
}
112
}
113
114
/* Function start: 0x421530 */
115
void
PollMenuInputDevices
(
void
)
116
{
117
signed
char
clickKind;
118
signed
char
changes;
119
120
changes = 0;
121
if
(
g_8_nActiveInputDeviceWord
== -1)
122
return
;
123
g_6_stPersonnelMouseData
.
x
=
g_16_stEventQueuePointerData
.
x
;
124
g_6_stPersonnelMouseData
.
y
=
g_16_stEventQueuePointerData
.
y
;
125
if
(
g_3_bInputPollingGuard
== 0) {
126
g_3_bInputPollingGuard
++;
127
UpdateInputDeviceTransitions
(0);
128
129
if
(
g_3_asControlsButton1ChangedValues
130
[
g_8_nActiveInputDeviceWord
] != 0) {
131
g_6_stPersonnelMouseData
.
x
+=
132
g_aInputDeviceSamplesList
133
[
g_8_nActiveInputDeviceWord
].
x
*
134
g_nMenuPointerSpeed
;
135
g_6_stPersonnelMouseData
.
y
+=
136
g_aInputDeviceSamplesList
137
[
g_8_nActiveInputDeviceWord
].
y
*
138
g_nMenuPointerSpeed
;
139
clickKind = 0;
140
if
(
g_asControlsButton1DoubleClickTable
141
[
g_8_nActiveInputDeviceWord
] != 0)
142
clickKind = 3;
143
QueueInputEventAtCursor
(
144
(
g_aInputDeviceSamplesList
145
[
g_8_nActiveInputDeviceWord
].buttons & 1) + 1,
146
0, (
short
)clickKind);
147
changes++;
148
}
149
if
(
g_9_asInputButton2ChangedList
150
[
g_8_nActiveInputDeviceWord
] != 0) {
151
g_6_stPersonnelMouseData
.
x
+=
152
g_aInputDeviceSamplesList
153
[
g_8_nActiveInputDeviceWord
].
x
*
154
g_nMenuPointerSpeed
;
155
g_6_stPersonnelMouseData
.
y
+=
156
g_aInputDeviceSamplesList
157
[
g_8_nActiveInputDeviceWord
].
y
*
158
g_nMenuPointerSpeed
;
159
clickKind = 0;
160
if
(
g_asControlsButton1DoubleClickTable
161
[
g_8_nActiveInputDeviceWord
] != 0)
162
clickKind = 3;
163
QueueInputEventAtCursor
(
164
((
g_aInputDeviceSamplesList
165
[
g_8_nActiveInputDeviceWord
].buttons & 2) >> 1) + 1,
166
1, (
short
)clickKind);
167
changes++;
168
}
169
if
(changes == 0) {
170
g_6_stPersonnelMouseData
.
x
+=
171
g_aInputDeviceSamplesList
172
[
g_8_nActiveInputDeviceWord
].
x
*
173
g_nMenuPointerSpeed
;
174
g_6_stPersonnelMouseData
.
y
+=
175
g_aInputDeviceSamplesList
176
[
g_8_nActiveInputDeviceWord
].
y
*
177
g_nMenuPointerSpeed
;
178
changes = (
unsigned
char)(
179
g_aInputDeviceSamplesList
180
[
g_8_nActiveInputDeviceWord
].y |
181
g_aInputDeviceSamplesList
182
[
g_8_nActiveInputDeviceWord
].x);
183
if
(changes != 0) {
184
FlushInputEvents
();
185
g_6_stPersonnelMouseData
.
x
=
186
g_6_stPersonnelMouseData
.
x
> 0
187
?
g_6_stPersonnelMouseData
.
x
: 0;
188
g_6_stPersonnelMouseData
.
x
=
189
g_6_stPersonnelMouseData
.
x
< 319
190
?
g_6_stPersonnelMouseData
.
x
: 319;
191
g_6_stPersonnelMouseData
.
y
=
192
g_6_stPersonnelMouseData
.
y
> 0
193
?
g_6_stPersonnelMouseData
.
y
: 0;
194
g_6_stPersonnelMouseData
.
y
=
195
g_6_stPersonnelMouseData
.
y
< 199
196
?
g_6_stPersonnelMouseData
.
y
: 199;
197
SetMousePosition
(
g_6_stPersonnelMouseData
.
x
,
198
g_6_stPersonnelMouseData
.
y
);
199
}
200
}
201
202
g_6_stPersonnelMouseData
.
secondaryButton
=
203
(
unsigned
char)
g_aInputDeviceSamplesList
204
[
g_8_nActiveInputDeviceWord
].buttons;
205
g_6_stPersonnelMouseData
.
primaryButton
=
206
g_6_stPersonnelMouseData
.
secondaryButton
;
207
g_6_stPersonnelMouseData
.
x
=
208
g_6_stPersonnelMouseData
.
x
> 0
209
?
g_6_stPersonnelMouseData
.
x
: 0;
210
g_6_stPersonnelMouseData
.
x
=
211
g_6_stPersonnelMouseData
.
x
< 319
212
?
g_6_stPersonnelMouseData
.
x
: 319;
213
g_6_stPersonnelMouseData
.
y
=
214
g_6_stPersonnelMouseData
.
y
> 0
215
?
g_6_stPersonnelMouseData
.
y
: 0;
216
g_6_stPersonnelMouseData
.
y
=
217
g_6_stPersonnelMouseData
.
y
< 199
218
?
g_6_stPersonnelMouseData
.
y
: 199;
219
if
(changes != 0) {
220
if
(
g_bSceneDisplayUpdateActive
== 0)
221
DisableMouseCursorDrawing
();
222
g_16_stEventQueuePointerData
.
x
=
g_6_stPersonnelMouseData
.
x
;
223
g_16_stEventQueuePointerData
.
y
=
g_6_stPersonnelMouseData
.
y
;
224
g_16_stEventQueuePointerData
.
primaryButton
=
225
g_6_stPersonnelMouseData
.
primaryButton
;
226
g_16_stEventQueuePointerData
.
secondaryButton
=
227
g_6_stPersonnelMouseData
.
secondaryButton
;
228
g_16_stEventQueuePointerData
.
flags
=
g_6_stPersonnelMouseData
.
flags
;
229
if
(
g_bSceneDisplayUpdateActive
== 0)
230
EnableMouseCursorDrawing
();
231
}
232
g_3_bInputPollingGuard
--;
233
}
234
}
235
236
/* Linker commons defined here. LINK lays a unit's commons out by the
237
* identifiers' hash keys, so these spellings follow the original addresses. */
238
int
g_9_anInputButton2PushTime
[2];
/* 0x005d3028 */
239
short
g_asControlsButton1DoubleClickTable
[2];
/* 0x005d3030 */
240
short
g_3_asControlsButton1ChangedValues
[2];
/* 0x005d3034 */
241
short
g_9_asInputButton2ChangedList
[2];
/* 0x005d3038 */
242
short
g_2_asPreviousInputButtonsList
[2];
/* 0x005d303c */
243
int
g_anControlsButton1PressTime
[2];
/* 0x005d3040 */
244
short
g_7_asInputButton2DoubleClickValues
[2];
/* 0x005d3048 */
245
signed
char
g_3_bInputPollingGuard
;
/* 0x005d304c */
PollJoystickButtonEvents
void PollJoystickButtonEvents(void)
Definition
input.c:74
SetMousePosition
void SetMousePosition(int x, int y)
Definition
winmain.c:975
UpdateInputDeviceTransitions
short UpdateInputDeviceTransitions(short raw)
Definition
input.c:12
FlushInputEvents
void FlushInputEvents(void)
Definition
eventmgr.c:1014
ReadCalibratedJoystick
short ReadCalibratedJoystick(void)
Definition
joycal.c:147
DisableMouseCursorDrawing
void DisableMouseCursorDrawing(void)
Definition
eventmgr.c:1327
SampleJoystickDevice
void SampleJoystickDevice(InputDeviceSample *samples, short joystick, unsigned int fallback)
Definition
joystick.c:22
PollMenuInputDevices
void PollMenuInputDevices(void)
Definition
input.c:115
EnableMouseCursorDrawing
void EnableMouseCursorDrawing(void)
Definition
eventmgr.c:1254
QueueInputEventAtCursor
void QueueInputEventAtCursor(unsigned int type, short primaryButton, short secondaryButton)
Definition
eventmgr.c:604
JoystickInputHook
void JoystickInputHook(void)
Definition
input.c:69
game.h
Shared Win32 declarations, types and library interfaces.
g_7_asInputButton2DoubleClickValues
short g_7_asInputButton2DoubleClickValues[2]
Definition
input.c:244
g_9_anInputButton2PushTime
int g_9_anInputButton2PushTime[2]
Definition
input.c:238
g_16_stEventQueuePointerData
QueuedMouseState g_16_stEventQueuePointerData
Definition
eventmgr.c:2525
g_anControlsButton1PressTime
int g_anControlsButton1PressTime[2]
Definition
input.c:243
g_asControlsButton1DoubleClickTable
short g_asControlsButton1DoubleClickTable[2]
Definition
input.c:239
g_bSceneDisplayUpdateActive
int g_bSceneDisplayUpdateActive
Definition
campglob.c:494
g_3_asControlsButton1ChangedValues
short g_3_asControlsButton1ChangedValues[2]
Definition
input.c:240
g_9_asInputButton2ChangedList
short g_9_asInputButton2ChangedList[2]
Definition
input.c:241
g_2_asPreviousInputButtonsList
short g_2_asPreviousInputButtonsList[2]
Definition
input.c:242
g_196_nInputTimerTicks
volatile int g_196_nInputTimerTicks
Definition
eventmgr.c:2550
g_3_nEventClockScaleValue
int g_3_nEventClockScaleValue
Definition
eventmgr.c:2565
g_aInputDeviceSamplesList
InputDeviceSample g_aInputDeviceSamplesList[2]
Definition
joystick.c:75
g_3_bInputPollingGuard
signed char g_3_bInputPollingGuard
Definition
input.c:245
g_nMenuPointerSpeed
short g_nMenuPointerSpeed
Definition
input.c:9
g_8_nActiveInputDeviceWord
short g_8_nActiveInputDeviceWord
Definition
joystick.c:57
g_6_stPersonnelMouseData
PersonnelMouseSample g_6_stPersonnelMouseData
Definition
eventmgr.c:2561
g_nInputDoubleClickInterval
short g_nInputDoubleClickInterval
Definition
input.c:8
InputDeviceSample::x
int x
Definition
game.h:222
InputDeviceSample::y
int y
Definition
game.h:223
PersonnelMouseSample::y
short y
Definition
globals.h:1037
PersonnelMouseSample::primaryButton
unsigned char primaryButton
Definition
globals.h:1038
PersonnelMouseSample::x
short x
Definition
globals.h:1036
PersonnelMouseSample::secondaryButton
unsigned char secondaryButton
Definition
globals.h:1039
PersonnelMouseSample::flags
unsigned short flags
Definition
globals.h:1041
QueuedMouseState::y
short y
Definition
globals.h:1009
QueuedMouseState::primaryButton
unsigned char primaryButton
Definition
globals.h:1010
QueuedMouseState::flags
unsigned short flags
Definition
globals.h:1013
QueuedMouseState::secondaryButton
unsigned char secondaryButton
Definition
globals.h:1011
QueuedMouseState::x
short x
Definition
globals.h:1008
src
input.c
Generated by
1.18.0