2019-09-29 00:30:53 +00:00
|
|
|
#include "Runtime/GuiSys/CSplashScreen.hpp"
|
|
|
|
|
2020-04-12 15:30:04 +00:00
|
|
|
#include <array>
|
|
|
|
|
2019-09-29 00:30:53 +00:00
|
|
|
#include "Runtime/CArchitectureMessage.hpp"
|
|
|
|
#include "Runtime/CArchitectureQueue.hpp"
|
|
|
|
#include "Runtime/CSimplePool.hpp"
|
|
|
|
#include "Runtime/GameGlobalObjects.hpp"
|
|
|
|
#include "Runtime/Camera/CCameraFilter.hpp"
|
2016-09-13 05:36:21 +00:00
|
|
|
|
2021-04-10 08:42:06 +00:00
|
|
|
namespace metaforce {
|
2016-09-13 05:36:21 +00:00
|
|
|
|
2020-04-12 15:30:04 +00:00
|
|
|
constexpr std::array SplashTextures{"TXTR_NintendoLogo"sv, "TXTR_RetroLogo"sv, "TXTR_DolbyLogo"sv};
|
2016-09-13 05:36:21 +00:00
|
|
|
|
|
|
|
CSplashScreen::CSplashScreen(ESplashScreen which)
|
2018-12-08 05:30:43 +00:00
|
|
|
: CIOWin("SplashScreen")
|
|
|
|
, x14_which(which)
|
2020-04-12 15:30:04 +00:00
|
|
|
, m_quad(EFilterType::Blend, g_SimplePool->GetObj(SplashTextures[size_t(which)])) {}
|
2016-09-13 05:36:21 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
CIOWin::EMessageReturn CSplashScreen::OnMessage(const CArchitectureMessage& msg, CArchitectureQueue& queue) {
|
|
|
|
switch (msg.GetType()) {
|
|
|
|
case EArchMsgType::TimerTick: {
|
|
|
|
if (!x25_textureLoaded) {
|
|
|
|
if (!m_quad.GetTex().IsLoaded())
|
|
|
|
return EMessageReturn::Exit;
|
|
|
|
x25_textureLoaded = true;
|
|
|
|
}
|
2016-09-13 05:36:21 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
float dt = MakeMsg::GetParmTimerTick(msg).x4_parm;
|
|
|
|
x18_splashTimeout -= dt;
|
2016-09-13 05:36:21 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
if (x18_splashTimeout <= 0.f) {
|
|
|
|
/* HACK: If we're not compiling with Intel's IPP library we want to skip the Dolby Pro Logic II logo
|
|
|
|
* This is purely a URDE addition and does not reflect retro's intentions. - Phil
|
|
|
|
*/
|
2017-11-05 06:29:22 +00:00
|
|
|
#if INTEL_IPP
|
2018-12-08 05:30:43 +00:00
|
|
|
if (x14_which != ESplashScreen::Dolby)
|
2017-11-05 06:29:22 +00:00
|
|
|
#else
|
2018-12-08 05:30:43 +00:00
|
|
|
if (x14_which != ESplashScreen::Retro)
|
2017-11-05 06:29:22 +00:00
|
|
|
#endif
|
2018-12-08 05:30:43 +00:00
|
|
|
queue.Push(MakeMsg::CreateCreateIOWin(EArchMsgTarget::IOWinManager, 9999, 9999,
|
|
|
|
std::make_shared<CSplashScreen>(ESplashScreen(int(x14_which) + 1))));
|
|
|
|
return EMessageReturn::RemoveIOWinAndExit;
|
2016-09-13 05:36:21 +00:00
|
|
|
}
|
2018-12-08 05:30:43 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return EMessageReturn::Exit;
|
2016-09-13 05:36:21 +00:00
|
|
|
}
|
|
|
|
|
2020-03-30 01:55:58 +00:00
|
|
|
void CSplashScreen::Draw() {
|
|
|
|
if (!x25_textureLoaded) {
|
2018-12-08 05:30:43 +00:00
|
|
|
return;
|
2020-03-30 01:55:58 +00:00
|
|
|
}
|
2019-07-21 08:42:52 +00:00
|
|
|
SCOPED_GRAPHICS_DEBUG_GROUP("CSplashScreen::Draw", zeus::skGreen);
|
2016-09-13 05:36:21 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
zeus::CColor color;
|
2020-03-30 01:55:58 +00:00
|
|
|
if (x14_which == ESplashScreen::Nintendo) {
|
2018-12-08 05:30:43 +00:00
|
|
|
color = zeus::CColor{0.86f, 0.f, 0.f, 1.f};
|
2020-03-30 01:55:58 +00:00
|
|
|
}
|
2016-09-13 05:36:21 +00:00
|
|
|
|
2020-03-30 01:55:58 +00:00
|
|
|
if (x18_splashTimeout > 1.5f) {
|
2018-12-08 05:30:43 +00:00
|
|
|
color.a() = 1.f - (x18_splashTimeout - 1.5f) * 2.f;
|
2020-03-30 01:55:58 +00:00
|
|
|
} else if (x18_splashTimeout < 0.5f) {
|
2018-12-08 05:30:43 +00:00
|
|
|
color.a() = x18_splashTimeout * 2.f;
|
2020-03-30 01:55:58 +00:00
|
|
|
}
|
2016-09-13 05:36:21 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
zeus::CRectangle rect;
|
2019-01-23 07:52:19 +00:00
|
|
|
rect.size.x() = m_quad.GetTex()->GetWidth() / (480.f * g_Viewport.aspect);
|
2018-12-08 05:30:43 +00:00
|
|
|
rect.size.y() = m_quad.GetTex()->GetHeight() / 480.f;
|
|
|
|
rect.position.x() = 0.5f - rect.size.x() / 2.f;
|
|
|
|
rect.position.y() = 0.5f - rect.size.y() / 2.f;
|
2016-09-14 05:54:09 +00:00
|
|
|
|
2020-03-30 01:55:58 +00:00
|
|
|
m_quad.draw(color, 1.f, rect);
|
2016-09-13 05:36:21 +00:00
|
|
|
}
|
|
|
|
|
2021-04-10 08:42:06 +00:00
|
|
|
} // namespace metaforce
|