1 /************************************************************************************
2
3 AstroMenace
4 Hardcore 3D space scroll-shooter with spaceship upgrade possibilities.
5 Copyright (c) 2006-2019 Mikhail Kurinnoi, Viewizard
6
7
8 AstroMenace is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 AstroMenace is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with AstroMenace. If not, see <https://www.gnu.org/licenses/>.
20
21
22 Website: https://viewizard.com/
23 Project: https://github.com/viewizard/astromenace
24 E-mail: viewizard@viewizard.com
25
26 *************************************************************************************/
27
28 // TODO translate comments
29
30 // NOTE in future, use make_unique() to make unique_ptr-s (since C++14)
31
32 #include "../core/core.h"
33 #include "../build_config.h"
34 #include "../config/config.h"
35 #include "../ui/font.h"
36 #include "../ui/cursor.h"
37 #include "../assets/audio.h"
38 #include "../assets/texture.h"
39 #include "../script/script.h"
40 #include "../object3d/object3d.h"
41 #include "../gfx/star_system.h"
42 #include "../gfx/shadow_map.h"
43 #include "../command.h"
44 #include "../game/camera.h"
45 #include "../game.h" // FIXME "game.h" should be replaced by individual headers
46
47 // NOTE switch to nested namespace definition (namespace A::B::C { ... }) (since C++17)
48 namespace viewizard {
49 namespace astromenace {
50
51 namespace {
52
53 std::unique_ptr<cMissionScript> MenuScript{};
54
55 } // unnamed namespace
56
57 float LastMenuUpdateTime = 0.0f;
58 float MenuContentTransp = 0.0f;
59 float LastMenuOnOffUpdateTime = 0.0f;
60 float MenuBlackTransp = 0.0f;
61 bool NeedOnMenu = false;// если нужно выйти из черного
62 bool NeedOffMenu = false;
63 bool NeedShowMenu = false;
64 bool NeedHideMenu = false;
65 eMenuStatus MenuStatus;
66 eMenuStatus NextMenu;
67 eMenuStatus PrevMenu{eMenuStatus::MAIN_MENU};
68
69 float Button1Transp = 1.0f;
70 float LastButton1UpdateTime = 0.0f;
71 float Button2Transp = 1.0f;
72 float LastButton2UpdateTime = 0.0f;
73 float Button3Transp = 1.0f;
74 float LastButton3UpdateTime = 0.0f;
75 float Button4Transp = 1.0f;
76 float LastButton4UpdateTime = 0.0f;
77 float Button5Transp = 1.0f;
78 float LastButton5UpdateTime = 0.0f;
79 float Button6Transp = 1.0f;
80 float LastButton6UpdateTime = 0.0f;
81 float Button7Transp = 1.0f;
82 float LastButton7UpdateTime = 0.0f;
83 float Button8Transp = 1.0f;
84 float LastButton8UpdateTime = 0.0f;
85 float Button9Transp = 1.0f;
86 float LastButton9UpdateTime = 0.0f;
87 float Button10Transp = 1.0f;
88 float LastButton10UpdateTime = 0.0f;
89 float Button11Transp = 1.0f;
90 float LastButton11UpdateTime = 0.0f;
91 float Button12Transp = 1.0f;
92 float LastButton12UpdateTime = 0.0f;
93 float Button13Transp = 1.0f;
94 float LastButton13UpdateTime = 0.0f;
95 float Button14Transp = 1.0f;
96 float LastButton14UpdateTime = 0.0f;
97
98
99
100
101
102
103
104 //------------------------------------------------------------------------------------
105 // инициализация меню
106 //------------------------------------------------------------------------------------
InitMenu(eMenuStatus NewMenuStatus)107 void InitMenu(eMenuStatus NewMenuStatus)
108 {
109 MenuStatus = NewMenuStatus;
110
111 ShadowMap_SizeSetup(eShadowMapSetup::Menu);
112
113 // установка курсора на центр
114 // получаем размер клиентской области
115 float tmpViewportWidth, tmpViewportHeight;
116 vw_GetViewport(nullptr, nullptr, &tmpViewportWidth, &tmpViewportHeight);
117 // установка мышки, чтобы не учитывать перемещения в меню
118 SDL_WarpMouseInWindow(vw_GetSDLWindow(),
119 static_cast<int>((512.0f + 256.0f) / (GameConfig().InternalWidth / tmpViewportWidth)),
120 static_cast<int>(384.0f / (GameConfig().InternalHeight / tmpViewportHeight)));
121
122
123
124 Button1Transp = 1.0f;
125 LastButton1UpdateTime = 0.0f;
126 Button2Transp = 1.0f;
127 LastButton2UpdateTime = 0.0f;
128 Button3Transp = 1.0f;
129 LastButton3UpdateTime = 0.0f;
130 Button4Transp = 1.0f;
131 LastButton4UpdateTime = 0.0f;
132 Button5Transp = 1.0f;
133 LastButton5UpdateTime = 0.0f;
134 Button6Transp = 1.0f;
135 LastButton6UpdateTime = 0.0f;
136 Button7Transp = 1.0f;
137 LastButton7UpdateTime = 0.0f;
138 Button8Transp = 1.0f;
139 LastButton8UpdateTime = 0.0f;
140 Button9Transp = 1.0f;
141 LastButton9UpdateTime = 0.0f;
142 Button10Transp = 1.0f;
143 LastButton10UpdateTime = 0.0f;
144 Button11Transp = 1.0f;
145 LastButton11UpdateTime = 0.0f;
146 Button12Transp = 1.0f;
147 LastButton12UpdateTime = 0.0f;
148 Button13Transp = 1.0f;
149 LastButton13UpdateTime = 0.0f;
150 Button14Transp = 1.0f;
151 LastButton14UpdateTime = 0.0f;
152 LastMenuUpdateTime = 0.0f;
153 MenuContentTransp = 0.0f;
154
155
156 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
157 // иним камеру, всегда до работы со скриптом (!!!)
158 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
159 vw_ResizeScene(45.0f, GameConfig().InternalWidth / GameConfig().InternalHeight, 1.0f, 2000.0f);
160 vw_SetCameraLocation(sVECTOR3D{-50.0f, 30.0f, -50.0f});
161 vw_SetCameraMoveAroundPoint(sVECTOR3D{0.0f, 0.0f, 0.0f}, 0.0f, sVECTOR3D{0.0f, 0.0f, 0.0f});
162
163 // since we use scripts with background animation in the same way as
164 // games levels do, we should reset game camera first
165 ResetCamera();
166
167 StarSystemInitByType(eDrawType::MENU); // should be before RunScript()
168
169 MenuScript.reset(new cMissionScript);
170
171 if (GameConfig().MenuScript > 2)
172 ChangeGameConfig().MenuScript = 0;
173 switch (GameConfig().MenuScript) {
174 case 0:
175 MenuScript->RunScript("script/menu1.xml", vw_GetTimeThread(0));
176 break;
177 case 1:
178 MenuScript->RunScript("script/menu2.xml", vw_GetTimeThread(0));
179 break;
180 case 2:
181 MenuScript->RunScript("script/menu3.xml", vw_GetTimeThread(0));
182 break;
183 // на всякий случай
184 default:
185 MenuScript->RunScript("script/menu1.xml", vw_GetTimeThread(0));
186 break;
187 }
188 ChangeGameConfig().MenuScript++;
189
190 // немного прокручиваем скрипт
191 float Time1 = vw_GetTimeThread(0);
192 MenuScript->StartTime = Time1-30;
193 MenuScript->TimeLastOp = Time1-30;
194 for (float i=Time1-30; i<Time1; i+=1.0f) {
195 UpdateAllObject3D(i);
196 MenuScript->Update(i);
197 }
198 MenuScript->StartTime = Time1;
199 MenuScript->TimeLastOp = Time1;
200
201
202
203 LastMenuUpdateTime = vw_GetTimeThread(0);
204 NeedShowMenu = true;
205 NeedHideMenu = false;
206 LastMenuOnOffUpdateTime = vw_GetTimeThread(0);
207 MenuBlackTransp = 1.0f;
208 NeedOnMenu = true;
209 NeedOffMenu = false;
210 SetShowGameCursor(true);
211 }
212
213
214
215
216
217
218
219
220
221 //------------------------------------------------------------------------------------
222 // установка меню
223 //------------------------------------------------------------------------------------
SetOptionsMenu(eMenuStatus Menu)224 void SetOptionsMenu(eMenuStatus Menu)
225 {
226 switch (Menu) {
227 case eMenuStatus::OPTIONS:
228 Options_Width = GameConfig().Width;
229 Options_Height = GameConfig().Height;
230 Options_Fullscreen = GameConfig().Fullscreen;
231 Options_VSync = GameConfig().VSync;
232 break;
233
234 case eMenuStatus::OPTIONS_ADVANCED:
235 Options_UseGLSL120 = GameConfig().UseGLSL120;
236 Options_MSAA = GameConfig().MSAA;
237 Options_CSAA = GameConfig().CSAA;
238 Options_TexturesAnisotropyLevel = GameConfig().AnisotropyLevel;
239 Options_ShadowMap = GameConfig().ShadowMap;
240 break;
241
242 case eMenuStatus::CONFCONTROL:
243 if (!GameConfig().KeyBoardUp)
244 ChangeGameConfig().KeyBoardUp = SDLK_UP;
245 if (!GameConfig().KeyBoardDown)
246 ChangeGameConfig().KeyBoardDown = SDLK_DOWN;
247 if (!GameConfig().KeyBoardLeft)
248 ChangeGameConfig().KeyBoardLeft = SDLK_LEFT;
249 if (!GameConfig().KeyBoardRight)
250 ChangeGameConfig().KeyBoardRight = SDLK_RIGHT;
251 if (!GameConfig().KeyBoardPrimary)
252 ChangeGameConfig().KeyBoardPrimary = SDLK_LCTRL;
253 if (!GameConfig().KeyBoardSecondary)
254 ChangeGameConfig().KeyBoardSecondary = SDLK_SPACE;
255 if (!GameConfig().MousePrimary)
256 ChangeGameConfig().MousePrimary = SDL_BUTTON_LEFT;
257 if (!GameConfig().MouseSecondary)
258 ChangeGameConfig().MouseSecondary = SDL_BUTTON_RIGHT;
259 if (GameConfig().JoystickPrimary == -1)
260 ChangeGameConfig().JoystickPrimary = 0;
261 if (GameConfig().JoystickSecondary == -1)
262 ChangeGameConfig().JoystickSecondary = 1;
263 break;
264
265 default:
266 break;
267 }
268 }
SetMenu(eMenuStatus Menu)269 void SetMenu(eMenuStatus Menu)
270 {
271 PlayMenuSFX(eMenuSFX::SwitchToAnotherMenu, 1.0f);
272
273 switch (Menu) {
274 case eMenuStatus::PROFILE:
275 NewProfileName.clear();
276 vw_SetCurrentUnicodeChar(nullptr);
277 break;
278
279 case eMenuStatus::OPTIONS:
280 case eMenuStatus::OPTIONS_ADVANCED:
281 case eMenuStatus::CONFCONTROL:
282 SetOptionsMenu(Menu);
283 break;
284
285 case eMenuStatus::TOP_SCORES:
286 InitTopScoresMenu();
287 break;
288
289 case eMenuStatus::MISSION:
290 MissionListInit();
291 vw_ResetWheelStatus();
292 // ставим нужный лист миссий
293 StartMission = 0;
294 EndMission = 4;
295 if (CurrentMission != -1)
296 if (CurrentMission > 2) { // нужно сдвинуть лист, чтобы выбранный элемент был по середине списка
297 StartMission = CurrentMission-2;
298 EndMission = CurrentMission+2;
299
300 if (CurrentMission >= AllMission-2) {
301 StartMission = AllMission-5;
302 EndMission = AllMission-1;
303 }
304 }
305 break;
306
307 case eMenuStatus::INFORMATION:
308 vw_ResetWheelStatus();
309 CreateNum = 1;
310 CreateInfoObject();
311 break;
312
313 case eMenuStatus::CREDITS:
314 InitCreditsMenu(vw_GetTimeThread(0));
315 break;
316
317 default:
318 break;
319
320 }
321
322 NextMenu = Menu;
323
324 // прячем текущее меню
325 NeedShowMenu = false;
326 NeedHideMenu = true;
327 LastMenuUpdateTime = vw_GetTimeThread(0);
328
329
330
331 }
332
333
334
SetMenu2(eMenuStatus Menu)335 void SetMenu2(eMenuStatus Menu)
336 {
337 // текущее меню уже стало невидимым, освобождаем память после воркшопа + выключаем голосовые сообщения
338 // раньше удалять нельзя - для вывода используем данные из 3д объектов (!)
339 switch (MenuStatus) {
340 case eMenuStatus::WORKSHOP:
341 WorkshopDestroyData();
342 VoiceNeedMoreEnergy = 0;
343 VoiceAmmoOut = 0;
344 break;
345 default:
346 break;
347 }
348
349
350
351 PrevMenu = MenuStatus;
352 MenuStatus = Menu;
353
354 float Time = vw_GetTimeThread(0);
355 Button1Transp = 1.0f;
356 LastButton1UpdateTime = Time;
357 Button2Transp = 1.0f;
358 LastButton2UpdateTime = Time;
359 Button3Transp = 1.0f;
360 LastButton3UpdateTime = Time;
361 Button4Transp = 1.0f;
362 LastButton4UpdateTime = Time;
363 Button5Transp = 1.0f;
364 LastButton5UpdateTime = Time;
365 Button6Transp = 1.0f;
366 LastButton6UpdateTime = Time;
367 Button7Transp = 1.0f;
368 LastButton7UpdateTime = Time;
369 Button8Transp = 1.0f;
370 LastButton8UpdateTime = Time;
371 Button9Transp = 1.0f;
372 LastButton9UpdateTime = Time;
373 Button10Transp = 1.0f;
374 LastButton10UpdateTime = Time;
375 Button11Transp = 1.0f;
376 LastButton11UpdateTime = Time;
377 Button12Transp = 1.0f;
378 LastButton12UpdateTime = Time;
379 Button13Transp = 1.0f;
380 LastButton13UpdateTime = Time;
381 Button14Transp = 1.0f;
382 LastButton14UpdateTime = Time;
383 }
384
385
386
387
388
389
390 //------------------------------------------------------------------------------------
391 // прорисовка меню
392 //------------------------------------------------------------------------------------
DrawMenu()393 void DrawMenu()
394 {
395
396 // делаем плавное появление меню
397 if (NeedShowMenu) {
398 MenuContentTransp = 2.4f*(vw_GetTimeThread(0) - LastMenuUpdateTime);
399 if (MenuContentTransp >= 1.0f) {
400 MenuContentTransp = 1.0f;
401 NeedShowMenu = false;
402 LastMenuUpdateTime = vw_GetTimeThread(0);
403
404 // выводим подсказку, если нужно
405 if ((MenuStatus == eMenuStatus::PROFILE) &&
406 GameConfig().NeedShowHint[0])
407 SetCurrentDialogBox(eDialogBox::ProfileTipsAndTricks);
408 if (MenuStatus == eMenuStatus::WORKSHOP) {
409 if ((CurrentWorkshop == 1) &&
410 GameConfig().NeedShowHint[1])
411 SetCurrentDialogBox(eDialogBox::ShipyardTipsAndTricks);
412 if ((CurrentWorkshop == 2) &&
413 GameConfig().NeedShowHint[2])
414 SetCurrentDialogBox(eDialogBox::SystemsTipsAndTricks);
415 if ((CurrentWorkshop == 3) &&
416 GameConfig().NeedShowHint[3])
417 SetCurrentDialogBox(eDialogBox::WeaponryTipsAndTricks);
418 }
419 }
420 }
421
422 // делаем полавное угасание меню
423 if (NeedHideMenu) {
424 MenuContentTransp = 1.0f - 2.4f*(vw_GetTimeThread(0) - LastMenuUpdateTime);
425 if (MenuContentTransp <= 0.0f) {
426 MenuContentTransp = 0.0f;
427 SetMenu2(NextMenu);
428 LastMenuUpdateTime = vw_GetTimeThread(0);
429 NeedShowMenu = true;
430 NeedHideMenu = false;
431 }
432 }
433
434
435 vw_SetCameraMoveAroundPoint(sVECTOR3D{0.0f, 0.0f, 0.0f}, 0.0f, sVECTOR3D{0.0f, 0.0f, 0.0f});
436 vw_CameraLookAt();
437
438
439
440
441 // всегда первым рисуем скайбокс и "далекое" окружение
442 StarSystemDraw(eDrawType::MENU);
443
444
445
446
447 // рисуем название игры, чтобы звезды и корабли пролетали перед ним
448 vw_Start2DMode(-1,1);
449 // надпись AstroMenace
450 sRECT SrcRect, DstRect;
451 SrcRect(0,0,863,128 );
452 int StartX = (GameConfig().InternalWidth - 863)/2;
453 DstRect(StartX,10,StartX+863,10+128);
454
455 if ((MenuStatus != eMenuStatus::WORKSHOP) &&
456 (MenuStatus != eMenuStatus::INTERFACE) &&
457 (MenuStatus != eMenuStatus::OPTIONS) &&
458 (MenuStatus != eMenuStatus::CONFCONTROL) &&
459 (MenuStatus != eMenuStatus::OPTIONS_ADVANCED)) {
460 vw_Draw2D(DstRect, SrcRect, GetPreloadedTextureAsset("menu/astromenace.tga"), true, MenuContentTransp);
461 }
462
463 vw_End2DMode();
464
465
466
467 // рисуем все 3д объекты
468 DrawAllObject3D(eDrawType::MENU);
469
470
471
472 // после полной прорисовки делаем обновление данных
473 UpdateAllObject3D(vw_GetTimeThread(0));
474 vw_UpdateAllParticleSystems(vw_GetTimeThread(0));
475
476
477
478
479 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
480 // работаем со скриптом, пока он есть
481 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
482 if (MenuScript &&
483 (!MenuScript->Update(vw_GetTimeThread(0))))
484 MenuScript.reset();
485
486
487
488
489
490 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
491 // переходим в 2д режим для прорисовки всех 2д частей
492 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
493 vw_Start2DMode(-1,1);
494
495 switch (MenuStatus) {
496 case eMenuStatus::MAIN_MENU:
497 MainMenu();
498 break;
499 case eMenuStatus::TOP_SCORES:
500 TopScoresMenu();
501 break;
502 case eMenuStatus::INTERFACE:
503 InterfaceMenu(MenuContentTransp, Button10Transp, LastButton10UpdateTime);
504 break;
505 case eMenuStatus::OPTIONS:
506 OptionsMenu(MenuContentTransp, Button10Transp, LastButton10UpdateTime, Button11Transp, LastButton11UpdateTime);
507 break;
508 case eMenuStatus::OPTIONS_ADVANCED:
509 OptionsAdvMenu(MenuContentTransp, Button10Transp, LastButton10UpdateTime, Button11Transp, LastButton11UpdateTime);
510 break;
511 case eMenuStatus::INFORMATION:
512 InformationMenu();
513 break;
514 case eMenuStatus::CREDITS:
515 CreditsMenu();
516 break;
517 case eMenuStatus::CONFCONTROL:
518 ConfControlMenu(MenuContentTransp, Button10Transp, LastButton10UpdateTime);
519 break;
520 case eMenuStatus::PROFILE:
521 ProfileMenu();
522 break;
523 case eMenuStatus::DIFFICULTY:
524 DifficultyMenu();
525 break;
526 case eMenuStatus::MISSION:
527 MissionMenu();
528 break;
529 case eMenuStatus::WORKSHOP:
530 WorkshopMenu();
531 break;
532
533 default:
534 break;
535 }
536
537
538
539
540 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
541 // последнее - вывод версии и копирайта
542 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
543 vw_SetFontSize(10);
544
545 // Version
546 int VSize = vw_TextWidthUTF32(vw_GetTextUTF32("Version"));
547 vw_DrawTextUTF32(6, GameConfig().InternalHeight - 16, 0, 0, 1.0f, sRGBCOLOR{eRGBCOLOR::white}, 0.99f, vw_GetTextUTF32("Version"));
548 vw_DrawText(16 + VSize, GameConfig().InternalHeight - 16, 0, 0, 1.0f, sRGBCOLOR{eRGBCOLOR::white}, 0.99f, GAME_VERSION);
549 // Copyright
550 int CSize = vw_TextWidth("Copyright © 2007-2019, Viewizard");
551 vw_DrawText(GameConfig().InternalWidth - 6 - CSize, GameConfig().InternalHeight - 16, 0, 0, 1.0f, sRGBCOLOR{eRGBCOLOR::white}, 0.99f,
552 "Copyright © 2007-2019, Viewizard");
553
554 ResetFontSize();
555 vw_End2DMode();
556
557
558 // если нужно - рисуем в окошке еще одном
559 switch (MenuStatus) {
560 case eMenuStatus::INFORMATION:
561 InformationDrawObject();
562 break;
563
564 default:
565 break;
566 }
567
568
569
570
571 // черное затемнение, если нужно
572 if (NeedOnMenu) {
573 MenuBlackTransp = 1.0f - 2.4f*(vw_GetTimeThread(0) - LastMenuOnOffUpdateTime);
574 if (MenuBlackTransp <= 0.0f) {
575 MenuBlackTransp = 0.0f;
576 NeedOnMenu = false;
577 LastMenuOnOffUpdateTime = vw_GetTimeThread(0);
578 }
579
580 vw_Start2DMode(-1,1);
581
582 SrcRect(0, 0, 2, 2);
583 DstRect(0, 0, GameConfig().InternalWidth, 768);
584 vw_Draw2D(DstRect, SrcRect, GetPreloadedTextureAsset("menu/blackpoint.tga"), true, MenuBlackTransp);
585
586 vw_End2DMode();
587 }
588
589 // черное затемнение, выключаем воркшоп (готовимся к переходу на игру)
590 if (NeedOffMenu) {
591 MenuBlackTransp = 2.4f*(vw_GetTimeThread(0) - LastMenuOnOffUpdateTime);
592 if (MenuBlackTransp >= 1.0f) {
593 MenuBlackTransp = 1.0f;
594 NeedOffMenu = false;
595 LastMenuOnOffUpdateTime = vw_GetTimeThread(0);
596 // переход на игру
597 WorkshopDestroyData();
598 cCommand::GetInstance().Set(eCommand::SWITCH_FROM_MENU_TO_GAME);
599 }
600
601 vw_Start2DMode(-1,1);
602
603 SrcRect(0, 0, 2, 2);
604 DstRect(0, 0, GameConfig().InternalWidth, 768);
605 vw_Draw2D(DstRect, SrcRect, GetPreloadedTextureAsset("menu/blackpoint.tga"), true, MenuBlackTransp);
606
607 vw_End2DMode();
608 }
609
610 }
611
612
613
614
615
616
617
618
619
620
621
622
623 //------------------------------------------------------------------------------------
624 // прорисовка основного меню
625 //------------------------------------------------------------------------------------
MainMenu()626 void MainMenu()
627 {
628
629 int Prir = 100;
630 int X = (GameConfig().InternalWidth - 384) / 2;
631 int Y = 165;
632
633 if (DrawButton384(X,Y, vw_GetTextUTF32("START GAME"), MenuContentTransp, Button1Transp, LastButton1UpdateTime)) {
634 // если текущего профиля нет - нужно перейти на выбор профилей, если есть - сразу идем на выбор миссий
635 if (CurrentProfile < 0)
636 cCommand::GetInstance().Set(eCommand::SWITCH_TO_PROFILE);
637 else
638 cCommand::GetInstance().Set(eCommand::SWITCH_TO_MISSION);
639 }
640
641
642
643
644
645 Y = Y+Prir;
646 if (DrawButton384(X,Y, vw_GetTextUTF32("TOP SCORES"), MenuContentTransp, Button2Transp, LastButton2UpdateTime))
647 cCommand::GetInstance().Set(eCommand::SWITCH_TO_TOP_SCORES);
648
649 Y = Y+Prir;
650 if (DrawButton384(X,Y, vw_GetTextUTF32("OPTIONS"), MenuContentTransp, Button3Transp, LastButton3UpdateTime))
651 cCommand::GetInstance().Set(eCommand::SWITCH_TO_OPTIONS);
652
653 Y = Y+Prir;
654 if (DrawButton384(X,Y, vw_GetTextUTF32("INFORMATION"), MenuContentTransp, Button4Transp, LastButton4UpdateTime))
655 cCommand::GetInstance().Set(eCommand::SWITCH_TO_INFORMATION);
656
657 Y = Y+Prir;
658 if (DrawButton384(X,Y, vw_GetTextUTF32("CREDITS"), MenuContentTransp, Button5Transp, LastButton5UpdateTime)) {
659 cCommand::GetInstance().Set(eCommand::SWITCH_TO_CREDITS);
660 PlayMusicTheme(eMusicTheme::CREDITS, 2000, 2000);
661 }
662
663 Y = Y+Prir;
664 if (DrawButton384(X,Y, vw_GetTextUTF32("QUIT"), MenuContentTransp, Button6Transp, LastButton6UpdateTime))
665 SetCurrentDialogBox(eDialogBox::QuitFromGame);
666
667 }
668
669 } // astromenace namespace
670 } // viewizard namespace
671