//----------------------------------------------------------------------------- // 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; }
//----------------------------------------------------------------------------- // 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->Clear(Renderer::ColorBuffer | Renderer::DepthBuffer); FLYING_OVER = 0; //------------------------------------------------------------------------- if(ARXmenu.currentmode == AMCM_NEWQUEST && ARXmenu.mda) { 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(Rectf(Vec2f(0, 0), g_size.width(), 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 = g_sizeRatio.x; oy = g_sizeRatio.y; LASTBOOKBUTTON = BOOKBUTTON; BOOKBUTTON = EERIEMouseButton; g_sizeRatio.x = ox; g_sizeRatio.y = 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; } Vec2f pos; pos.x = 0; pos.y = 313 * g_sizeRatio.y + (g_size.height() - 313 * g_sizeRatio.y) * 0.70f; Vec2f size = g_sizeRatio; size *= 100; Color color = Color::none; //--------------------------------------------------------------------- // Button QUICK GENERATION pos.x = (g_size.width() - (513 * g_sizeRatio.x)) * 0.5f; const Rectf quickGenerateButtonMouseTestRect( pos, size.x, size.y ); if(quickGenerateButtonMouseTestRect.contains(Vec2f(DANAEMouse))) { 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_SOUND_PlayMenu(SND_MENU_CLICK); 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>(pos.x), static_cast<long>(pos.y), color); //--------------------------------------------------------------------- // Button SKIN pos.x = g_size.width() * 0.5f; const Rectf skinButtonMouseTestRect( pos, size.x, size.y ); if(skinButtonMouseTestRect.contains(Vec2f(DANAEMouse))) { SpecialCursor = CURSOR_INTERACTION_ON; FLYING_OVER = BUTTON_SKIN; if(!(EERIEMouseButton & 1) && (LastMouseClick & 1)) { SKIN_MOD++; BOOKZOOM = 1; ARX_SOUND_PlayMenu(SND_MENU_CLICK); 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>(pos.x), static_cast<long>(pos.y), color); //--------------------------------------------------------------------- // Button DONE pos.x = g_size.width() - (g_size.width() - 513 * g_sizeRatio.x) * 0.5f - 40 * g_sizeRatio.x; const Rectf doneButtonMouseTestRect( pos, size.x, size.y ); if(doneButtonMouseTestRect.contains(Vec2f(DANAEMouse))) { 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_SOUND_PlayMenu(SND_MENU_CLICK); 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>(pos.x), static_cast<long>(pos.y), color); } } EERIE_LIGHT * light = lightHandleGet(torchLightHandle); light->pos.x = 0.f + GInput->getMousePosAbs().x - (g_size.width() >> 1); light->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(true); 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; } } } return true; }
void Credits::render() { //We initialize the datas InitCredits(); int iSize = CreditsData.aCreditsInformations.size() ; //We display them if(CreditsData.iFontAverageHeight != -1) { GRenderer->SetRenderState(Renderer::AlphaBlending, false); GRenderer->SetRenderState(Renderer::Fog, false); GRenderer->SetRenderState(Renderer::DepthWrite, true); GRenderer->SetRenderState(Renderer::DepthTest, false); //Draw Background if(ARXmenu.mda->pTexCredits) { Rectf rect(Vec2f_ZERO, g_size.width(), g_size.height() + 1); EERIEDrawBitmap2(rect, .999f, ARXmenu.mda->pTexCredits, Color::white); } // Use time passed between frame to create scroll effect float time = arxtime.get_updated(false); float dtime = (float)(time - ARXmenu.mda->creditstart); ARXmenu.mda->creditspos -= 0.03f * g_sizeRatio.y * dtime; ARXmenu.mda->creditstart = time; std::vector<CreditsTextInformations>::const_iterator it = CreditsData.aCreditsInformations.begin() + CreditsData.iFirstLine ; for (; it != CreditsData.aCreditsInformations.end(); ++it) { //Update the Y word display float yy = it->sPos.y + ARXmenu.mda->creditspos; //Display the text only if he is on the viewport if ((yy >= -CreditsData.iFontAverageHeight) && (yy <= g_size.height())) { hFontCredits->draw(it->sPos.x, static_cast<int>(yy), it->sText, it->fColors); } if (yy <= -CreditsData.iFontAverageHeight) { ++CreditsData.iFirstLine; } if ( yy >= g_size.height() ) break ; //it's useless to continue because next phrase will not be inside the viewport } } else { LogWarning << "Error initializing credits"; } if(iSize <= CreditsData.iFirstLine && iFadeAction != AMCM_MAIN) { ARXmenu.mda->creditspos = 0; ARXmenu.mda->creditstart = 0 ; CreditsData.iFirstLine = 0 ; bFadeInOut = true; bFade = true; iFadeAction = AMCM_MAIN; ARX_MENU_LaunchAmb(AMB_MENU); } if(ProcessFadeInOut(bFadeInOut,0.1f) && iFadeAction == AMCM_MAIN) { ARXmenu.currentmode = AMCM_MAIN; iFadeAction = -1; bFadeInOut = false; bFade = true; } GRenderer->SetRenderState(Renderer::DepthWrite, true); GRenderer->SetRenderState(Renderer::DepthTest, true); }