1 #ifndef _INTERFACE_H
2 #define _INTERFACE_H
3 
4 #include "Handle_UI.h"
5 #include "MouseSystem.h"
6 
7 #include <string_theory/string>
8 
9 
10 #define MAX_UICOMPOSITES		4
11 
12 #define INTERFACE_START_X		0
13 
14 // FLASH PORTRAIT CODES
15 #define FLASH_PORTRAIT_STOP		0
16 #define FLASH_PORTRAIT_START		1
17 #define FLASH_PORTRAIT_WAITING		2
18 #define FLASH_PORTRAIT_DELAY		150
19 
20 // FLASH PORTRAIT PALETTE IDS
21 #define FLASH_PORTRAIT_NOSHADE		0
22 #define FLASH_PORTRAIT_STARTSHADE	1
23 #define FLASH_PORTRAIT_ENDSHADE	2
24 #define FLASH_PORTRAIT_DARKSHADE	3
25 #define FLASH_PORTRAIT_GRAYSHADE	4
26 #define FLASH_PORTRAIT_LITESHADE	5
27 
28 
29 // GLOBAL DEFINES FOR SOME UI FLAGS
30 #define ARROWS_HIDE_UP			0x00000002
31 #define ARROWS_HIDE_DOWN		0x00000004
32 #define ARROWS_SHOW_UP_BESIDE		0x00000008
33 #define ARROWS_SHOW_DOWN_BESIDE	0x00000020
34 #define ARROWS_SHOW_UP_ABOVE_Y		0x00000040
35 #define ARROWS_SHOW_DOWN_BELOW_Y	0x00000080
36 #define ARROWS_SHOW_DOWN_BELOW_G	0x00000200
37 #define ARROWS_SHOW_DOWN_BELOW_YG	0x00000400
38 #define ARROWS_SHOW_DOWN_BELOW_GG	0x00000800
39 #define ARROWS_SHOW_UP_ABOVE_G		0x00002000
40 #define ARROWS_SHOW_UP_ABOVE_YG	0x00004000
41 #define ARROWS_SHOW_UP_ABOVE_GG	0x00008000
42 #define ARROWS_SHOW_UP_ABOVE_YY	0x00020000
43 #define ARROWS_SHOW_DOWN_BELOW_YY	0x00040000
44 #define ARROWS_SHOW_UP_ABOVE_CLIMB	0x00080000
45 #define ARROWS_SHOW_UP_ABOVE_CLIMB2	0x00400000
46 #define ARROWS_SHOW_UP_ABOVE_CLIMB3	0x00800000
47 #define ARROWS_SHOW_DOWN_CLIMB		0x02000000
48 
49 #define ROOF_LEVEL_HEIGHT		50
50 
51 #define SCROLL_LEFT_PADDING -30
52 #define SCROLL_RIGHT_PADDING 10
53 #define SCROLL_TOP_PADDING -50
54 #define SCROLL_BOTTOM_PADDING -20
55 
56 
57 // Interface level enums
58 enum
59 {
60 	I_GROUND_LEVEL,
61 	I_ROOF_LEVEL,
62 	I_NUMLEVELS
63 };
64 
65 
66 enum InterfacePanelKind
67 {
68 	SM_PANEL,
69 	TEAM_PANEL,
70 	NUM_UI_PANELS
71 };
72 
73 
74 extern BOOLEAN            gfUIStanceDifferent;
75 extern InterfacePanelKind gsCurInterfacePanel;
76 
77 
78 extern SGPVObject* guiDEAD;
79 extern SGPVObject* guiHATCH;
80 extern SGPVObject* guiRADIO;
81 
82 
83 extern MOUSE_REGION gViewportRegion;
84 extern MOUSE_REGION gRadarRegion;
85 
86 #define MOVEMENT_MENU_LOOK		1
87 #define MOVEMENT_MENU_ACTIONC		2
88 #define MOVEMENT_MENU_HAND		3
89 #define MOVEMENT_MENU_TALK		4
90 #define MOVEMENT_MENU_RUN		5
91 #define MOVEMENT_MENU_WALK		6
92 #define MOVEMENT_MENU_SWAT		7
93 #define MOVEMENT_MENU_PRONE		8
94 
95 
96 enum DirtyLevel
97 {
98 	DIRTYLEVEL0 = 0,
99 	DIRTYLEVEL1 = 1,
100 	DIRTYLEVEL2 = 2
101 };
102 
103 
104 void InitializeTacticalInterface(void);
105 extern DirtyLevel fInterfacePanelDirty;
106 extern BOOLEAN    gfPausedTacticalRenderFlags;
107 extern DirtyLevel gfPausedTacticalRenderInterfaceFlags;
108 extern INT16      gsInterfaceLevel;
109 extern BOOLEAN    gfInMovementMenu;
110 
111 
112 void PopupMovementMenu( UI_EVENT *pUIEvent );
113 void PopDownMovementMenu(void);
114 void RenderMovementMenu(void);
115 void CancelMovementMenu(void);
116 
117 
118 void PopDownOpenDoorMenu(void);
119 void RenderOpenDoorMenu(void);
120 void InitDoorOpenMenu(SOLDIERTYPE* pSoldier, BOOLEAN fClosingDoor);
121 BOOLEAN HandleOpenDoorMenu(void);
122 void CancelOpenDoorMenu(void);
123 
124 void HandleInterfaceBackgrounds(void);
125 
126 
127 void DrawSelectedUIAboveGuy(SOLDIERTYPE&);
128 
129 void CreateCurrentTacticalPanelButtons(void);
130 void RemoveCurrentTacticalPanelButtons(void);
131 void SetCurrentTacticalPanelCurrentMerc(SOLDIERTYPE* s);
132 void SetCurrentInterfacePanel(InterfacePanelKind);
133 BOOLEAN IsMercPortraitVisible(const SOLDIERTYPE* s);
134 
135 void InitializeCurrentPanel(void);
136 void ShutdownCurrentPanel(void);
137 
138 void ClearInterface(void);
139 void RestoreInterface(void);
140 
141 void RenderArrows(void);
142 void EraseRenderArrows(void);
143 void DirtyMercPanelInterface(SOLDIERTYPE const*, DirtyLevel);
144 
145 
146 void EndUIMessage(void);
147 void BeginUIMessage(BOOLEAN fUseSkullIcon, const ST::string& text);
148 
149 
150 // map screen version, for centering over the map area
151 void BeginMapUIMessage(INT16 delta_y, const ST::string& text);
152 
153 
154 extern VIDEO_OVERLAY* g_ui_message_overlay;
155 extern UINT32         guiUIMessageTime;
156 
157 enum MESSAGE_TYPES
158 {
159 	NO_MESSAGE,
160 	COMPUTER_TURN_MESSAGE,
161 	COMPUTER_INTERRUPT_MESSAGE,
162 	PLAYER_INTERRUPT_MESSAGE,
163 	MILITIA_INTERRUPT_MESSAGE,
164 	AIR_RAID_TURN_MESSAGE,
165 	PLAYER_TURN_MESSAGE
166 };
167 
168 void HandleTopMessages(void);
169 void AddTopMessage(MESSAGE_TYPES ubType);
170 void EndTopMessage(void);
171 
172 void InitEnemyUIBar( UINT8 ubNumEnemies, UINT8 ubDoneEnemies );
173 
174 ST::string GetSoldierHealthString(const SOLDIERTYPE* s);
175 
176 
177 void ResetPhysicsTrajectoryUI(void);
178 void SetupPhysicsTrajectoryUI(void);
179 void EndPhysicsTrajectoryUI(void);
180 void BeginPhysicsTrajectoryUI( INT16 sGridNo, INT8 bLevel, BOOLEAN fBadCTGT );
181 
182 void InitPlayerUIBar( BOOLEAN fInterrupt );
183 
184 void ToggleTacticalPanels(void);
185 
186 void DirtyTopMessage(void);
187 
188 void BeginMultiPurposeLocator(INT16 sGridNo, INT8 bLevel);
189 void HandleMultiPurposeLocator(void);
190 void RenderTopmostMultiPurposeLocator(void);
191 
192 void GetSoldierAboveGuyPositions(const SOLDIERTYPE* s, INT16* psX, INT16* psY, BOOLEAN fRadio);
193 
194 void UpdateEnemyUIBar(void);
195 
196 extern BOOLEAN gfInOpenDoorMenu;
197 extern UINT32  guiUIMessageTimeDelay;
198 extern BOOLEAN gfTopMessageDirty;
199 
200 #endif
201