5271795c48a8ee35bccad43f318b9504b3bb9643
[rocksndiamonds.git] / src / game_sp / Input.c
1 // ----------------------------------------------------------------------------
2 // Input.c
3 // ----------------------------------------------------------------------------
4
5 #include "Input.h"
6
7 // static char *VB_Name = "modInput";
8
9 // --- Option Explicit
10
11 boolean KeyState[255 + 1];
12 DemoBufferObject DemoBuffer;
13
14 //
15 // Public KeyFlagSpace As Boolean
16 // Public KeyFlagUp As Boolean
17 // Public KeyFlagLeft As Boolean
18 // Public KeyFlagDown As Boolean
19 // Public KeyFlagRight As Boolean
20 // Public KeyFlagEnter As Boolean
21 // Public KeyFlagESC As Boolean
22 // Public KeyFlagR As Boolean
23 // Public KeyFlagRShift As Boolean
24
25 int KeyScanCode7;
26
27 int map_key_RND_to_SP(int key)
28 {
29   if (key & KEY_BUTTON)
30   {
31     return (key & MV_UP         ? keySpaceUp    :
32             key & MV_LEFT       ? keySpaceLeft  :
33             key & MV_DOWN       ? keySpaceDown  :
34             key & MV_RIGHT      ? keySpaceRight : keySpace);
35   }
36   else
37   {
38     return (key & MV_UP         ? keyUp         :
39             key & MV_LEFT       ? keyLeft       :
40             key & MV_DOWN       ? keyDown       :
41             key & MV_RIGHT      ? keyRight      : keyNone);
42   }
43 }
44
45 int map_key_SP_to_RND(int key)
46 {
47   return (key == keyUp          ? MV_UP                 :
48           key == keyLeft        ? MV_LEFT               :
49           key == keyDown        ? MV_DOWN               :
50           key == keyRight       ? MV_RIGHT              :
51           key == keySpaceUp     ? KEY_BUTTON | MV_UP    :
52           key == keySpaceLeft   ? KEY_BUTTON | MV_LEFT  :
53           key == keySpaceDown   ? KEY_BUTTON | MV_DOWN  :
54           key == keySpaceRight  ? KEY_BUTTON | MV_RIGHT :
55           key == keySpace       ? KEY_BUTTON            : MV_NONE);
56 }
57
58 void subCheckJoystick()
59 {
60 }
61
62 int subCheckRightMouseButton()
63 {
64   int subCheckRightMouseButton;
65
66   // return button state
67
68   return subCheckRightMouseButton;
69 }
70
71 int subProcessKeyboardInput(byte action)
72 {
73   int subProcessKeyboardInput;
74
75   static int LastKey = 0;
76
77 #if 1
78
79   DemoKeyCode = map_key_RND_to_SP(action);
80
81 #if 0
82     printf("::: DemoKeyCode == %d\n", DemoKeyCode);
83 #endif
84
85   return subProcessKeyboardInput;
86
87 #else
88
89   //  On Error GoTo NoKeyboardAccessEH
90   //    Call DKeyboard.Acquire
91   //  On Error GoTo 0
92   //  Call DKeyboard.GetDeviceStateKeyboard(KeyState)
93   //  With KeyState
94   if (DemoFlag != 0)
95   {
96     subGetNextDemoKey();
97
98 #if 0
99     printf("::: DemoKeyCode == %d\n", DemoKeyCode);
100 #endif
101
102     if (ExitToMenuFlag != 0)
103       return subProcessKeyboardInput;
104   }
105   else
106   {
107     if (KeyState[vbKeySpace])
108     {
109       if (KeyState[vbKeyUp])
110       {
111         DemoKeyCode = keySpaceUp;
112       }
113       else if (KeyState[vbKeyLeft])
114       {
115         DemoKeyCode = keySpaceLeft;
116       }
117       else if (KeyState[vbKeyDown])
118       {
119         DemoKeyCode = keySpaceDown;
120       }
121       else if (KeyState[vbKeyRight])
122       {
123         DemoKeyCode = keySpaceRight;
124       }
125       else
126       {
127         DemoKeyCode = keySpace;
128       }
129
130     }
131     else
132     {
133       if (KeyState[vbKeyUp])
134       {
135         DemoKeyCode = keyUp;
136       }
137       else if (KeyState[vbKeyLeft])
138       {
139         DemoKeyCode = keyLeft;
140       }
141       else if (KeyState[vbKeyDown])
142       {
143         DemoKeyCode = keyDown;
144       }
145       else if (KeyState[vbKeyRight])
146       {
147         DemoKeyCode = keyRight;
148       }
149       else
150       {
151         DemoKeyCode = keyNone;
152       }
153     }
154   }
155
156 #endif
157
158   // demo recording
159   if (RecordDemoFlag == 1)
160     DemoBuffer.AddDemoKey(DemoKeyCode);
161
162   if (DemoKeyCode != LastKey && ! NoDisplayFlag)
163   {
164 #if 0
165     MainForm.ShowKey(DemoKeyCode);
166 #endif
167     LastKey = DemoKeyCode;
168   }
169
170   if (KeyState[vbKeyEscape])
171   {
172     if (BlockingSpeed)
173     {
174       //        Call MainForm.menSpeed_Click(4)
175     }
176     else
177     {
178 #if 1
179       printf("::: Input.c: subProcessKeyboardInput(): kill murphy\n");
180 #endif
181
182       KillMurphyFlag = 1;
183       //        ExplodeFieldSP MurphyPosIndex
184       //        LeadOutCounter = &H20
185     }
186   }
187
188   if (KeyState[vbKeyR])
189   {
190     subFetchAndInitLevelB();
191   }
192
193   if (KeyState[vbKeyShift])
194     subDisplayRedDiskCount();
195
196 #if 0
197   if (KeyState[vbKeyReturn])
198     MainForm.PanelVisible = (ShowPanel == 0);
199 #endif
200
201   //  End With
202   //  Call DKeyboard.Unacquire
203   return subProcessKeyboardInput;
204
205   // NoKeyboardAccessEH:
206   Debug.Print("! Keyboard access");
207
208   return subProcessKeyboardInput;
209 }