void ARX_MENU_Launch() { arxtime.pause(); //Synchronize menu mixers with game mixers and switch between them ARX_SOUND_MixerSwitch(ARX_SOUND_MixerGame, ARX_SOUND_MixerMenu); ARX_SOUND_PlayMenuAmbiance(AMB_MENU); ARX_MENU_CLICKSOUND(); ARXmenu.currentmode = AMCM_MAIN; ARX_Menu_Resources_Create(); }
void ARX_MENU_Launch(bool allowResume) { REFUSE_GAME_RETURN = !allowResume; arxtime.pause(); //Synchronize menu mixers with game mixers and switch between them ARX_SOUND_MixerSwitch(ARX_SOUND_MixerGame, ARX_SOUND_MixerMenu); ARX_SOUND_PlayMenuAmbiance(AMB_MENU); ARX_MENU_CLICKSOUND(); ARXmenu.currentmode = AMCM_MAIN; ARX_Menu_Resources_Create(); Menu2_Open(); }
//----------------------------------------------------------------------------- // ARX Menu Rendering Func // returns false if no menu needs to be displayed //----------------------------------------------------------------------------- bool ARX_Menu_Render() { if(ARXmenu.currentmode == AMCM_OFF) return false; bool br = Menu2_Render(); if(br) return br; if(ARXmenu.currentmode == AMCM_OFF) return false; if(GInput->getMouseButton(Mouse::Button_0)) { EERIEMouseButton = 1; LastMouseClick = 1; } else if(GInput->getMouseButton(Mouse::Button_1)) { EERIEMouseButton = 2; LastMouseClick = 2; } else { EERIEMouseButton = 0; } GRenderer->BeginScene(); GRenderer->Clear(Renderer::ColorBuffer | Renderer::DepthBuffer); FLYING_OVER = 0; //------------------------------------------------------------------------- if(ARXmenu.currentmode == AMCM_NEWQUEST && ARXmenu.mda) { if(ITC.Get("questbook") == NULL) { ARX_Menu_Resources_Release(false); ARX_Menu_Resources_Create(); // TODO this is also in Interface.cpp ITC.Set("playerbook", "graph/interface/book/character_sheet/char_sheet_book"); ITC.Set("ic_casting", "graph/interface/book/character_sheet/buttons_carac/icone_casting"); ITC.Set("ic_close_combat", "graph/interface/book/character_sheet/buttons_carac/icone_close_combat"); ITC.Set("ic_constitution", "graph/interface/book/character_sheet/buttons_carac/icone_constit"); ITC.Set("ic_defense", "graph/interface/book/character_sheet/buttons_carac/icone_defense"); ITC.Set("ic_dexterity", "graph/interface/book/character_sheet/buttons_carac/icone_dext"); ITC.Set("ic_etheral_link", "graph/interface/book/character_sheet/buttons_carac/icone_etheral_link"); ITC.Set("ic_mind", "graph/interface/book/character_sheet/buttons_carac/icone_intel"); ITC.Set("ic_intuition", "graph/interface/book/character_sheet/buttons_carac/icone_intuition"); ITC.Set("ic_mecanism", "graph/interface/book/character_sheet/buttons_carac/icone_mecanism"); ITC.Set("ic_object_knowledge", "graph/interface/book/character_sheet/buttons_carac/icone_obj_knowledge"); ITC.Set("ic_projectile", "graph/interface/book/character_sheet/buttons_carac/icone_projectile"); ITC.Set("ic_stealth", "graph/interface/book/character_sheet/buttons_carac/icone_stealth"); ITC.Set("ic_strength", "graph/interface/book/character_sheet/buttons_carac/icone_strenght"); ITC.Set("questbook", "graph/interface/book/questbook"); ITC.Set("ptexspellbook", "graph/interface/book/spellbook"); ITC.Set("bookmark_char", "graph/interface/book/bookmark_char"); ITC.Set("bookmark_magic", "graph/interface/book/bookmark_magic"); ITC.Set("bookmark_map", "graph/interface/book/bookmark_map"); ITC.Set("bookmark_quest", "graph/interface/book/bookmark_quest"); ITC.Set("accessible_1", "graph/interface/book/accessible/accessible_1"); ITC.Set("accessible_2", "graph/interface/book/accessible/accessible_2"); ITC.Set("accessible_3", "graph/interface/book/accessible/accessible_3"); ITC.Set("accessible_4", "graph/interface/book/accessible/accessible_4"); ITC.Set("accessible_5", "graph/interface/book/accessible/accessible_5"); ITC.Set("accessible_6", "graph/interface/book/accessible/accessible_6"); ITC.Set("accessible_7", "graph/interface/book/accessible/accessible_7"); ITC.Set("accessible_8", "graph/interface/book/accessible/accessible_8"); ITC.Set("accessible_9", "graph/interface/book/accessible/accessible_9"); ITC.Set("accessible_10", "graph/interface/book/accessible/accessible_10"); ITC.Set("current_1", "graph/interface/book/current_page/current_1"); ITC.Set("current_2", "graph/interface/book/current_page/current_2"); ITC.Set("current_3", "graph/interface/book/current_page/current_3"); ITC.Set("current_4", "graph/interface/book/current_page/current_4"); ITC.Set("current_5", "graph/interface/book/current_page/current_5"); ITC.Set("current_6", "graph/interface/book/current_page/current_6"); ITC.Set("current_7", "graph/interface/book/current_page/current_7"); ITC.Set("current_8", "graph/interface/book/current_page/current_8"); ITC.Set("current_9", "graph/interface/book/current_page/current_9"); ITC.Set("current_10", "graph/interface/book/current_page/current_10"); ITC.Set("ptexcursorredist", "graph/interface/cursors/add_points"); ITC.Level = getLocalised("system_charsheet_player_lvl"); ITC.Xp = getLocalised("system_charsheet_player_xp"); ANIM_Set(&player.bookAnimation[0], herowaitbook); player.bookAnimation[0].flags |= EA_LOOP; ARXOldTimeMenu = ARXTimeMenu = arxtime.get_updated(); ARXDiffTimeMenu = 0; } GRenderer->SetRenderState(Renderer::Fog, false); GRenderer->SetRenderState(Renderer::AlphaBlending, false); if(ARXmenu.mda->BookBackground != NULL) { GRenderer->SetRenderState(Renderer::AlphaBlending, false); GRenderer->SetRenderState(Renderer::Fog, false); GRenderer->SetRenderState(Renderer::DepthWrite, false); GRenderer->SetRenderState(Renderer::DepthTest, false); EERIEDrawBitmap2(0, 0, static_cast<float>(g_size.width()), static_cast<float>(g_size.height()), 0.9f, ARXmenu.mda->BookBackground, Color::white); } BOOKZOOM = 1; ARX_INTERFACE_ManageOpenedBook(); if(ARXmenu.mda) { long DONE = 0; if(player.Skill_Redistribute == 0 && player.Attribute_Redistribute == 0) DONE = 1; float ox, oy; ox = Xratio; oy = Yratio; LASTBOOKBUTTON = BOOKBUTTON; BOOKBUTTON = EERIEMouseButton; Xratio = ox; Yratio = oy; if(!ARXmenu.mda->flyover[FLYING_OVER].empty() ) //=ARXmenu.mda->flyover[FLYING_OVER]; { if(FLYING_OVER != OLD_FLYING_OVER) { float fRandom = rnd() * 2; int t = checked_range_cast<int>(fRandom); pTextManage->Clear(); OLD_FLYING_OVER = FLYING_OVER; UNICODE_ARXDrawTextCenteredScroll(hFontInGame, (g_size.width() * 0.5f), 12, (g_size.center().x) * 0.82f, ARXmenu.mda->flyover[FLYING_OVER], Color(232 + t, 204 + t, 143 + t), 1000, 0.01f, 2); } } else { OLD_FLYING_OVER = -1; } float fPosX = 0; float fPosY = 313 * Yratio + (g_size.height() - 313 * Yratio) * 0.70f; float fSizeX = 100 * Xratio; float fSizeY = 100 * Yratio; Color color = Color::none; //--------------------------------------------------------------------- // Button QUICK GENERATION fPosX = (g_size.width() - (513 * Xratio)) * 0.5f; if(MouseInRect(fPosX, fPosY, fPosX + fSizeX + 50, fPosY + fSizeY)) { SpecialCursor = CURSOR_INTERACTION_ON; FLYING_OVER = BUTTON_QUICK_GENERATION; if (EERIEMouseButton & 1) ; else if ((!(EERIEMouseButton & 1)) && (LastMouseClick & 1)) { QUICK_MOD++; int iSkin = player.skin; ARX_MENU_CLICKSOUND(); if(bQuickGenFirstClick) { ARX_PLAYER_MakeAverageHero(); bQuickGenFirstClick = false; } else { ARX_PLAYER_QuickGeneration(); } player.skin = checked_range_cast<char>(iSkin); } color = Color(255, 255, 255); } else color = Color(232, 204, 143); pTextManage->AddText(hFontMenu, ARXmenu.mda->str_button_quickgen, static_cast<long>(fPosX), static_cast<long>(fPosY), color); //--------------------------------------------------------------------- // Button SKIN fPosX = g_size.width() * 0.5f; if(MouseInRect(fPosX, fPosY, fPosX + fSizeX, fPosY + fSizeY)) { SpecialCursor = CURSOR_INTERACTION_ON; FLYING_OVER = BUTTON_SKIN; if(!(EERIEMouseButton & 1) && (LastMouseClick & 1)) { SKIN_MOD++; BOOKZOOM = 1; ARX_MENU_CLICKSOUND(); player.skin++; if(player.skin > 3) player.skin = 0; ARX_PLAYER_Restore_Skin(); } color = Color(255, 255, 255); } else color = Color(232, 204, 143); pTextManage->AddText(hFontMenu, ARXmenu.mda->str_button_skin, static_cast<long>(fPosX), static_cast<long>(fPosY), color); //--------------------------------------------------------------------- // Button DONE fPosX = g_size.width() - (g_size.width() - 513 * Xratio) * 0.5f - 40 * Xratio; if(MouseInRect(fPosX, fPosY, fPosX + fSizeX, fPosY + fSizeY)) { if(DONE) SpecialCursor = CURSOR_INTERACTION_ON; FLYING_OVER = BUTTON_DONE; if(DONE && !(EERIEMouseButton & 1) && (LastMouseClick & 1)) { if(SKIN_MOD == 8 && QUICK_MOD == 10) { SKIN_MOD = -2; } else if(SKIN_MOD == -1) { ARX_PLAYER_MakeSpHero(); player.skin = 4; ARX_PLAYER_Restore_Skin(); SKIN_MOD = 0; SP_HEAD = 1; } else { if(SP_HEAD) { player.skin = 4; ARX_PLAYER_Restore_Skin(); SP_HEAD = 0; } ARX_MENU_CLICKSOUND(); bFadeInOut = true; //fade out bFade = true; //active le fade iFadeAction = AMCM_OFF; } } else { if(DONE) color = Color(255, 255, 255); else color = Color(192, 192, 192); } } else { if(DONE) color = Color(232, 204, 143); else color = Color(192, 192, 192); } if(SKIN_MOD < 0) color = Color(255, 0, 255); pTextManage->AddText(hFontMenu, ARXmenu.mda->str_button_done, static_cast<long>(fPosX), static_cast<long>(fPosY), color); } } DynLight[0].pos.x = 0.f + GInput->getMousePosAbs().x - (g_size.width() >> 1); DynLight[0].pos.y = 0.f + GInput->getMousePosAbs().y - (g_size.height() >> 1); if(pTextManage) { pTextManage->Update(framedelay); pTextManage->Render(); } if(ARXmenu.currentmode != AMCM_CREDITS) ARX_INTERFACE_RenderCursor(1); if(ARXmenu.currentmode == AMCM_NEWQUEST) { if(ProcessFadeInOut(bFadeInOut, 0.1f)) { switch(iFadeAction) { case AMCM_OFF: arxtime.resume(); ARX_MENU_NEW_QUEST_Clicked_QUIT(); iFadeAction = -1; bFade = false; fFadeInOut = 0.f; if(pTextManage) pTextManage->Clear(); break; } } } GRenderer->EndScene(); return true; }
void ARX_Menu_Manage() { // looks for keys for each mode. switch (ARXmenu.currentmode) { case AMCM_OFF: { // Checks for ESC key if (GInput->isKeyPressedNowUnPressed(Keyboard::Key_Escape)) { if (CINEMASCOPE) { if (!FADEDIR) // Disabling ESC capture while fading in or out. { if (SendMsgToAllIO(SM_KEY_PRESSED,"")!=REFUSE) { REQUEST_SPEECH_SKIP=1; } } } else { GRenderer->getSnapshot(savegame_thumbnail, 160, 100); arxtime.pause(); ARXTimeMenu=ARXOldTimeMenu=arxtime.get_updated(); ARX_MENU_Launch(); bFadeInOut=false; //fade out bFade=true; //active le fade TRUE_PLAYER_MOUSELOOK_ON = false; ARX_PLAYER_PutPlayerInNormalStance(1); } } } break; case AMCM_NEWQUEST: { if (GInput->isKeyPressedNowUnPressed(Keyboard::Key_Escape) && ! bFadeInOut // XS: Disabling ESC capture while fading in or out. ) { ARX_MENU_CLICKSOUND(); ARXmenu.currentmode = AMCM_MAIN; } } break; case AMCM_MAIN: if (GInput->isKeyPressedNowUnPressed(Keyboard::Key_Escape)) { if ((MENU_NoActiveWindow()) && (!REFUSE_GAME_RETURN)) { arxtime.resume(); ARX_MENU_Clicked_QUIT(); } } break; case AMCM_CREDITS: if ((GInput->isKeyPressedNowUnPressed(Keyboard::Key_Escape)) || (GInput->isKeyPressedNowUnPressed(Keyboard::Key_Spacebar))) { ARX_MENU_CLICKSOUND(); bFadeInOut = true; //fade out bFade = true; //active le fade iFadeAction = AMCM_MAIN; ARX_MENU_LaunchAmb(AMB_MENU); } break; default: break; } }