metaforce/Runtime/MP1/CSlideShow.cpp

160 lines
4.9 KiB
C++
Raw Normal View History

2016-09-16 20:18:03 +00:00
#include "CSlideShow.hpp"
#include "GameGlobalObjects.hpp"
#include "Editor/ProjectManager.hpp"
2016-09-16 20:18:03 +00:00
2018-12-08 05:30:43 +00:00
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());
if (font) {
CGuiTextProperties propsA(false, true, EJustification::Center, EVerticalJustification::Bottom);
xc4_textA = std::make_unique<CGuiTextSupport>(font->id, propsA, g_tweakSlideShow->GetFontColor(),
g_tweakSlideShow->GetOutlineColor(), zeus::skWhite, 640, 480,
2018-12-08 05:30:43 +00:00
g_SimplePool, CGuiWidget::EGuiModelDrawFlags::Alpha);
CGuiTextProperties propsB(false, true, EJustification::Right, EVerticalJustification::Bottom);
xc8_textB = std::make_unique<CGuiTextSupport>(font->id, propsB, g_tweakSlideShow->GetFontColor(),
g_tweakSlideShow->GetOutlineColor(), zeus::skWhite, 640, 480,
2018-12-08 05:30:43 +00:00
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));
}
2016-09-25 01:58:20 +00:00
}
2018-12-08 05:30:43 +00:00
bool CSlideShow::LoadTXTRDep(std::string_view name) {
const SObjectTag* dgrpTag = g_ResFactory->GetResourceIdByName(name);
if (dgrpTag && dgrpTag->type == FOURCC('DGRP')) {
x18_galleryTXTRDeps.push_back(g_SimplePool->GetObj(*dgrpTag));
2016-09-25 01:58:20 +00:00
return true;
2018-12-08 05:30:43 +00:00
}
return false;
2016-09-16 20:18:03 +00:00
}
2018-12-08 05:30:43 +00:00
bool CSlideShow::AreAllDepsLoaded(const std::vector<TLockedToken<CDependencyGroup>>& deps) {
for (const TLockedToken<CDependencyGroup>& token : deps) {
if (!token.IsLoaded())
return false;
}
return true;
}
2016-09-25 01:58:20 +00:00
2018-12-08 05:30:43 +00:00
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;
2019-02-18 05:47:46 +00:00
[[fallthrough]];
2018-12-08 05:30:43 +00:00
}
case Phase::One: {
if (x18_galleryTXTRDeps.empty()) {
x18_galleryTXTRDeps.reserve(5);
for (int i = 1; true; ++i) {
2019-07-20 04:27:21 +00:00
std::string depResName = fmt::format(fmt("Gallery{:02d}_DGRP"), i);
2018-12-08 05:30:43 +00:00
if (!LoadTXTRDep(depResName))
break;
2016-09-25 01:58:20 +00:00
}
2018-12-08 05:30:43 +00:00
LoadTXTRDep("GalleryAssets_DGRP");
}
if (!AreAllDepsLoaded(x18_galleryTXTRDeps))
return EMessageReturn::Exit;
2016-09-25 01:58:20 +00:00
2018-12-08 05:30:43 +00:00
x14_phase = Phase::Three;
2019-02-18 05:47:46 +00:00
[[fallthrough]];
2018-12-08 05:30:43 +00:00
}
case Phase::Two:
2019-02-18 05:47:46 +00:00
case Phase::Three:
2018-12-08 05:30:43 +00:00
case Phase::Four:
case Phase::Five:
2019-02-18 05:47:46 +00:00
break;
2018-12-08 05:30:43 +00:00
default:
break;
2016-09-25 01:58:20 +00:00
}
2018-12-08 05:30:43 +00:00
break;
}
case EArchMsgType::UserInput:
default:
break;
}
return EMessageReturn::Exit;
2016-09-16 20:18:03 +00:00
}
2018-12-08 05:30:43 +00:00
void CSlideShow::SSlideData::Draw() const {
if (!IsLoaded())
return;
2018-12-08 05:30:43 +00:00
zeus::CRectangle rect;
const_cast<CTexturedQuadFilterAlpha&>(*m_texQuad).draw(x30_mulColor, 1.f, rect);
2018-12-08 05:30:43 +00:00
zeus::CVector2f centeredOffset((x28_canvasSize.x() - m_texQuad->GetTex()->GetWidth()) * 0.5f,
(x28_canvasSize.y() - m_texQuad->GetTex()->GetHeight()) * 0.5f);
}
2018-12-08 05:30:43 +00:00
void CSlideShow::Draw() const {
2019-07-21 08:42:52 +00:00
SCOPED_GRAPHICS_DEBUG_GROUP("CSlideShow::Draw", zeus::skGreen);
2018-12-08 05:30:43 +00:00
if (x14_phase == Phase::Five) {
x5c_slideA.Draw();
x90_slideB.Draw();
}
2016-09-16 20:18:03 +00:00
}
2018-12-08 05:30:43 +00:00
u32 CSlideShow::SlideShowGalleryFlags() {
u32 ret = 0;
if (!g_GameState)
2016-12-16 23:05:29 +00:00
return ret;
2018-12-08 05:30:43 +00:00
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;
2016-12-16 23:05:29 +00:00
}
2018-12-08 05:30:43 +00:00
} // namespace urde