a846aaf6e047dd37e50748014dc5856d1420bb89
[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 void subCheckJoystick()
28 {
29 }
30
31 int subCheckRightMouseButton()
32 {
33   int subCheckRightMouseButton;
34
35   // return button state
36
37   return subCheckRightMouseButton;
38 }
39
40 int subProcessKeyboardInput(byte action)
41 {
42   int subProcessKeyboardInput;
43
44   static int LastKey = 0;
45
46 #if 1
47
48   if (action & KEY_BUTTON)
49   {
50     DemoKeyCode = (action & MV_UP       ? keySpaceUp    :
51                    action & MV_LEFT     ? keySpaceLeft  :
52                    action & MV_DOWN     ? keySpaceDown  :
53                    action & MV_RIGHT    ? keySpaceRight : keySpace);
54   }
55   else
56   {
57     DemoKeyCode = (action & MV_UP       ? keyUp         :
58                    action & MV_LEFT     ? keyLeft       :
59                    action & MV_DOWN     ? keyDown       :
60                    action & MV_RIGHT    ? keyRight      : keyNone);
61   }
62
63   return subProcessKeyboardInput;
64
65 #else
66
67   //  On Error GoTo NoKeyboardAccessEH
68   //    Call DKeyboard.Acquire
69   //  On Error GoTo 0
70   //  Call DKeyboard.GetDeviceStateKeyboard(KeyState)
71   //  With KeyState
72   if (DemoFlag != 0)
73   {
74     subGetNextDemoKey();
75
76     if (ExitToMenuFlag != 0)
77       return subProcessKeyboardInput;
78   }
79   else
80   {
81     if (KeyState[vbKeySpace])
82     {
83       if (KeyState[vbKeyUp])
84       {
85         DemoKeyCode = keySpaceUp;
86       }
87       else if (KeyState[vbKeyLeft])
88       {
89         DemoKeyCode = keySpaceLeft;
90       }
91       else if (KeyState[vbKeyDown])
92       {
93         DemoKeyCode = keySpaceDown;
94       }
95       else if (KeyState[vbKeyRight])
96       {
97         DemoKeyCode = keySpaceRight;
98       }
99       else
100       {
101         DemoKeyCode = keySpace;
102       }
103
104     }
105     else
106     {
107       if (KeyState[vbKeyUp])
108       {
109         DemoKeyCode = keyUp;
110       }
111       else if (KeyState[vbKeyLeft])
112       {
113         DemoKeyCode = keyLeft;
114       }
115       else if (KeyState[vbKeyDown])
116       {
117         DemoKeyCode = keyDown;
118       }
119       else if (KeyState[vbKeyRight])
120       {
121         DemoKeyCode = keyRight;
122       }
123       else
124       {
125         DemoKeyCode = keyNone;
126       }
127     }
128   }
129
130 #endif
131
132   // demo recording
133   if (RecordDemoFlag == 1)
134     DemoBuffer.AddDemoKey(DemoKeyCode);
135
136   if (DemoKeyCode != LastKey && ! NoDisplayFlag)
137   {
138 #if 0
139     MainForm.ShowKey(DemoKeyCode);
140 #endif
141     LastKey = DemoKeyCode;
142   }
143
144   if (KeyState[vbKeyEscape])
145   {
146     if (BlockingSpeed)
147     {
148       //        Call MainForm.menSpeed_Click(4)
149     }
150     else
151     {
152 #if 1
153       printf("::: Input.c: subProcessKeyboardInput(): kill murphy\n");
154 #endif
155
156       KillMurphyFlag = 1;
157       //        ExplodeFieldSP MurphyPosIndex
158       //        LeadOutCounter = &H20
159     }
160   }
161
162   if (KeyState[vbKeyR])
163   {
164     subFetchAndInitLevelB();
165   }
166
167   if (KeyState[vbKeyShift])
168     subDisplayRedDiskCount();
169
170 #if 0
171   if (KeyState[vbKeyReturn])
172     MainForm.PanelVisible = (ShowPanel == 0);
173 #endif
174
175   //  End With
176   //  Call DKeyboard.Unacquire
177   return subProcessKeyboardInput;
178
179   // NoKeyboardAccessEH:
180   Debug.Print("! Keyboard access");
181
182   return subProcessKeyboardInput;
183 }