mirror of https://github.com/AxioDL/metaforce.git
CFrontEndUI work
This commit is contained in:
parent
ef43c3319b
commit
4c09493a3f
|
@ -61,6 +61,22 @@ bool CSaveWorldIntermediate::InitializePump()
|
|||
return false;
|
||||
}
|
||||
|
||||
bool CMemoryCardSys::HasSaveWorldMemory(ResId wldId) const
|
||||
{
|
||||
auto existingSearch =
|
||||
std::find_if(xc_memoryWorlds.cbegin(), xc_memoryWorlds.cend(), [&](const auto& wld)
|
||||
{ return wld.first == wldId; });
|
||||
return existingSearch != xc_memoryWorlds.cend();
|
||||
}
|
||||
|
||||
const CSaveWorldMemory& CMemoryCardSys::GetSaveWorldMemory(ResId wldId) const
|
||||
{
|
||||
auto existingSearch =
|
||||
std::find_if(xc_memoryWorlds.cbegin(), xc_memoryWorlds.cend(), [&](const auto& wld)
|
||||
{ return wld.first == wldId; });
|
||||
return existingSearch->second;
|
||||
}
|
||||
|
||||
CMemoryCardSys::CMemoryCardSys()
|
||||
{
|
||||
g_CardImagePaths[0] = ResolveDolphinCardPath(kabufuda::ECardSlot::SlotA);
|
||||
|
@ -74,10 +90,7 @@ CMemoryCardSys::CMemoryCardSys()
|
|||
{
|
||||
if (tag.type == FOURCC('MLVL'))
|
||||
{
|
||||
auto existingSearch =
|
||||
std::find_if(xc_memoryWorlds.cbegin(), xc_memoryWorlds.cend(), [&](const auto& wld)
|
||||
{ return wld.first == tag.id; });
|
||||
if (existingSearch == xc_memoryWorlds.cend())
|
||||
if (!HasSaveWorldMemory(tag.id))
|
||||
{
|
||||
xc_memoryWorlds.emplace_back(tag.id, CSaveWorldMemory{});
|
||||
x1c_worldInter->emplace_back(tag.id, -1);
|
||||
|
|
|
@ -32,6 +32,12 @@ public:
|
|||
|
||||
const TLockedToken<CStringTable>& GetWorldName() const { return x2c_worldName; }
|
||||
const TLockedToken<CSaveWorld>& GetSaveWorld() const { return x3c_saveWorld; }
|
||||
std::wstring GetFrontEndName() const
|
||||
{
|
||||
if (!x2c_worldName)
|
||||
return {};
|
||||
return x2c_worldName->GetString(0);
|
||||
}
|
||||
};
|
||||
|
||||
class CSaveWorldIntermediate
|
||||
|
@ -83,6 +89,10 @@ public:
|
|||
const std::vector<CGameHintInfo::CGameHint>& GetHints() const { return x0_hints->GetHints(); }
|
||||
const std::vector<std::pair<ResId, CSaveWorldMemory>>& GetMemoryWorlds() const { return xc_memoryWorlds; }
|
||||
const std::vector<std::pair<ResId, CSaveWorld::EScanCategory>>& GetScanStates() const { return x20_scanStates; }
|
||||
|
||||
bool HasSaveWorldMemory(ResId wldId) const;
|
||||
const CSaveWorldMemory& GetSaveWorldMemory(ResId wldId) const;
|
||||
|
||||
CMemoryCardSys();
|
||||
bool InitializePump();
|
||||
|
||||
|
|
|
@ -156,6 +156,7 @@ public:
|
|||
return false;
|
||||
return xc8_curFrame == x28_thpHead.numFrames;
|
||||
}
|
||||
bool IsLooping() const { return xf4_24_loop; }
|
||||
bool GetIsFullyCached() const {return xa0_bufferQueue.size() >= xf0_preLoadFrames;}
|
||||
float GetPlayedSeconds() const {return xdc_frameRem + xe8_curSeconds;}
|
||||
float GetTotalSeconds() const {return xe4_totalSeconds;}
|
||||
|
|
|
@ -30,7 +30,7 @@ void CGuiCompoundWidget::OnActiveChange()
|
|||
CGuiWidget::OnActiveChange();
|
||||
}
|
||||
|
||||
CGuiWidget* CGuiCompoundWidget::GetWorkerWidget(int id)
|
||||
CGuiWidget* CGuiCompoundWidget::GetWorkerWidget(int id) const
|
||||
{
|
||||
CGuiWidget* child = static_cast<CGuiWidget*>(GetChildObject());
|
||||
while (child)
|
||||
|
|
|
@ -14,7 +14,7 @@ public:
|
|||
|
||||
void OnVisibleChange();
|
||||
void OnActiveChange();
|
||||
virtual CGuiWidget* GetWorkerWidget(int id);
|
||||
virtual CGuiWidget* GetWorkerWidget(int id) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -37,9 +37,9 @@ public:
|
|||
void MultiplyO2P(const zeus::CTransform& xf);
|
||||
void AddChildObject(CGuiObject* obj, bool makeWorldLocal, bool atEnd);
|
||||
CGuiObject* RemoveChildObject(CGuiObject* obj, bool makeWorldLocal);
|
||||
CGuiObject* GetParent() {return x70_parent;}
|
||||
CGuiObject* GetChildObject() {return x74_child;}
|
||||
CGuiObject* GetNextSibling() {return x78_nextSibling;}
|
||||
CGuiObject* GetParent() const {return x70_parent;}
|
||||
CGuiObject* GetChildObject() const {return x74_child;}
|
||||
CGuiObject* GetNextSibling() const {return x78_nextSibling;}
|
||||
void RecalculateTransforms();
|
||||
void Reorthogonalize();
|
||||
void SetO2WTransform(const zeus::CTransform& xf);
|
||||
|
|
|
@ -1,8 +1,38 @@
|
|||
#include "CGuiTableGroup.hpp"
|
||||
#include "Input/CFinalInput.hpp"
|
||||
|
||||
namespace urde
|
||||
{
|
||||
|
||||
bool CGuiTableGroup::CRepeatState::Update(float dt, bool state)
|
||||
{
|
||||
if (x0_timer == 0.f)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
x0_timer = 0.6f;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
x0_timer -= dt;
|
||||
if (x0_timer <= 0.f)
|
||||
{
|
||||
x0_timer = 0.05f;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
x0_timer = 0.f;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
CGuiTableGroup::CGuiTableGroup(const CGuiWidgetParms& parms, int elementCount,
|
||||
int defaultSel, bool selectWraparound)
|
||||
: CGuiCompoundWidget(parms),
|
||||
|
@ -11,6 +41,205 @@ CGuiTableGroup::CGuiTableGroup(const CGuiWidgetParms& parms, int elementCount,
|
|||
xd0_selectWraparound(selectWraparound)
|
||||
{}
|
||||
|
||||
void CGuiTableGroup::ProcessUserInput(const CFinalInput& input)
|
||||
{
|
||||
if (input.PA())
|
||||
{
|
||||
DoAdvance();
|
||||
}
|
||||
else if (input.PB())
|
||||
{
|
||||
DoCancel();
|
||||
}
|
||||
else
|
||||
{
|
||||
bool decrement;
|
||||
if (xd1_vertical)
|
||||
decrement = (input.DLAUp() || input.DDPUp());
|
||||
else
|
||||
decrement = (input.DLALeft() || input.DDPLeft());
|
||||
|
||||
bool increment;
|
||||
if (xd1_vertical)
|
||||
increment = (input.DLADown() || input.DDPDown());
|
||||
else
|
||||
increment = (input.DLARight() || input.DDPRight());
|
||||
|
||||
if (xb8_decRepeat.Update(input.DeltaTime(), decrement) && decrement)
|
||||
{
|
||||
DoDecrement();
|
||||
return;
|
||||
}
|
||||
|
||||
if (xbc_incRepeat.Update(input.DeltaTime(), increment) && increment)
|
||||
{
|
||||
DoIncrement();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool CGuiTableGroup::IsWorkerSelectable(int idx) const
|
||||
{
|
||||
CGuiWidget* widget = GetWorkerWidget(idx);
|
||||
if (widget)
|
||||
return widget->GetIsSelectable();
|
||||
return false;
|
||||
}
|
||||
|
||||
void CGuiTableGroup::SelectWorker(int idx)
|
||||
{
|
||||
idx = zeus::clamp(0, idx, xc0_elementCount - 1);
|
||||
if (idx < xc4_userSelection)
|
||||
{
|
||||
while (idx != xc4_userSelection)
|
||||
DoSelectPrevRow();
|
||||
}
|
||||
else
|
||||
{
|
||||
while (idx != xc4_userSelection)
|
||||
DoSelectNextRow();
|
||||
}
|
||||
}
|
||||
|
||||
void CGuiTableGroup::DeactivateWorker(CGuiWidget* widget)
|
||||
{
|
||||
widget->SetIsActive(false);
|
||||
}
|
||||
|
||||
void CGuiTableGroup::ActivateWorker(CGuiWidget* widget)
|
||||
{
|
||||
widget->SetIsActive(true);
|
||||
}
|
||||
|
||||
CGuiTableGroup::TableSelectReturn CGuiTableGroup::DecrementSelectedRow()
|
||||
{
|
||||
xc8_prevUserSelection = xc4_userSelection;
|
||||
--xc4_userSelection;
|
||||
if (xc4_userSelection < 0)
|
||||
{
|
||||
xc4_userSelection = xd0_selectWraparound ? xc0_elementCount - 1 : 0;
|
||||
return xd0_selectWraparound ? TableSelectReturn::WrappedAround : TableSelectReturn::Unchanged;
|
||||
}
|
||||
return TableSelectReturn::Changed;
|
||||
}
|
||||
|
||||
CGuiTableGroup::TableSelectReturn CGuiTableGroup::IncrementSelectedRow()
|
||||
{
|
||||
xc8_prevUserSelection = xc4_userSelection;
|
||||
++xc4_userSelection;
|
||||
if (xc4_userSelection >= xc0_elementCount)
|
||||
{
|
||||
xc4_userSelection = xd0_selectWraparound ? 0 : xc0_elementCount - 1;
|
||||
return xd0_selectWraparound ? TableSelectReturn::WrappedAround : TableSelectReturn::Unchanged;
|
||||
}
|
||||
return TableSelectReturn::Changed;
|
||||
}
|
||||
|
||||
void CGuiTableGroup::DoSelectPrevRow()
|
||||
{
|
||||
DecrementSelectedRow();
|
||||
DeactivateWorker(GetWorkerWidget(xc8_prevUserSelection));
|
||||
ActivateWorker(GetWorkerWidget(xc4_userSelection));
|
||||
}
|
||||
|
||||
void CGuiTableGroup::DoSelectNextRow()
|
||||
{
|
||||
IncrementSelectedRow();
|
||||
DeactivateWorker(GetWorkerWidget(xc8_prevUserSelection));
|
||||
ActivateWorker(GetWorkerWidget(xc4_userSelection));
|
||||
}
|
||||
|
||||
void CGuiTableGroup::DoCancel()
|
||||
{
|
||||
if (xec_doMenuCancel)
|
||||
xec_doMenuCancel(this);
|
||||
}
|
||||
|
||||
void CGuiTableGroup::DoAdvance()
|
||||
{
|
||||
if (xd4_doMenuAdvance)
|
||||
xd4_doMenuAdvance(this);
|
||||
}
|
||||
|
||||
bool CGuiTableGroup::PreDecrement()
|
||||
{
|
||||
if (xd0_selectWraparound)
|
||||
{
|
||||
for (int sel = (xc4_userSelection + xc0_elementCount - 1) % xc0_elementCount;
|
||||
sel != xc4_userSelection;
|
||||
sel = (sel + xc0_elementCount - 1) % xc0_elementCount)
|
||||
{
|
||||
if (IsWorkerSelectable(sel))
|
||||
{
|
||||
SelectWorker(sel);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int sel = std::max(-1, xc4_userSelection - 1) ; sel >= 0 ; --sel)
|
||||
{
|
||||
if (IsWorkerSelectable(sel))
|
||||
{
|
||||
SelectWorker(sel);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CGuiTableGroup::DoDecrement()
|
||||
{
|
||||
if (!PreDecrement())
|
||||
return;
|
||||
if (x104_doMenuSelChange)
|
||||
x104_doMenuSelChange(this, xc4_userSelection);
|
||||
}
|
||||
|
||||
bool CGuiTableGroup::PreIncrement()
|
||||
{
|
||||
if (xd0_selectWraparound)
|
||||
{
|
||||
for (int sel = (xc4_userSelection + 1) % xc0_elementCount;
|
||||
sel != xc4_userSelection;
|
||||
sel = (sel + 1) % xc0_elementCount)
|
||||
{
|
||||
if (IsWorkerSelectable(sel))
|
||||
{
|
||||
SelectWorker(sel);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int sel = std::min(xc0_elementCount, xc4_userSelection + 1) ; sel < xc0_elementCount ; ++sel)
|
||||
{
|
||||
if (IsWorkerSelectable(sel))
|
||||
{
|
||||
SelectWorker(sel);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CGuiTableGroup::DoIncrement()
|
||||
{
|
||||
if (!PreIncrement())
|
||||
return;
|
||||
if (x104_doMenuSelChange)
|
||||
x104_doMenuSelChange(this, xc4_userSelection);
|
||||
}
|
||||
|
||||
CGuiTableGroup* CGuiTableGroup::Create(CGuiFrame* frame, CInputStream& in, bool flag)
|
||||
{
|
||||
CGuiWidgetParms parms = ReadWidgetHeader(frame, in, flag);
|
||||
|
|
|
@ -9,10 +9,13 @@ namespace urde
|
|||
class CGuiTableGroup : public CGuiCompoundWidget
|
||||
{
|
||||
public:
|
||||
struct SomeState
|
||||
class CRepeatState
|
||||
{
|
||||
float x0_ = 0.f;
|
||||
float x0_timer = 0.f;
|
||||
public:
|
||||
bool Update(float dt, bool state);
|
||||
};
|
||||
|
||||
enum class TableSelectReturn
|
||||
{
|
||||
Changed,
|
||||
|
@ -21,17 +24,34 @@ public:
|
|||
};
|
||||
|
||||
private:
|
||||
SomeState xb8_;
|
||||
SomeState xbc_;
|
||||
CRepeatState xb8_decRepeat;
|
||||
CRepeatState xbc_incRepeat;
|
||||
int xc0_elementCount;
|
||||
int xc4_userSelection;
|
||||
int xc8_prevUserSelection;
|
||||
int xcc_defaultUserSelection;
|
||||
bool xd0_selectWraparound;
|
||||
bool xd1_ = true;
|
||||
bool xd1_vertical = true;
|
||||
std::function<void(CGuiTableGroup*)> xd4_doMenuAdvance;
|
||||
std::function<void(CGuiTableGroup*)> xec_doMenuCancel;
|
||||
std::function<void(CGuiTableGroup*)> x104_doMenuSelChange;
|
||||
std::function<void(CGuiTableGroup*, int)> x104_doMenuSelChange;
|
||||
|
||||
bool IsWorkerSelectable(int) const;
|
||||
void SelectWorker(int);
|
||||
void DeactivateWorker(CGuiWidget* widget);
|
||||
void ActivateWorker(CGuiWidget* widget);
|
||||
|
||||
TableSelectReturn DecrementSelectedRow();
|
||||
TableSelectReturn IncrementSelectedRow();
|
||||
void DoSelectPrevRow();
|
||||
void DoSelectNextRow();
|
||||
|
||||
void DoCancel();
|
||||
void DoAdvance();
|
||||
bool PreDecrement();
|
||||
void DoDecrement();
|
||||
bool PreIncrement();
|
||||
void DoIncrement();
|
||||
|
||||
public:
|
||||
CGuiTableGroup(const CGuiWidgetParms& parms, int, int, bool);
|
||||
|
@ -47,7 +67,7 @@ public:
|
|||
xec_doMenuCancel = std::move(cb);
|
||||
}
|
||||
|
||||
void SetMenuSelectionChangeCallback(std::function<void(CGuiTableGroup*)>&& cb)
|
||||
void SetMenuSelectionChangeCallback(std::function<void(CGuiTableGroup*, int)>&& cb)
|
||||
{
|
||||
x104_doMenuSelChange = std::move(cb);
|
||||
}
|
||||
|
@ -64,7 +84,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void SetD1(bool v) { xd1_ = v; }
|
||||
void SetVertical(bool v) { xd1_vertical = v; }
|
||||
|
||||
void SetUserSelection(int sel)
|
||||
{
|
||||
|
@ -72,32 +92,10 @@ public:
|
|||
xc4_userSelection = sel;
|
||||
}
|
||||
|
||||
TableSelectReturn DecrementSelectedRow()
|
||||
{
|
||||
xc8_prevUserSelection = xc4_userSelection;
|
||||
--xc4_userSelection;
|
||||
if (xc4_userSelection < 0)
|
||||
{
|
||||
xc4_userSelection = xd0_selectWraparound ? xc0_elementCount - 1 : 0;
|
||||
return xd0_selectWraparound ? TableSelectReturn::WrappedAround : TableSelectReturn::Unchanged;
|
||||
}
|
||||
return TableSelectReturn::Changed;
|
||||
}
|
||||
|
||||
TableSelectReturn IncrementSelectedRow()
|
||||
{
|
||||
xc8_prevUserSelection = xc4_userSelection;
|
||||
++xc4_userSelection;
|
||||
if (xc4_userSelection >= xc0_elementCount)
|
||||
{
|
||||
xc4_userSelection = xd0_selectWraparound ? 0 : xc0_elementCount - 1;
|
||||
return xd0_selectWraparound ? TableSelectReturn::WrappedAround : TableSelectReturn::Unchanged;
|
||||
}
|
||||
return TableSelectReturn::Changed;
|
||||
}
|
||||
|
||||
int GetUserSelection() const { return xc4_userSelection; }
|
||||
|
||||
void ProcessUserInput(const CFinalInput& input);
|
||||
|
||||
static CGuiTableGroup* Create(CGuiFrame* frame, CInputStream& in, bool);
|
||||
};
|
||||
|
||||
|
|
|
@ -54,6 +54,14 @@ float CGuiTextSupport::GetCurrentAnimationOverAge() const
|
|||
return ret;
|
||||
}
|
||||
|
||||
float CGuiTextSupport::GetNumCharsTotal() const
|
||||
{
|
||||
if (CTextRenderBuffer* buf = GetCurrentPageRenderBuffer())
|
||||
if (x50_typeEnable)
|
||||
return buf->GetPrimitiveCount();
|
||||
return 0.f;
|
||||
}
|
||||
|
||||
float CGuiTextSupport::GetNumCharsPrinted() const
|
||||
{
|
||||
if (CTextRenderBuffer* buf = GetCurrentPageRenderBuffer())
|
||||
|
|
|
@ -109,6 +109,7 @@ public:
|
|||
const zeus::CColor& fontCol, const zeus::CColor& outlineCol,
|
||||
const zeus::CColor& geomCol, s32 extX, s32 extY, CSimplePool* store);
|
||||
float GetCurrentAnimationOverAge() const;
|
||||
float GetNumCharsTotal() const;
|
||||
float GetNumCharsPrinted() const;
|
||||
float GetTotalAnimationTime() const;
|
||||
bool IsAnimationDone() const;
|
||||
|
|
|
@ -11,7 +11,7 @@ CGuiWidget::CGuiWidget(const CGuiWidgetParms& parms)
|
|||
xac_drawFlags(parms.x14_drawFlags), xb0_frame(parms.x0_frame),
|
||||
xb6_24_pg(parms.xd_g), xb6_25_isVisible(parms.xa_defaultVisible),
|
||||
xb6_26_isActive(parms.xb_defaultActive),
|
||||
xb6_27_(true), xb6_28_eventLock(false),
|
||||
xb6_27_isSelectable(true), xb6_28_eventLock(false),
|
||||
xb6_29_cullFaces(parms.xc_cullFaces), xb6_30_(false),
|
||||
xb6_31_depthTest(true), xb7_24_depthWrite(false), xb7_25_(true)
|
||||
{
|
||||
|
|
|
@ -79,7 +79,7 @@ protected:
|
|||
bool xb6_24_pg : 1;
|
||||
bool xb6_25_isVisible : 1;
|
||||
bool xb6_26_isActive : 1;
|
||||
bool xb6_27_ : 1;
|
||||
bool xb6_27_isSelectable : 1;
|
||||
bool xb6_28_eventLock : 1;
|
||||
bool xb6_29_cullFaces : 1;
|
||||
bool xb6_30_ : 1;
|
||||
|
@ -116,8 +116,8 @@ public:
|
|||
void ReapplyXform();
|
||||
void SetIsVisible(bool);
|
||||
void SetIsActive(bool);
|
||||
|
||||
void SetB627(bool v) { xb6_27_ = v; }
|
||||
bool GetIsSelectable() const { return xb6_27_isSelectable; }
|
||||
void SetIsSelectable(bool v) { xb6_27_isSelectable = v; }
|
||||
|
||||
void ParseBaseInfo(CGuiFrame* frame, CInputStream& in, const CGuiWidgetParms& parms);
|
||||
void AddChildWidget(CGuiWidget* widget, bool makeWorldLocal, bool atEnd);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -41,23 +41,22 @@ class CFrontEndUI : public CIOWin
|
|||
public:
|
||||
enum class EPhase
|
||||
{
|
||||
Zero,
|
||||
One,
|
||||
Two,
|
||||
Three,
|
||||
Four,
|
||||
Five,
|
||||
Six
|
||||
LoadDepsGroup,
|
||||
LoadDeps,
|
||||
LoadFrames,
|
||||
LoadMovies,
|
||||
DisplayFrontEnd,
|
||||
ToPlayGame,
|
||||
ExitFrontEnd
|
||||
};
|
||||
enum class EScreen
|
||||
{
|
||||
Zero,
|
||||
One,
|
||||
Two,
|
||||
Three,
|
||||
Four,
|
||||
Five,
|
||||
Six
|
||||
OpenCredits,
|
||||
Title,
|
||||
AttractMovie,
|
||||
FileSelect,
|
||||
FusionBonus,
|
||||
ToPlayGame
|
||||
};
|
||||
enum class EMenuMovie
|
||||
{
|
||||
|
@ -90,8 +89,8 @@ public:
|
|||
/* filename, world, playtime, date */
|
||||
SGuiTextPair x4_textpanes[4];
|
||||
|
||||
u32 x28_ = 0;
|
||||
float x2c_ = ComputeRandom();
|
||||
u32 x28_curField = 0;
|
||||
float x2c_chRate = ComputeRandom();
|
||||
|
||||
static float ComputeRandom()
|
||||
{
|
||||
|
@ -103,24 +102,24 @@ public:
|
|||
{
|
||||
enum class ESubMenu
|
||||
{
|
||||
Zero,
|
||||
One,
|
||||
Two,
|
||||
Three
|
||||
Root,
|
||||
EraseGame,
|
||||
ExistingGamePopup,
|
||||
NewGamePopup
|
||||
};
|
||||
|
||||
enum class EAction
|
||||
{
|
||||
Zero,
|
||||
One,
|
||||
Two,
|
||||
Three
|
||||
None,
|
||||
GameOptions,
|
||||
FusionBonus,
|
||||
SlideShow
|
||||
};
|
||||
|
||||
u32 x0_rnd;
|
||||
CSaveUI* x4_saveUI;
|
||||
ESubMenu x8_subMenu = ESubMenu::Zero;
|
||||
EAction xc_action = EAction::Zero;
|
||||
ESubMenu x8_subMenu = ESubMenu::Root;
|
||||
EAction xc_action = EAction::None;
|
||||
TLockedToken<CGuiFrame> x10_frme;
|
||||
CGuiFrame* x1c_loadedFrame = nullptr;
|
||||
CGuiTableGroup* x20_tablegroup_fileselect = nullptr;
|
||||
|
@ -146,6 +145,7 @@ public:
|
|||
void FinishedLoading();
|
||||
bool PumpLoad();
|
||||
bool IsTextDoneAnimating() const;
|
||||
void Update(float dt);
|
||||
EAction ProcessUserInput(const CFinalInput& input);
|
||||
void Draw() const;
|
||||
|
||||
|
@ -156,20 +156,21 @@ public:
|
|||
void ActivateNewGamePopup();
|
||||
|
||||
void ResetFrame();
|
||||
void ActivateErase();
|
||||
void ClearFrameContents();
|
||||
void SetupFrameContents();
|
||||
|
||||
void DoPopupCancel(CGuiTableGroup* caller);
|
||||
void DoPopupAdvance(CGuiTableGroup* caller);
|
||||
void DoFileMenuCancel(CGuiTableGroup* caller);
|
||||
void DoSelectionChange(CGuiTableGroup* caller);
|
||||
void DoSelectionChange(CGuiTableGroup* caller, int userSel);
|
||||
void DoFileMenuAdvance(CGuiTableGroup* caller);
|
||||
|
||||
static SFileMenuOption FindFileSelectOption(CGuiFrame* frame, int idx);
|
||||
static void StartTextAnimating(CGuiTextPane* text, const std::wstring& str, float chRate);
|
||||
};
|
||||
|
||||
struct SGBASupportFrame
|
||||
struct SFusionBonusFrame
|
||||
{
|
||||
struct SGBALinkFrame
|
||||
{
|
||||
|
@ -240,7 +241,7 @@ public:
|
|||
bool x39_fusionNotComplete = false;
|
||||
bool x3a_mpNotComplete = false;
|
||||
|
||||
SGBASupportFrame();
|
||||
SFusionBonusFrame();
|
||||
void FinishedLoading();
|
||||
bool PumpLoad();
|
||||
void SetTableColors(CGuiTableGroup* tbgp) const;
|
||||
|
@ -255,7 +256,7 @@ public:
|
|||
}
|
||||
|
||||
void DoCancel(CGuiTableGroup* caller);
|
||||
void DoSelectionChange(CGuiTableGroup* caller);
|
||||
void DoSelectionChange(CGuiTableGroup* caller, int userSel);
|
||||
void DoAdvance(CGuiTableGroup* caller);
|
||||
};
|
||||
|
||||
|
@ -263,11 +264,11 @@ public:
|
|||
{
|
||||
enum class EAction
|
||||
{
|
||||
Zero,
|
||||
One,
|
||||
Two,
|
||||
Three,
|
||||
Four
|
||||
None,
|
||||
StartGame,
|
||||
FusionBonus,
|
||||
GameOptions,
|
||||
SlideShow
|
||||
};
|
||||
|
||||
u32 x0_rnd;
|
||||
|
@ -280,11 +281,12 @@ public:
|
|||
SFrontEndFrame(u32 rnd);
|
||||
void FinishedLoading();
|
||||
bool PumpLoad();
|
||||
void Update(float dt);
|
||||
EAction ProcessUserInput(const CFinalInput& input);
|
||||
void Draw() const;
|
||||
|
||||
void DoCancel(CGuiTableGroup* caller);
|
||||
void DoSelectionChange(CGuiTableGroup* caller);
|
||||
void DoSelectionChange(CGuiTableGroup* caller, int userSel);
|
||||
void DoAdvance(CGuiTableGroup* caller);
|
||||
};
|
||||
|
||||
|
@ -339,31 +341,32 @@ public:
|
|||
};
|
||||
SOptionsFrontEndFrame();
|
||||
bool ProcessUserInput(const CFinalInput& input, CSaveUI* sui);
|
||||
void Update(float dt, CSaveUI* saveUi);
|
||||
void Draw() const;
|
||||
};
|
||||
|
||||
bool IsSaveUIConditional() const
|
||||
bool CanShowSaveUI() const
|
||||
{
|
||||
if (x50_curScreen != EScreen::Three && x50_curScreen != EScreen::Four)
|
||||
if (x50_curScreen != EScreen::FileSelect && x50_curScreen != EScreen::FusionBonus)
|
||||
return false;
|
||||
if (x54_nextScreen != EScreen::Three && x54_nextScreen != EScreen::Four)
|
||||
if (x54_nextScreen != EScreen::FileSelect && x54_nextScreen != EScreen::FusionBonus)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
EPhase x14_phase = EPhase::Zero;
|
||||
EPhase x14_phase = EPhase::LoadDepsGroup;
|
||||
u32 x18_rndA;
|
||||
u32 x1c_rndB;
|
||||
TLockedToken<CDependencyGroup> x20_depsGroup;
|
||||
std::vector<CToken> x2c_deps;
|
||||
TLockedToken<CTexture> x38_pressStart;
|
||||
TLockedToken<CAudioGroupSet> x44_frontendAudioGrp;
|
||||
EScreen x50_curScreen = EScreen::Zero;
|
||||
EScreen x54_nextScreen = EScreen::Zero;
|
||||
float x58_movieSeconds = 0.f;
|
||||
bool x5c_movieSecondsNeeded = false;
|
||||
float x60_ = 0.f;
|
||||
EScreen x50_curScreen = EScreen::OpenCredits;
|
||||
EScreen x54_nextScreen = EScreen::OpenCredits;
|
||||
float x58_fadeBlackTimer = 0.f;
|
||||
bool x5c_fadeBlackWithMovie = false;
|
||||
float x60_pressStartTime = 0.f;
|
||||
float x64_pressStartAlpha = 0.f;
|
||||
float x68_musicVol = 1.f;
|
||||
u32 x6c_;
|
||||
|
@ -373,15 +376,15 @@ private:
|
|||
int xc0_attractCount = 0;
|
||||
std::unique_ptr<CMoviePlayer> xc4_attractMovie;
|
||||
CMoviePlayer* xcc_curMoviePtr = nullptr;
|
||||
bool xd0_ = false;
|
||||
bool xd0_playerSkipToTitle = false;
|
||||
bool xd1_moviesLoaded = false;
|
||||
bool xd2_ = false;
|
||||
bool xd2_deferSlideShow = false;
|
||||
std::unique_ptr<CStaticAudioPlayer> xd4_audio1;
|
||||
std::unique_ptr<CStaticAudioPlayer> xd8_audio2;
|
||||
std::unique_ptr<CSaveUI> xdc_saveUI;
|
||||
std::unique_ptr<SNewFileSelectFrame> xe0_newFileSel;
|
||||
std::unique_ptr<SGBASupportFrame> xe4_gbaSupportFrme;
|
||||
std::unique_ptr<SFrontEndFrame> xe8_frontendFrme;
|
||||
std::unique_ptr<SNewFileSelectFrame> xe0_frontendCardFrme;
|
||||
std::unique_ptr<SFusionBonusFrame> xe4_fusionBonusFrme;
|
||||
std::unique_ptr<SFrontEndFrame> xe8_frontendNoCardFrme;
|
||||
std::unique_ptr<SNesEmulatorFrame> xec_emuFrme;
|
||||
std::unique_ptr<SOptionsFrontEndFrame> xf0_optionsFrme;
|
||||
CStaticAudioPlayer* xf4_curAudio = nullptr;
|
||||
|
@ -389,46 +392,33 @@ private:
|
|||
CColoredQuadFilter m_fadeToBlack = {CCameraFilterPass::EFilterType::Blend};
|
||||
std::experimental::optional<CTexturedQuadFilterAlpha> m_pressStartQuad;
|
||||
|
||||
void SetMovieSecondsDeferred()
|
||||
void SetFadeBlackWithMovie()
|
||||
{
|
||||
x58_movieSeconds = 1000000.f;
|
||||
x5c_movieSecondsNeeded = true;
|
||||
x58_fadeBlackTimer = 1000000.f;
|
||||
x5c_fadeBlackWithMovie = true;
|
||||
}
|
||||
|
||||
void SetMovieSeconds(float seconds)
|
||||
void SetFadeBlackTimer(float seconds)
|
||||
{
|
||||
x58_movieSeconds = seconds;
|
||||
x5c_movieSecondsNeeded = false;
|
||||
x58_fadeBlackTimer = seconds;
|
||||
x5c_fadeBlackWithMovie = false;
|
||||
}
|
||||
|
||||
void TransitionToFive();
|
||||
void TransitionToGame();
|
||||
void UpdateMusicVolume();
|
||||
void FinishedLoadingDepsGroup();
|
||||
bool PumpLoad();
|
||||
public:
|
||||
|
||||
CFrontEndUI(CArchitectureQueue& queue);
|
||||
void OnSliderSelectionChange(CGuiSliderGroup* grp, float);
|
||||
void OnCheckBoxSelectionChange(CGuiTableGroup* grp);
|
||||
void OnOptionSubMenuCancel(CGuiTableGroup* grp);
|
||||
void OnOptionsMenuCancel(CGuiTableGroup* grp);
|
||||
void OnNewGameMenuCancel(CGuiTableGroup* grp);
|
||||
void OnFileMenuCancel(CGuiTableGroup* grp);
|
||||
void OnGenericMenuSelectionChange(CGuiTableGroup* grp, int, int);
|
||||
void OnOptionsMenuAdvance(CGuiTableGroup* grp);
|
||||
void OnNewGameMenuAdvance(CGuiTableGroup* grp);
|
||||
void OnFileMenuAdvance(CGuiTableGroup* grp);
|
||||
void OnMainMenuAdvance(CGuiTableGroup* grp);
|
||||
void StartSlideShow(CArchitectureQueue& queue);
|
||||
std::string GetAttractMovieFileName(int idx);
|
||||
std::string GetNextAttractMovieFileName();
|
||||
void SetCurrentMovie(EMenuMovie movie);
|
||||
void StopAttractMovie();
|
||||
void StartAttractMovie();
|
||||
void UpdateMenuHighlights(CGuiTableGroup* grp);
|
||||
void CompleteStateTransition();
|
||||
bool CanBuild(const SObjectTag& tag);
|
||||
void StartStateTransition(EScreen screen);
|
||||
void CompleteStateTransition();
|
||||
void HandleDebugMenuReturnValue(CGameDebug::EReturnValue val, CArchitectureQueue& queue);
|
||||
void Draw() const;
|
||||
void UpdateMovies(float dt);
|
||||
|
@ -436,8 +426,6 @@ public:
|
|||
void ProcessUserInput(const CFinalInput& input, CArchitectureQueue& queue);
|
||||
EMessageReturn Update(float dt, CArchitectureQueue& queue);
|
||||
EMessageReturn OnMessage(const CArchitectureMessage& msg, CArchitectureQueue& queue);
|
||||
void StartGame();
|
||||
void InitializeFrame();
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ void CQuitScreen::FinishedLoading()
|
|||
x14_tablegroup_quitgame->SetMenuAdvanceCallback(
|
||||
std::bind(&CQuitScreen::DoAdvance, this, std::placeholders::_1));
|
||||
x14_tablegroup_quitgame->SetMenuSelectionChangeCallback(
|
||||
std::bind(&CQuitScreen::DoSelectionChange, this, std::placeholders::_1));
|
||||
std::bind(&CQuitScreen::DoSelectionChange, this, std::placeholders::_1, std::placeholders::_2));
|
||||
|
||||
static_cast<CGuiTextPane*>(x10_loadedFrame->FindWidget("textpane_title"))->TextSupport()->
|
||||
SetText(g_MainStringTable->GetString(Titles[int(x0_type)]));
|
||||
|
@ -58,7 +58,7 @@ void CQuitScreen::FinishedLoading()
|
|||
SetColors();
|
||||
}
|
||||
|
||||
void CQuitScreen::DoSelectionChange(CGuiTableGroup* caller)
|
||||
void CQuitScreen::DoSelectionChange(CGuiTableGroup* caller, int userSel)
|
||||
{
|
||||
SetColors();
|
||||
CSfxManager::SfxStart(1424, 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||
|
|
|
@ -42,7 +42,7 @@ class CQuitScreen
|
|||
void SetColors();
|
||||
public:
|
||||
void FinishedLoading();
|
||||
void DoSelectionChange(CGuiTableGroup* caller);
|
||||
void DoSelectionChange(CGuiTableGroup* caller, int userSel);
|
||||
void DoAdvance(CGuiTableGroup* caller);
|
||||
EQuitAction Update(float dt);
|
||||
void Draw();
|
||||
|
|
|
@ -125,7 +125,7 @@ bool CSaveUI::PumpLoad()
|
|||
x58_tablegroup_choices->SetMenuAdvanceCallback(
|
||||
std::bind(&CSaveUI::DoAdvance, this, std::placeholders::_1));
|
||||
x58_tablegroup_choices->SetMenuSelectionChangeCallback(
|
||||
std::bind(&CSaveUI::DoSelectionChange, this, std::placeholders::_1));
|
||||
std::bind(&CSaveUI::DoSelectionChange, this, std::placeholders::_1, std::placeholders::_2));
|
||||
|
||||
if (x0_saveCtx == ESaveContext::InGame)
|
||||
x6c_cardDriver->StartCardProbe();
|
||||
|
@ -160,7 +160,7 @@ CSaveUI::EUIType CSaveUI::SelectUIType() const
|
|||
{
|
||||
if (x6c_cardDriver->x14_error == CMemoryCardDriver::EError::CardStillFull)
|
||||
return EUIType::StillInsufficientSpace;
|
||||
return EUIType::SaveProgress;
|
||||
return EUIType::SaveReady;
|
||||
}
|
||||
|
||||
if (x6c_cardDriver->x14_error == CMemoryCardDriver::EError::CardBroken)
|
||||
|
@ -293,7 +293,7 @@ void CSaveUI::SetUIText()
|
|||
opt0 = 16; // Continue
|
||||
opt1 = 21; // Cancel
|
||||
break;
|
||||
case EUIType::SaveProgress:
|
||||
case EUIType::SaveReady:
|
||||
if (x0_saveCtx == ESaveContext::InGame)
|
||||
{
|
||||
msgB = 8; // Save progress?
|
||||
|
@ -330,10 +330,10 @@ void CSaveUI::SetUIText()
|
|||
std::wstring opt3Str;
|
||||
x68_textpane_choice3->TextSupport()->SetText(opt3Str);
|
||||
|
||||
x5c_textpane_choice0->SetB627(opt0 != -1);
|
||||
x60_textpane_choice1->SetB627(opt1 != -1);
|
||||
x64_textpane_choice2->SetB627(opt2 != -1);
|
||||
x68_textpane_choice3->SetB627(false);
|
||||
x5c_textpane_choice0->SetIsSelectable(opt0 != -1);
|
||||
x60_textpane_choice1->SetIsSelectable(opt1 != -1);
|
||||
x64_textpane_choice2->SetIsSelectable(opt2 != -1);
|
||||
x68_textpane_choice3->SetIsSelectable(false);
|
||||
|
||||
x58_tablegroup_choices->SetIsActive(opt0 != -1 || opt1 != -1 || opt2 != -1);
|
||||
SetUIColors();
|
||||
|
@ -567,7 +567,7 @@ void CSaveUI::DoAdvance(CGuiTableGroup* caller)
|
|||
}
|
||||
break;
|
||||
|
||||
case EUIType::SaveProgress:
|
||||
case EUIType::SaveReady:
|
||||
if (x0_saveCtx == ESaveContext::InGame)
|
||||
{
|
||||
if (userSel == 0)
|
||||
|
@ -592,7 +592,7 @@ void CSaveUI::DoAdvance(CGuiTableGroup* caller)
|
|||
CSfxManager::SfxStart(sfx, 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||
}
|
||||
|
||||
void CSaveUI::DoSelectionChange(CGuiTableGroup* caller)
|
||||
void CSaveUI::DoSelectionChange(CGuiTableGroup* caller, int userSel)
|
||||
{
|
||||
SetUIColors();
|
||||
CSfxManager::SfxStart(x88_navMoveSfx, 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||
|
|
|
@ -46,14 +46,14 @@ public:
|
|||
ProgressWillBeLost = 13,
|
||||
NotOriginalCard = 14,
|
||||
AllDataWillBeLost = 15,
|
||||
SaveProgress = 16
|
||||
SaveReady = 16
|
||||
};
|
||||
|
||||
bool IsDrawConditional()
|
||||
bool IsHiddenFromFrontEnd()
|
||||
{
|
||||
switch (x10_uiType)
|
||||
{
|
||||
case EUIType::SaveProgress:
|
||||
case EUIType::SaveReady:
|
||||
case EUIType::Empty:
|
||||
case EUIType::BusyReading:
|
||||
case EUIType::BusyWriting:
|
||||
|
@ -90,11 +90,11 @@ private:
|
|||
bool x92_savingDisabled = false;
|
||||
bool x93_inGame;
|
||||
|
||||
void ResetCardDriver();
|
||||
void ContinueWithoutSaving();
|
||||
|
||||
public:
|
||||
static std::unique_ptr<CMemoryCardDriver> ConstructCardDriver(bool inGame);
|
||||
void ResetCardDriver();
|
||||
CIOWin::EMessageReturn Update(float dt);
|
||||
void SetInGame(bool v) { x93_inGame = v; }
|
||||
bool PumpLoad();
|
||||
|
@ -104,7 +104,7 @@ public:
|
|||
void Draw() const;
|
||||
|
||||
void DoAdvance(CGuiTableGroup* caller);
|
||||
void DoSelectionChange(CGuiTableGroup* caller);
|
||||
void DoSelectionChange(CGuiTableGroup* caller, int userSel);
|
||||
|
||||
void ProcessUserInput(const CFinalInput& input);
|
||||
void StartGame(int idx);
|
||||
|
|
|
@ -261,7 +261,7 @@ public:
|
|||
EGameplayResult GetGameplayResult() const { return xe4_gameplayResult; }
|
||||
void SetGameplayResult(EGameplayResult wl) { xe4_gameplayResult = wl; }
|
||||
void SetManageCard(bool v) { x160_28_manageCard = v; }
|
||||
bool GetBardBusy() const { return x160_31_cardBusy; }
|
||||
bool GetCardBusy() const { return x160_31_cardBusy; }
|
||||
void SetCardBusy(bool v) { x160_31_cardBusy = v; }
|
||||
|
||||
EFlowState GetFlowState() const { return x12c_flowState; }
|
||||
|
|
Loading…
Reference in New Issue