Mercurial > mm7
annotate Game/MainMenu.cpp @ 2558:5d6fb8eb023c
Слияние
author | Ritor1 |
---|---|
date | Wed, 13 May 2015 20:09:12 +0600 |
parents | 48708da03b7f |
children | f9bdfe26d03d |
rev | line source |
---|---|
2541 | 1 #include "Engine/Engine.h" |
2 #include "Engine/Timer.h" | |
3 #include "Engine/Party.h" | |
4 #include "Engine/LOD.h" | |
5 #include "Engine/SaveLoad.h" | |
6 #include "Engine/Graphics/IRender.h" | |
7 #include "Engine/Graphics/Viewport.h" | |
8 | |
9 #include "IO/Mouse.h" | |
10 #include "IO/Keyboard.h" | |
11 | |
2551
4008b2f34be0
MainMenu rendering moved from event loop to respective window class
a.parshin
parents:
2547
diff
changeset
|
12 #include "GUI/UI/UIMainMenu.h" |
2541 | 13 #include "GUI/UI/UIPartyCreation.h" |
2547 | 14 #include "GUI/UI/UISaveLoad.h" |
2551
4008b2f34be0
MainMenu rendering moved from event loop to respective window class
a.parshin
parents:
2547
diff
changeset
|
15 #include "GUI/GUIButton.h" |
2541 | 16 |
17 #include "Media/Audio/AudioPlayer.h" | |
18 | |
19 #include "Game/MainMenu.h" | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
20 #include "Game/MainMenuLoad.h" |
2541 | 21 |
22 | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
23 RGBTexture main_menu_background; |
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
24 |
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
25 |
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
26 |
2541 | 27 //----- (00435748) -------------------------------------------------------- |
28 void MainMenu_EventLoop() | |
29 { | |
30 Player *pPlayer; // ebx@2 | |
31 void *v3; // edi@21 | |
32 signed int v4; // eax@29 | |
33 // int v5; // ecx@29 | |
34 // PLAYER_SKILL_TYPE v6; // edi@37 | |
35 GUIWindow *pWindow; // eax@56 | |
36 GUIButton *pButton; // eax@59 | |
37 int v15; // edi@70 | |
38 char v20; // dl@116 | |
39 unsigned int v21; // eax@116 | |
40 unsigned int v25; // eax@120 | |
41 unsigned int v26; // ecx@127 | |
42 // SoundID pSoundID; // [sp-2Ch] [bp-3Ch]@36 | |
43 // signed int v41; // [sp-10h] [bp-20h]@29 | |
44 int pParam; // [sp+4h] [bp-Ch]@3 | |
45 UIMessageType pUIMessageType; // [sp+8h] [bp-8h]@3 | |
46 int pSex; // [sp+Ch] [bp-4h]@3 | |
47 | |
48 if (pMessageQueue_50CBD0->uNumMessages) | |
49 { | |
50 pPlayer = pParty->pPlayers.data(); | |
51 do | |
52 { | |
53 int param2; | |
54 pMessageQueue_50CBD0->PopMessage(&pUIMessageType, &pParam, ¶m2); | |
55 //auto player = &pParty->pPlayers[pParam]; | |
56 | |
57 switch (pUIMessageType) // For buttons of window MainMenu | |
58 { | |
59 case UIMSG_MainMenu_ShowPartyCreationWnd: | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
60 new OnButtonClick2(495, 172, 0, 0, (int)pMainMenu_BtnNew, 0); |
2541 | 61 SetCurrentMenuID(MENU_NEWGAME); |
62 break; | |
63 case UIMSG_MainMenu_ShowLoadWindow: | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
64 new OnButtonClick2(495, 227, 0, 0, (int)pMainMenu_BtnLoad, 0); |
2553 | 65 SetCurrentMenuID(MENU_SAVELOAD); |
2541 | 66 break; |
67 case UIMSG_ShowCredits: | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
68 new OnButtonClick2(495, 282, 0, 0, (int)pMainMenu_BtnCredits, 0); |
2541 | 69 SetCurrentMenuID(MENU_CREDITS); |
70 break; | |
71 case UIMSG_ExitToWindows: | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
72 new OnButtonClick2(495, 337, 0, 0, (int)pMainMenu_BtnExit, 0); |
2541 | 73 SetCurrentMenuID(MENU_EXIT_GAME); |
74 break; | |
2553 | 75 /*case UIMSG_PlayerCreation_SelectAttribute: |
2541 | 76 pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) |
77 % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam; | |
78 uPlayerCreationUI_SelectedCharacter = pParam; | |
79 pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0); | |
80 break; | |
81 case UIMSG_PlayerCreation_VoicePrev: | |
82 pSex = pParty->pPlayers[pParam].GetSexByVoice(); | |
83 do | |
84 { | |
85 if (pParty->pPlayers[pParam].uVoiceID == 0) | |
86 pParty->pPlayers[pParam].uVoiceID = 19; | |
87 else --pParty->pPlayers[pParam].uVoiceID; | |
88 } while (pParty->pPlayers[pParam].GetSexByVoice() != pSex); | |
89 pButton = pCreationUI_BtnPressLeft2[pParam]; | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
90 new OnButtonClick(pButton->uX, pButton->uY, 0, 0, (int)pButton, (char *)1); |
2541 | 91 pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0); |
92 pParty->pPlayers[pParam].PlaySound(SPEECH_PickMe, 0); | |
93 break; | |
94 case UIMSG_PlayerCreation_VoiceNext: | |
95 pSex = pParty->pPlayers[pParam].GetSexByVoice(); | |
96 do | |
97 { | |
98 pParty->pPlayers[pParam].uVoiceID = (pParty->pPlayers[pParam].uVoiceID + 1) % 20; | |
99 } while (pParty->pPlayers[pParam].GetSexByVoice() != pSex); | |
100 pButton = pCreationUI_BtnPressRight2[pParam]; | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
101 new OnButtonClick(pButton->uX, pButton->uY, 0, 0, (int)pButton, (char *)1); |
2541 | 102 pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0); |
103 pParty->pPlayers[pParam].PlaySound(SPEECH_PickMe, 0); | |
104 break; | |
105 case UIMSG_PlayerCreation_FacePrev: | |
106 //pPlayer = &pParty->pPlayers[pParam]; | |
107 if (!pParty->pPlayers[pParam].uCurrentFace) | |
108 pParty->pPlayers[pParam].uCurrentFace = 19; | |
109 else | |
110 pParty->pPlayers[pParam].uCurrentFace -= 1; | |
111 pParty->pPlayers[pParam].uVoiceID = pParty->pPlayers[pParam].uCurrentFace; | |
112 pParty->pPlayers[pParam].SetInitialStats(); | |
113 pParty->pPlayers[pParam].SetSexByVoice(); | |
114 pParty->pPlayers[pParam].RandomizeName(); | |
115 v25 = pParam; | |
116 pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) | |
117 % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam; | |
118 uPlayerCreationUI_SelectedCharacter = v25; | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
119 new OnButtonClick(pCreationUI_BtnPressLeft[v25]->uX, pCreationUI_BtnPressLeft[v25]->uY, 0, 0, (int)pCreationUI_BtnPressLeft[v25], (char *)1); |
2541 | 120 pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0.0, 0); |
121 pParty->pPlayers[pParam].PlaySound(SPEECH_PickMe, 0); | |
122 break; | |
123 case UIMSG_PlayerCreation_FaceNext: | |
124 //pPlayer = &pParty->pPlayers[pParam]; | |
125 v20 = (char)((int)pParty->pPlayers[pParam].uCurrentFace + 1) % 20; | |
126 pParty->pPlayers[pParam].uCurrentFace = v20; | |
127 pParty->pPlayers[pParam].uVoiceID = v20; | |
128 pParty->pPlayers[pParam].SetInitialStats(); | |
129 pParty->pPlayers[pParam].SetSexByVoice(); | |
130 pParty->pPlayers[pParam].RandomizeName(); | |
131 v21 = pParam; | |
132 pGUIWindow_CurrentMenu->pCurrentPosActiveItem = (pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) | |
133 % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam; | |
134 uPlayerCreationUI_SelectedCharacter = v21; | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
135 new OnButtonClick(pCreationUI_BtnPressRight[v21]->uX, pCreationUI_BtnPressRight[v21]->uY, 0, 0, (int)pCreationUI_BtnPressRight[v21], (char *)1); |
2541 | 136 pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0); |
137 pParty->pPlayers[pParam].PlaySound(SPEECH_PickMe, 0); | |
138 break; | |
139 case UIMSG_PlayerCreationClickPlus: | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
140 new OnButtonClick2(613, 393, 0, 0, (int)pPlayerCreationUI_BtnPlus, (char *)1); |
2541 | 141 pPlayer[uPlayerCreationUI_SelectedCharacter].IncreaseAttribute((pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7); |
142 pAudioPlayer->PlaySound(SOUND_ClickMinus, 0, 0, -1, 0, 0, 0, 0); | |
143 break; | |
144 case UIMSG_PlayerCreationClickMinus: | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
145 new OnButtonClick2(523, 393, 0, 0, (int)pPlayerCreationUI_BtnMinus, (char *)1); |
2541 | 146 pPlayer[uPlayerCreationUI_SelectedCharacter].DecreaseAttribute((pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem) % 7); |
147 pAudioPlayer->PlaySound(SOUND_ClickPlus, 0, 0, -1, 0, 0, 0, 0); | |
148 break; | |
149 case UIMSG_PlayerCreationSelectActiveSkill: | |
150 if (pPlayer[uPlayerCreationUI_SelectedCharacter].GetSkillIdxByOrder(3) == 37) | |
151 pParty->pPlayers[uPlayerCreationUI_SelectedCharacter].pActiveSkills[pPlayer[uPlayerCreationUI_SelectedCharacter].GetSkillIdxByOrder(pParam + 4)] = 1; | |
152 pAudioPlayer->PlaySound(SOUND_ClickSkill, 0, 0, -1, 0, 0, 0, 0); | |
153 break; | |
154 case UIMSG_PlayerCreationSelectClass: | |
155 pPlayer[uPlayerCreationUI_SelectedCharacter].Reset((PLAYER_CLASS_TYPE)pParam); | |
156 pAudioPlayer->PlaySound(SOUND_SelectingANewCharacter, 0, 0, -1, 0, 0, 0, 0); | |
157 break; | |
158 case UIMSG_PlayerCreationClickOK: | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
159 new OnButtonClick2(580, 431, 0, 0, (int)pPlayerCreationUI_BtnOK, 0); |
2541 | 160 if (PlayerCreation_GetUnspentAttributePointCount() || !PlayerCreation_Choose4Skills()) |
161 GameUI_Footer_TimeLeft = GetTickCount() + 4000; | |
162 else | |
163 uGameState = GAME_STATE_STARTING_NEW_GAME; | |
164 break; | |
165 case UIMSG_PlayerCreationClickReset: | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
166 new OnButtonClick2(527, 431, 0, 0, (int)pPlayerCreationUI_BtnReset, 0); |
2541 | 167 pParty->Reset(); |
168 break; | |
169 case UIMSG_PlayerCreationRemoveUpSkill: | |
170 v4 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem; | |
171 pGUIWindow_CurrentMenu->pCurrentPosActiveItem = v4 % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam; | |
172 if (pPlayer[pParam].GetSkillIdxByOrder(2) != 37)//37 - None() | |
173 pParty->pPlayers[pParam].pActiveSkills[pPlayer[pParam].GetSkillIdxByOrder(2)] = 0; | |
174 break; | |
175 case UIMSG_PlayerCreationRemoveDownSkill: | |
176 v4 = pGUIWindow_CurrentMenu->pCurrentPosActiveItem - pGUIWindow_CurrentMenu->pStartingPosActiveItem; | |
177 pGUIWindow_CurrentMenu->pCurrentPosActiveItem = v4 % 7 + pGUIWindow_CurrentMenu->pStartingPosActiveItem + 7 * pParam; | |
178 if (pPlayer[pParam].GetSkillIdxByOrder(3) != 37)//37 - None() | |
179 pParty->pPlayers[pParam].pActiveSkills[pPlayer[pParam].GetSkillIdxByOrder(3)] = 0; | |
180 break; | |
181 case UIMSG_PlayerCreationChangeName: | |
182 pAudioPlayer->PlaySound(SOUND_ClickSkill, 0, 0, -1, 0, 0, 0, 0); | |
183 v3 = (void *)pParam; | |
184 uPlayerCreationUI_SelectedCharacter = pParam; | |
185 pKeyActionMap->EnterText(0, 15, pGUIWindow_CurrentMenu); | |
186 pGUIWindow_CurrentMenu->ptr_1C = v3; | |
2553 | 187 break;*/ |
2541 | 188 case UIMSG_ChangeGameState: |
189 uGameState = GAME_FINISHED; | |
190 break; | |
191 case UIMSG_ChangeCursor: | |
192 pMouse->SetCursorBitmap("MICON2"); | |
193 break; | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
194 case UIMSG_DebugBlv: |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
195 __debugbreak();//some debugging tool |
2541 | 196 SetCurrentMenuID(MENU_DebugBLVLevel); |
197 break; | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
198 /*case UIMSG_LoadGame: |
2541 | 199 if (!pSavegameUsedSlots[uLoadGameUI_SelectedSlot]) |
200 break; | |
201 SetCurrentMenuID(MENU_LoadingProcInMainMenu); | |
202 break; | |
203 case UIMSG_SelectLoadSlot: | |
204 //main menu save/load wnd clicking on savegame lines | |
205 if (pGUIWindow_CurrentMenu->receives_keyboard_input_2 == WINDOW_INPUT_IN_PROGRESS) | |
206 pKeyActionMap->SetWindowInputStatus(WINDOW_INPUT_NONE); | |
207 if (current_screen_type != SCREEN_SAVEGAME || uLoadGameUI_SelectedSlot != pParam + pSaveListPosition) | |
208 { | |
209 //load clicked line | |
210 v26 = pParam + pSaveListPosition; | |
211 if (dword_6BE138 == pParam + pSaveListPosition) | |
212 { | |
213 pMessageQueue_50CBD0->AddGUIMessage(UIMSG_SaveLoadBtn, 0, 0); | |
214 pMessageQueue_50CBD0->AddGUIMessage(UIMSG_LoadGame, 0, 0); | |
215 } | |
216 uLoadGameUI_SelectedSlot = v26; | |
217 dword_6BE138 = v26; | |
218 } | |
219 else | |
220 { | |
221 //typing in the line | |
222 pKeyActionMap->EnterText(0, 19, pGUIWindow_CurrentMenu); | |
223 strcpy(pKeyActionMap->pPressedKeysBuffer, pSavegameHeader[uLoadGameUI_SelectedSlot].pName); | |
224 pKeyActionMap->uNumKeysPressed = strlen(pKeyActionMap->pPressedKeysBuffer); | |
225 } | |
226 break; | |
227 case UIMSG_SaveLoadBtn: | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
228 new OnSaveLoad(pGUIWindow_CurrentMenu->uFrameX + 241, pGUIWindow_CurrentMenu->uFrameY + 302, 61, 28, (int)pBtnLoadSlot, 0); |
2541 | 229 break; |
230 case UIMSG_DownArrow: | |
231 ++pSaveListPosition; | |
232 if (pSaveListPosition >= pParam) | |
233 pSaveListPosition = pParam - 1; | |
234 if (pSaveListPosition < 1) | |
235 pSaveListPosition = 0; | |
236 pWindow = pGUIWindow_CurrentMenu; | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
237 new OnButtonClick2(pWindow->uFrameX + 215, pGUIWindow_CurrentMenu->uFrameY + 323, 0, 0, (int)pBtnDownArrow, 0); |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
238 break;*/ |
2541 | 239 case UIMSG_Cancel: |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
240 new OnCancel3(pGUIWindow_CurrentMenu->uFrameX + 350, pGUIWindow_CurrentMenu->uFrameY + 302, 61, 28, (int)pBtnCancel, 0); |
2541 | 241 break; |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
242 /*case UIMSG_ArrowUp: |
2541 | 243 --pSaveListPosition; |
244 if (pSaveListPosition < 0) | |
245 pSaveListPosition = 0; | |
246 pWindow = pGUIWindow_CurrentMenu; | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
247 new OnButtonClick2(pWindow->uFrameX + 215, pGUIWindow_CurrentMenu->uFrameY + 197, 0, 0, (int)pBtnArrowUp, 0); |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
248 break;*/ |
2541 | 249 case UIMSG_AD: |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
250 __debugbreak();//some debugging tool |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
251 new OnButtonClick2(pMainMenu_BtnNew->uX, pMainMenu_BtnNew->uY, 0, 0, (int)pMainMenu_BtnNew, 0); |
2541 | 252 SetCurrentMenuID(MENU_LoadingProcInMainMenu); |
253 break; | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
254 case UIMSG_DebugBlv2: |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
255 __debugbreak();//some debugging tool |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
256 new OnButtonClick2(pMainMenu_BtnExit->uX, pMainMenu_BtnExit->uY, 0, 0, (int)pMainMenu_BtnExit, 0); |
2541 | 257 SetCurrentMenuID(MENU_DebugBLVLevel); |
258 break; | |
259 case UIMSG_Escape: | |
260 if (pModalWindow) | |
261 { | |
2547 | 262 pModalWindow->Release(); |
263 pModalWindow = nullptr; | |
2541 | 264 break; |
265 } | |
266 if (!(dword_6BE364_game_settings_1 & GAME_SETTINGS_4000)) | |
267 break; | |
268 v15 = 1; | |
269 pMediaPlayer->bStopBeforeSchedule = 1; | |
270 viewparams->bRedrawGameUI = 1; | |
271 viewparams->field_48 = 1; | |
272 if (GetCurrentMenuID() == MENU_MAIN || GetCurrentMenuID() == MENU_MMT_MAIN_MENU | |
273 || GetCurrentMenuID() == MENU_CREATEPARTY || GetCurrentMenuID() == MENU_NAMEPANELESC) | |
274 { | |
275 //if ( current_screen_type == SCREEN_VIDEO ) | |
276 //pVideoPlayer->FastForwardToFrame(pVideoPlayer->pResetflag); | |
277 if (GetCurrentMenuID() == MENU_NAMEPANELESC) // | |
278 { | |
279 SetCurrentMenuID(MENU_CREATEPARTY);// | |
280 break; | |
281 } | |
282 if (GetCurrentMenuID() == MENU_CREDITSPROC) // | |
283 { | |
284 SetCurrentMenuID(MENU_CREDITSCLOSE);// | |
285 break; | |
286 } | |
287 pMessageQueue_50CBD0->AddGUIMessage(UIMSG_ChangeGameState, 0, 0); | |
288 break; | |
289 } | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
290 if (GetCurrentMenuID() == MENU_CREDITSPROC && current_screen_type == SCREEN_GAME) |
2541 | 291 { |
292 //if ( current_screen_type == SCREEN_VIDEO ) | |
293 //pVideoPlayer->FastForwardToFrame(pVideoPlayer->pResetflag); | |
294 if (GetCurrentMenuID() == MENU_NAMEPANELESC) | |
295 { | |
296 SetCurrentMenuID(MENU_CREATEPARTY); | |
297 break; | |
298 } | |
299 if (GetCurrentMenuID() == MENU_CREDITSPROC) | |
300 { | |
301 SetCurrentMenuID(MENU_CREDITSCLOSE); | |
302 break; | |
303 } | |
304 pMessageQueue_50CBD0->AddGUIMessage(UIMSG_ChangeGameState, 0, 0); | |
305 break; | |
306 } | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
307 /*if (current_screen_type == SCREEN_LOADGAME) |
2541 | 308 { |
309 pIcons_LOD->RemoveTexturesPackFromTextureList(); | |
310 //crt_deconstruct_ptr_6A0118(); | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
311 main_menu_background.Release(); |
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
312 main_menu_background.Load("title.pcx", 0); |
2541 | 313 SetCurrentMenuID(MENU_MAIN); |
314 v15 = 1; | |
315 pGUIWindow_CurrentMenu->Release(); | |
316 pGUIWindow2->Release(); | |
317 pGUIWindow2 = 0; | |
318 pEventTimer->Resume(); | |
319 current_screen_type = SCREEN_GAME; | |
320 viewparams->bRedrawGameUI = v15; | |
321 break; | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
322 }*/ |
2541 | 323 if (current_screen_type == SCREEN_VIDEO) |
324 { | |
325 //pVideoPlayer->Unload(); | |
326 } | |
327 else | |
328 { | |
329 if (current_screen_type != SCREEN_1B) | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
330 { // MENU_CREDITSCLOSE for example |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
331 if (pGUIWindow_CurrentMenu) |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
332 { |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
333 pGUIWindow_CurrentMenu->Release(); |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
334 pGUIWindow_CurrentMenu = nullptr; |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
335 } |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
336 if (pGUIWindow2) |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
337 { |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
338 pGUIWindow2->Release(); |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
339 pGUIWindow2 = 0; |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
340 } |
2541 | 341 pEventTimer->Resume(); |
342 current_screen_type = SCREEN_GAME; | |
343 viewparams->bRedrawGameUI = v15; | |
344 break; | |
345 } | |
346 //VideoPlayer::dtor(); | |
347 } | |
348 break; | |
349 default: | |
350 break; | |
351 } | |
352 } while (pMessageQueue_50CBD0->uNumMessages); | |
353 } | |
354 } | |
355 | |
356 | |
357 //----- (004627B7) -------------------------------------------------------- | |
358 void MainMenu_Loop() | |
359 { | |
360 GUIButton *pButton; // eax@27 | |
361 unsigned int pControlParam; // ecx@35 | |
362 unsigned int pY; // [sp-18h] [bp-54h]@39 | |
363 Texture *pTexture; // [sp-14h] [bp-50h]@39 | |
364 GUIWindow *pWindow; // [sp+4h] [bp-38h]@11 | |
365 MSG msg; | |
366 | |
367 current_screen_type = SCREEN_GAME; | |
368 | |
369 pGUIWindow2 = 0; | |
370 pAudioPlayer->StopChannels(-1, -1); | |
371 pMouse->RemoveHoldingItem(); | |
372 | |
373 pIcons_LOD->_inlined_sub2(); | |
374 | |
2551
4008b2f34be0
MainMenu rendering moved from event loop to respective window class
a.parshin
parents:
2547
diff
changeset
|
375 pWindow_MainMenu = new GUIWindow_MainMenu(); |
2541 | 376 |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
377 main_menu_background.Release(); |
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
378 main_menu_background.Load("title.pcx", 0); |
2541 | 379 SetCurrentMenuID(MENU_MAIN); |
380 SetForegroundWindow(window->GetApiHandle()); | |
381 SendMessageW(window->GetApiHandle(), WM_ACTIVATEAPP, 1, 0); | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
382 |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
383 //while (GetCurrentMenuID() == MENU_MAIN || GetCurrentMenuID() == MENU_SAVELOAD) |
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
384 while (GetCurrentMenuID() == MENU_MAIN) |
2541 | 385 { |
386 POINT pt; | |
387 pMouse->GetCursorPos(&pt); | |
388 pWindow = pWindow_MainMenu; | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
389 /*if (GetCurrentMenuID() == MENU_SAVELOAD) |
2541 | 390 { |
391 if (current_screen_type != SCREEN_LOADGAME) | |
392 { | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
393 main_menu_background.Release(); |
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
394 main_menu_background.Load("lsave640.pcx", 0); |
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
395 pGUIWindow2 = new GUIWindow(0, 0, window->GetWidth(), window->GetHeight(), 0, 0); |
2547 | 396 |
397 //LoadUI_Load(0); | |
398 pGUIWindow_CurrentMenu = new GUIWindow_Load(false); | |
2541 | 399 } |
400 pWindow = pGUIWindow_CurrentMenu; | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
401 }*/ |
2541 | 402 |
403 while (PeekMessageW(&msg, 0, 0, 0, PM_REMOVE)) | |
404 { | |
405 if (msg.message == WM_QUIT) | |
406 Engine_DeinitializeAndTerminate(0); | |
407 TranslateMessage(&msg); | |
408 DispatchMessageW(&msg); | |
409 } | |
410 | |
411 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_APP_INACTIVE) | |
412 { | |
413 WaitMessage(); | |
414 continue; | |
415 } | |
416 | |
417 pRenderer->BeginScene(); | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
418 pRenderer->DrawTextureNew(0, 0, &main_menu_background); |
2541 | 419 |
420 MainMenu_EventLoop(); | |
421 GUI_UpdateWindows(); | |
422 | |
423 pRenderer->EndScene(); | |
424 pRenderer->Present(); | |
425 } | |
2551
4008b2f34be0
MainMenu rendering moved from event loop to respective window class
a.parshin
parents:
2547
diff
changeset
|
426 |
2541 | 427 MainMenu_EventLoop(); |
428 pRenderer->BeginScene(); | |
429 GUI_UpdateWindows(); | |
430 pRenderer->EndScene(); | |
431 pRenderer->Present(); | |
2544
c674d547cc7c
GUIWindow switch logic refactored into behaviour classes
a.parshin
parents:
2541
diff
changeset
|
432 main_menu_background.Release(); |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
433 /*if (pGUIWindow2) |
2541 | 434 { |
435 pGUIWindow2->Release(); | |
436 pGUIWindow2 = 0; | |
2552
ac16f4a3a91e
Load from MainMenu logic separated from MainMenu window
a.parshin
parents:
2551
diff
changeset
|
437 }*/ |
2541 | 438 pWindow_MainMenu->Release(); |
439 pIcons_LOD->RemoveTexturesPackFromTextureList(); | |
440 } |