1 #ifndef _HANDLE_UI_
2 #define _HANDLE_UI_
3 
4 #include "Input.h"
5 #include "Interface_Cursors.h"
6 #include "JA2Types.h"
7 #include "MouseSystem.h"
8 #include "ScreenIDs.h"
9 #include "Soldier_Find.h"
10 
11 
12 #define UIEVENT_SINGLEEVENT		0x00000002
13 #define UIEVENT_SNAPMOUSE		0x00000008
14 
15 #define NO_GUY_SELECTION		0
16 #define SELECTED_GUY_SELECTION		1
17 #define NONSELECTED_GUY_SELECTION	2
18 #define ENEMY_GUY_SELECTION		3
19 
20 enum MouseMoveState
21 {
22 	MOUSE_STATIONARY,
23 	MOUSE_MOVING_IN_TILE,
24 	MOUSE_MOVING_NEW_TILE
25 };
26 
27 enum MoveUITarget
28 {
29 	MOVEUI_TARGET_NONE        =  0,
30 	MOVEUI_TARGET_INTTILES    =  1,
31 	MOVEUI_TARGET_ITEMS       =  2,
32 	MOVEUI_TARGET_MERCS       =  3,
33 	MOVEUI_TARGET_MERCSFORAID =  5,
34 	MOVEUI_TARGET_WIREFENCE   =  6,
35 	MOVEUI_TARGET_BOMB        =  7,
36 	MOVEUI_TARGET_STEAL       =  8,
37 	MOVEUI_TARGET_REPAIR      =  9,
38 	MOVEUI_TARGET_JAR         = 10,
39 	MOVEUI_TARGET_CAN         = 11,
40 	MOVEUI_TARGET_REFUEL      = 12
41 };
42 
43 #define MOVEUI_RETURN_ON_TARGET_MERC	1
44 
45 enum	UI_MODE
46 {
47 	DONT_CHANGEMODE,
48 	IDLE_MODE,
49 	MOVE_MODE,
50 	ACTION_MODE,
51 	MENU_MODE,
52 	CONFIRM_MOVE_MODE,
53 	ADJUST_STANCE_MODE,
54 	CONFIRM_ACTION_MODE,
55 	HANDCURSOR_MODE,
56 	GETTINGITEM_MODE,
57 	ENEMYS_TURN_MODE,
58 	LOOKCURSOR_MODE,
59 	TALKINGMENU_MODE,
60 	TALKCURSOR_MODE,
61 	LOCKUI_MODE,
62 	OPENDOOR_MENU_MODE,
63 	LOCKOURTURN_UI_MODE,
64 	EXITSECTORMENU_MODE,
65 	RUBBERBAND_MODE,
66 	JUMPOVER_MODE,
67 };
68 
69 struct UI_EVENT
70 {
71 	typedef ScreenID (*UI_HANDLEFNC)(UI_EVENT*);
72 
73 	UINT32  uiFlags;
74 	UI_MODE ChangeToUIMode;
75 	UI_HANDLEFNC HandleEvent;
76 	BOOLEAN fFirstTime;
77 	BOOLEAN fDoneMenu;
78 	UI_MODE uiMenuPreviousMode;
79 	UINT32  uiParams[3];
80 };
81 
82 
83 // EVENT ENUMERATION
84 enum UIEventKind
85 {
86 	I_DO_NOTHING,
87 	I_NEW_MERC,
88 	I_NEW_BADMERC,
89 	I_SELECT_MERC,
90 	I_ENTER_EDIT_MODE,
91 	I_ENDTURN,
92 	I_TESTHIT,
93 	I_CHANGELEVEL,
94 	I_ON_TERRAIN,
95 	I_CHANGE_TO_IDLE,
96 	I_SOLDIERDEBUG,
97 	I_LOSDEBUG,
98 	I_LEVELNODEDEBUG,
99 
100 	ET_ON_TERRAIN,
101 
102 	M_ON_TERRAIN,
103 	M_CHANGE_TO_ACTION,
104 	M_CHANGE_TO_HANDMODE,
105 	M_CYCLE_MOVEMENT,
106 	M_CYCLE_MOVE_ALL,
107 	M_CHANGE_TO_ADJPOS_MODE,
108 
109 	A_ON_TERRAIN,
110 	A_CHANGE_TO_MOVE,
111 	A_CHANGE_TO_CONFIM_ACTION,
112 	A_END_ACTION,
113 	U_MOVEMENT_MENU,
114 	U_POSITION_MENU,
115 
116 	C_WAIT_FOR_CONFIRM,
117 	C_MOVE_MERC,
118 	C_ON_TERRAIN,
119 
120 	PADJ_ADJUST_STANCE,
121 
122 	CA_ON_TERRAIN,
123 	CA_MERC_SHOOT,
124 	CA_END_CONFIRM_ACTION,
125 
126 	HC_ON_TERRAIN,
127 
128 	G_GETTINGITEM,
129 
130 	LC_ON_TERRAIN,
131 	LC_CHANGE_TO_LOOK,
132 	LC_LOOK,
133 
134 	TA_TALKINGMENU,
135 
136 	T_ON_TERRAIN,
137 	T_CHANGE_TO_TALKING,
138 
139 	LU_ON_TERRAIN,
140 	LU_BEGINUILOCK,
141 	LU_ENDUILOCK,
142 
143 	OP_OPENDOORMENU,
144 
145 	LA_ON_TERRAIN,
146 	LA_BEGINUIOURTURNLOCK,
147 	LA_ENDUIOUTURNLOCK,
148 
149 	EX_EXITSECTORMENU,
150 
151 	RB_ON_TERRAIN,
152 
153 	JP_ON_TERRAIN,
154 	JP_JUMP,
155 
156 	NUM_UI_EVENTS
157 };
158 
159 typedef BOOLEAN (*UIKEYBOARD_HOOK)( InputAtom *pInputEvent );
160 
161 
162 // GLOBAL STATUS VARS
163 extern UI_MODE     gCurrentUIMode;
164 extern UIEventKind guiCurrentEvent;
165 extern UICursorID  guiCurrentUICursor;
166 extern INT16       gsSelectedLevel;
167 extern BOOLEAN     gfPlotNewMovement;
168 extern UIEventKind guiPendingOverrideEvent;
169 
170 
171 // GLOBALS
172 extern BOOLEAN      gfUIDisplayActionPoints;
173 extern BOOLEAN      gfUIDisplayActionPointsInvalid;
174 extern BOOLEAN      gfUIDisplayActionPointsBlack;
175 extern BOOLEAN      gfUIDisplayActionPointsCenter;
176 extern INT16        gUIDisplayActionPointsOffY;
177 extern INT16        gUIDisplayActionPointsOffX;
178 extern UINT32       guiShowUPDownArrows;
179 extern BOOLEAN      gfUIHandleSelection;
180 extern INT16        gsSelectedGridNo;
181 extern SOLDIERTYPE* gSelectedGuy;
182 extern BOOLEAN            gfUIMouseOnValidCatcher;
183 extern const SOLDIERTYPE* gUIValidCatcher;
184 extern BOOLEAN            gUIUseReverse;
185 
186 
187 extern BOOLEAN gfUIHandleShowMoveGrid;
188 extern UINT16  gsUIHandleShowMoveGridLocation;
189 
190 extern BOOLEAN gUITargetShotWaiting;
191 
192 extern BOOLEAN gfUIWaitingForUserSpeechAdvance;
193 
194 extern BOOLEAN gfUIAllMoveOn;
195 extern BOOLEAN gfUICanBeginAllMoveCycle;
196 
197 extern BOOLEAN gfUIRefreshArrows;
198 
199 extern BOOLEAN gfUIHandlePhysicsTrajectory;
200 
201 
202 // GLOBALS FOR FAST LOOKUP FOR FINDING MERCS FROM THE MOUSE
203 extern SOLDIERTYPE*     gUIFullTarget;
204 extern SoldierFindFlags guiUIFullTargetFlags;
205 
206 extern BOOLEAN gfUIConfirmExitArrows;
207 extern INT16   gsJumpOverGridNo;
208 
209 ScreenID HandleTacticalUI(void);
210 ScreenID UIHandleEndTurn(UI_EVENT*);
211 
212 extern BOOLEAN gfUIShowCurIntTile;
213 
214 extern SGPRect gRubberBandRect;
215 extern BOOLEAN gRubberBandActive;
216 
217 void EndMenuEvent( UINT32	uiEvent );
218 void SetUIKeyboardHook( UIKEYBOARD_HOOK KeyboardHookFnc );
219 
220 extern BOOLEAN gfUIForceReExamineCursorData;
221 
222 // FUNCTIONS IN INPUT MODULES
223 void GetKeyboardInput(UIEventKind* puiNewEvent);
224 void GetPolledKeyboardInput(UIEventKind* puiNewEvent);
225 
226 void GetTBMouseButtonInput(UIEventKind* puiNewEvent);
227 void GetTBMousePositionInput(UIEventKind* puiNewEvent);
228 void HandleStanceChangeFromUIKeys( UINT8 ubAnimHeight );
229 void HandleKeyInputOnEnemyTurn(void);
230 
231 
232 BOOLEAN SelectedMercCanAffordAttack(void);
233 BOOLEAN SelectedMercCanAffordMove(void);
234 
235 void ToggleHandCursorMode(UIEventKind* puiNewEvent);
236 void ToggleTalkCursorMode(UIEventKind* puiNewEvent);
237 void ToggleLookCursorMode();
238 
239 void UIHandleSoldierStanceChange(SOLDIERTYPE* s, INT8 bNewStance);
240 MouseMoveState GetCursorMovementFlags();
241 
242 BOOLEAN HandleUIMovementCursor(SOLDIERTYPE*, MouseMoveState, UINT16 usMapPos, MoveUITarget);
243 bool UIMouseOnValidAttackLocation(SOLDIERTYPE*);
244 
245 BOOLEAN UIOkForItemPickup( SOLDIERTYPE *pSoldier, INT16 sGridNo );
246 
247 SOLDIERTYPE* GetValidTalkableNPCFromMouse(BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed);
248 BOOLEAN IsValidTalkableNPC(const SOLDIERTYPE* s, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed);
249 
250 BOOLEAN HandleTalkInit(void);
251 
252 BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustForConfirm );
253 
254 void SetUIBusy(const SOLDIERTYPE* s);
255 void UnSetUIBusy(const SOLDIERTYPE* s);
256 
257 ScreenID UIHandleLUIEndLock(UI_EVENT*);
258 
259 void BeginDisplayTimedCursor(UICursorID, UINT32 uiDelay);
260 
261 void HandleHandCursorClick(UINT16 usMapPos, UIEventKind* puiNewEvent);
262 
263 ScreenID UIHandleChangeLevel(UI_EVENT*);
264 BOOLEAN UIHandleOnMerc( BOOLEAN fMovementMode );
265 
266 void ChangeInterfaceLevel( INT16 sLevel );
267 
268 void EndRubberBanding(BOOLEAN fCancel = false);
269 void ResetMultiSelection(void);
270 void EndMultiSoldierSelection( BOOLEAN fAcknowledge );
271 void StopRubberBandedMercFromMoving(void);
272 
273 BOOLEAN SelectedGuyInBusyAnimation(void);
274 
275 void GotoLowerStance(SOLDIERTYPE*);
276 void GotoHigherStance(SOLDIERTYPE*);
277 
278 BOOLEAN IsValidJumpLocation(const SOLDIERTYPE* pSoldier, INT16 sGridNo, BOOLEAN fCheckForPath);
279 
280 void PopupAssignmentMenuInTactical(void);
281 
282 extern GridNo          gfUIOverItemPoolGridNo;
283 extern INT16           gsCurrentActionPoints;
284 extern BOOLEAN         fRightButtonDown;
285 extern BOOLEAN         fLeftButtonDown;
286 extern BOOLEAN         fMiddleButtonDown;
287 extern BOOLEAN         fIgnoreLeftUp;
288 extern BOOLEAN         gfIgnoreOnSelectedGuy;
289 extern BOOLEAN         gUIActionModeChangeDueToMouseOver;
290 extern MOUSE_REGION    gDisableRegion;
291 extern BOOLEAN         gfDisableRegionActive;
292 extern MOUSE_REGION    gUserTurnRegion;
293 extern BOOLEAN         gfUserTurnRegionActive;
294 extern UIKEYBOARD_HOOK gUIKeyboardHook;
295 extern BOOLEAN         gfResetUIMovementOptimization;
296 
297 extern BOOLEAN gfUIShowExitEast;
298 extern BOOLEAN gfUIShowExitWest;
299 extern BOOLEAN gfUIShowExitNorth;
300 extern BOOLEAN gfUIShowExitSouth;
301 
302 BOOLEAN ValidQuickExchangePosition(void);
303 
304 void CheckForDisabledRegionRemove(void);
305 
306 void HandleTacticalUILoseCursorFromOtherScreen(void);
307 
308 void SetInterfaceHeightLevel(void);
309 
310 void ClimbUpOrDown();
311 
312 #endif
313