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