#include "CSlideShow.hpp" #include "GameGlobalObjects.hpp" #include "Editor/ProjectManager.hpp" namespace urde { CSlideShow::CSlideShow() : CIOWin("SlideShow"), x5c_slideA(*this), x90_slideB(*this) { x130_ = g_tweakSlideShow->GetX54(); x134_24_ = true; x134_30_ = true; x135_24_ = true; const SObjectTag* font = g_ResFactory->GetResourceIdByName(g_tweakSlideShow->GetFont().c_str()); if (font) { CGuiTextProperties propsA(false, true, EJustification::Center, EVerticalJustification::Bottom); xc4_textA = std::make_unique(font->id, propsA, g_tweakSlideShow->GetFontColor(), g_tweakSlideShow->GetOutlineColor(), zeus::CColor::skWhite, 640, 480, g_SimplePool, CGuiWidget::EGuiModelDrawFlags::Alpha); CGuiTextProperties propsB(false, true, EJustification::Right, EVerticalJustification::Bottom); xc8_textB = std::make_unique(font->id, propsB, g_tweakSlideShow->GetFontColor(), g_tweakSlideShow->GetOutlineColor(), zeus::CColor::skWhite, 640, 480, g_SimplePool, CGuiWidget::EGuiModelDrawFlags::Alpha); } xf8_stickTextures.reserve(18); x108_buttonTextures.reserve(8); SObjectTag txtrTag(FOURCC('TXTR'), 0); for (int i=0 ; i<9 ; ++i) { txtrTag.id = g_tweakPlayerRes->x24_lStick[i]; xf8_stickTextures.push_back(g_SimplePool->GetObj(txtrTag)); } for (int i=0 ; i<9 ; ++i) { txtrTag.id = g_tweakPlayerRes->x4c_cStick[i]; xf8_stickTextures.push_back(g_SimplePool->GetObj(txtrTag)); } for (int i=0 ; i<2 ; ++i) { txtrTag.id = g_tweakPlayerRes->x74_lTrigger[i]; xf8_stickTextures.push_back(g_SimplePool->GetObj(txtrTag)); } for (int i=0 ; i<2 ; ++i) { txtrTag.id = g_tweakPlayerRes->x80_rTrigger[i]; xf8_stickTextures.push_back(g_SimplePool->GetObj(txtrTag)); } for (int i=0 ; i<2 ; ++i) { txtrTag.id = g_tweakPlayerRes->xa4_bButton[i]; xf8_stickTextures.push_back(g_SimplePool->GetObj(txtrTag)); } for (int i=0 ; i<2 ; ++i) { txtrTag.id = g_tweakPlayerRes->xbc_yButton[i]; xf8_stickTextures.push_back(g_SimplePool->GetObj(txtrTag)); } } bool CSlideShow::LoadTXTRDep(const std::string& name) { const SObjectTag* dgrpTag = g_ResFactory->GetResourceIdByName(name.c_str()); if (dgrpTag && dgrpTag->type == FOURCC('DGRP')) { x18_galleryTXTRDeps.push_back(g_SimplePool->GetObj(*dgrpTag)); return true; } return false; } bool CSlideShow::AreAllDepsLoaded(const std::vector>& deps) { for (const TLockedToken& token : deps) { if (!token.IsLoaded()) return false; } return true; } CIOWin::EMessageReturn CSlideShow::OnMessage(const CArchitectureMessage& msg, CArchitectureQueue& queue) { switch (msg.GetType()) { case EArchMsgType::TimerTick: { if (x134_29_) return EMessageReturn::RemoveIOWinAndExit; float dt = MakeMsg::GetParmTimerTick(msg).x4_parm; switch (x14_phase) { case Phase::Zero: { //if (!g_resLoader->AreAllPaksLoaded()) //{ // g_resLoader->AsyncIdlePakLoading(); // return EMessageReturn::Exit; //} x14_phase = Phase::One; } case Phase::One: { if (x18_galleryTXTRDeps.empty()) { x18_galleryTXTRDeps.reserve(5); for (int i=1 ; true ; ++i) { std::string depResName = hecl::Format("Gallery%02d_DGRP", i); if (!LoadTXTRDep(depResName)) break; } LoadTXTRDep("GalleryAssets_DGRP"); } if (!AreAllDepsLoaded(x18_galleryTXTRDeps)) return EMessageReturn::Exit; x14_phase = Phase::Three; } case Phase::Two: case Phase::Three: { } case Phase::Four: case Phase::Five: default: break; } break; } case EArchMsgType::UserInput: default: break; } return EMessageReturn::Exit; } void CSlideShow::SSlideData::Draw() const { if (!IsLoaded()) return; zeus::CRectangle rect; const_cast(*m_texQuad).draw(x30_mulColor, 1.f, rect); zeus::CVector2f centeredOffset((x28_canvasSize.x - m_texQuad->GetTex()->GetWidth()) * 0.5f, (x28_canvasSize.y - m_texQuad->GetTex()->GetHeight()) * 0.5f); } void CSlideShow::Draw() const { if (x14_phase == Phase::Five) { x5c_slideA.Draw(); x90_slideB.Draw(); } } u32 CSlideShow::SlideShowGalleryFlags() { u32 ret = 0; if (!g_GameState) return ret; if (g_GameState->SystemOptions().GetLogScanPercent() >= 50) ret |= 1; if (g_GameState->SystemOptions().GetLogScanPercent() == 100) ret |= 2; if (g_GameState->SystemOptions().GetPlayerBeatHardMode()) ret |= 4; if (g_GameState->SystemOptions().GetAllItemsCollected()) ret |= 8; return ret; } }