//Processes Main Menu void MainMenu() { u8 Done=_FALSE; DrawBG(7); if (DBUG==_FALSE) { echo_wait_sfx(SFX_09); //"Ultra Air Hockey!" echo_wait_sfx(SFX_08); //Siren } Trig=PTRUE; //Loop until Done is PTRUE while (Done==_FALSE) { echo_play_bgm(BGM_02); //Play HockeyFever (Loop) InitMenu(1,0,0,4,PTRUE); //Init menu to 3 items JOY_setEventHandler(&BtnHMenu); //Set appropriate button handler //While nothing is selected while (SItem==0) { VDP_waitVSync(); //If a dir key was pressed, update the background to reflect highlighted choice if (Trig==PTRUE) { DrawBG(10+HItem); } } //Process the selected item switch (SItem) { //Play case 1: VDP_fadeOutAll(100,_FALSE); ChrselMenu(); //Do Char selection menu Done=PTRUE; break; //Options case 2: echo_wait_sfx(SFX_11); //"Options" VDP_fadeOutAll(100,_FALSE); OptionsMenu(); Trig=PTRUE; break; //Credits case 3: echo_wait_sfx(SFX_12); //"Credits" VDP_fadeOutAll(100,_FALSE); Credits(); Trig=PTRUE; break; } } JOY_setEventHandler( &BtnNada ); //Remove button handler }
//------------------------------------------------------------------------------------ // прорисовка меню //------------------------------------------------------------------------------------ void DrawMenu() { // делаем плавное появление меню if (NeedShowMenu) { MenuContentTransp = 2.4f*(vw_GetTime()-LastMenuUpdateTime); if (MenuContentTransp >= 1.0f) { MenuContentTransp = 1.0f; NeedShowMenu = false; LastMenuUpdateTime = vw_GetTime(); // выводим подсказку, если нужно if (GameStatus == PROFILE) if (Setup.NeedShowHint[0]) SetCurrentDialogBox(9); if (GameStatus == WORKSHOP) { if (CurrentWorkshop == 1) if (Setup.NeedShowHint[1]) SetCurrentDialogBox(10); if (CurrentWorkshop == 2) if (Setup.NeedShowHint[2]) SetCurrentDialogBox(11); if (CurrentWorkshop == 3) if (Setup.NeedShowHint[3]) SetCurrentDialogBox(12); } if (GameStatus == MISSION) { // проверяем, если в одном из профайлов уже открыли 3 миссии - выводим хинт с пожертвованием bool NeedShowDonate = false; for (int i=0; i<5; i++) { if (Setup.Profile[i].Used) if (Setup.Profile[i].ByMissionExperience[2] > 0) NeedShowDonate = true; } if (NeedShowDonate) if (Setup.NeedShowHint[6]) SetCurrentDialogBox(15); } } } // делаем полавное угасание меню if (NeedHideMenu) { MenuContentTransp = 1.0f - 2.4f*(vw_GetTime() - LastMenuUpdateTime); if (MenuContentTransp <= 0.0f) { MenuContentTransp = 0.0f; SetMenu2(NextMenu); LastMenuUpdateTime = vw_GetTime(); NeedShowMenu = true; NeedHideMenu = false; } } vw_SetCameraMoveAroundPoint(VECTOR3D(0,0,0), 0.0f, VECTOR3D(0.0f, 0.0f, 0.0f)); vw_CameraLookAt(); // всегда первым рисуем скайбокс и "далекое" окружение StarSystemUpdate(); StarSystemDraw(1); // рисуем название игры, чтобы звезды и корабли пролетали перед ним vw_Start2DMode(-1,1); // надпись AstroMenace RECT SrcRect, DstRect; SetRect(&SrcRect,0,0,863,128 ); int StartX = (Setup.iAspectRatioWidth - 863)/2; SetRect(&DstRect,StartX,10,StartX+863,10+128); if (GameStatus != WORKSHOP && GameStatus != INFORMATION && GameStatus != INTERFACE && GameStatus != OPTIONS && GameStatus != CONFCONTROL && GameStatus != OPTIONS_ADVANCED) { vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/astromenace.tga"), true, MenuContentTransp, 0.0f, RI_UL_CORNER, 1.0f, 1.0f, 1.0f); } vw_End2DMode(); // рисуем все 3д объекты DrawAllObject3D(1); // после полной прорисовки делаем обновление данных UpdateAllObject3D(vw_GetTime()); vw_UpdateAllParticleSystems(vw_GetTime()); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // работаем со скриптом, пока он есть //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (Script != 0) if (!Script->Update(vw_GetTime())) { // удаляем скрипт delete Script; Script = 0; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // переходим в 2д режим для прорисовки всех 2д частей //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ vw_Start2DMode(-1,1); switch(GameStatus) { case MAIN_MENU: MainMenu(); break; case TOP_SCORES: TopScoresMenu(); break; case INTERFACE: InterfaceMenu(MenuContentTransp, &Button10Transp, &LastButton10UpdateTime); break; case OPTIONS: OptionsMenu(MenuContentTransp, &Button10Transp, &LastButton10UpdateTime, &Button11Transp, &LastButton11UpdateTime); break; case OPTIONS_ADVANCED: OptionsAdvMenu(MenuContentTransp, &Button10Transp, &LastButton10UpdateTime, &Button11Transp, &LastButton11UpdateTime); break; case INFORMATION: InformationMenu(); break; case CREDITS: CreditsMenu(); break; case CONFCONTROL: ConfControlMenu(MenuContentTransp, &Button10Transp, &LastButton10UpdateTime); break; case PROFILE: ProfileMenu(); break; case DIFFICULTY: DifficultyMenu(); break; case MISSION: MissionMenu(); break; case WORKSHOP: WorkshopMenu(); break; default: break; } //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // последнее - вывод версии и копирайта //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Version vw_DrawFont(6, 740, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.99f, "%s %s %s %i", vw_GetText("11_Version"), GAME_VERSION, vw_GetText("11_build"), GAME_BUILD); // Copyright int CSize = vw_FontSize("%s © 2007-2012, Viewizard", vw_GetText("11_Copyright")); vw_DrawFont(Setup.iAspectRatioWidth-7-CSize, 740, 0, 0, 1.0f, 1.0f,1.0f,1.0f, 0.99f, "%s © 2007-2012, Viewizard", vw_GetText("11_Copyright")); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // завершение прорисовки //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ vw_End2DMode(); // если нужно - рисуем в окошке еще одном switch(GameStatus) { case INFORMATION: InformationDrawObject(); break; default: break; } // черное затемнение, если нужно if (NeedOnMenu) { MenuBlackTransp = 1.0f - 2.4f*(vw_GetTime() - LastMenuOnOffUpdateTime); if (MenuBlackTransp <= 0.0f) { MenuBlackTransp = 0.0f; NeedOnMenu = false; LastMenuOnOffUpdateTime = vw_GetTime(); } vw_Start2DMode(-1,1); RECT SrcRect, DstRect; SetRect(&SrcRect,0,0,2,2); SetRect(&DstRect,0,0,Setup.iAspectRatioWidth,768); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, MenuBlackTransp); vw_End2DMode(); } // черное затемнение, если нужно if (NeedOffMenu) { MenuBlackTransp = 2.4f*(vw_GetTime() - LastMenuOnOffUpdateTime); if (MenuBlackTransp >= 1.0f) { MenuBlackTransp = 1.0f; NeedOffMenu = false; LastMenuOnOffUpdateTime = vw_GetTime(); // переход на игру WorkshopDestroyData(); ComBuffer = GAME; } vw_Start2DMode(-1,1); RECT SrcRect, DstRect; SetRect(&SrcRect,0,0,2,2); SetRect(&DstRect,0,0,Setup.iAspectRatioWidth,768); vw_DrawTransparent(&DstRect, &SrcRect, vw_FindTextureByName("DATA/MENU/blackpoint.tga"), true, MenuBlackTransp); vw_End2DMode(); } }