From 1908ac111b93868b458f45ba816b40b725cbe5da Mon Sep 17 00:00:00 2001 From: Jack Andersen Date: Thu, 10 Mar 2016 14:23:16 -1000 Subject: [PATCH] More GuiSys stubs --- Runtime/CToken.hpp | 13 +++-- Runtime/GuiSys/CAuiMeter.cpp | 13 +++++ Runtime/GuiSys/CAuiMeter.hpp | 2 + Runtime/GuiSys/CDrawStringOptions.cpp | 0 Runtime/GuiSys/CDrawStringOptions.hpp | 23 ++++++++ Runtime/GuiSys/CGuiAutoRepeatData.hpp | 46 ++++++++++++++++ Runtime/GuiSys/CGuiGroup.cpp | 10 ++++ Runtime/GuiSys/CGuiGroup.hpp | 17 ++++++ Runtime/GuiSys/CGuiMenuRadial.cpp | 18 +++++++ Runtime/GuiSys/CGuiMenuRadial.hpp | 19 +++++++ Runtime/GuiSys/CGuiObject.cpp | 24 +++++++-- Runtime/GuiSys/CGuiObject.hpp | 8 ++- Runtime/GuiSys/CGuiSliderGroup.cpp | 23 ++++++++ Runtime/GuiSys/CGuiSliderGroup.hpp | 10 +++- Runtime/GuiSys/CGuiSys.cpp | 69 ++++++++++++++++++++++++ Runtime/GuiSys/CGuiSys.hpp | 60 +++++++++++++++++++++ Runtime/GuiSys/CGuiTableGroup.cpp | 78 +++++++++++++++++++++++++++ Runtime/GuiSys/CGuiTableGroup.hpp | 21 +++++++- Runtime/GuiSys/CGuiWidget.cpp | 37 +++++++++++++ Runtime/GuiSys/CGuiWidget.hpp | 8 +++ Runtime/GuiSys/CMakeLists.txt | 12 ++++- Runtime/GuiSys/CRasterFont.cpp | 0 Runtime/GuiSys/CRasterFont.hpp | 13 +++++ Runtime/GuiSys/CSaveableState.cpp | 6 +++ Runtime/GuiSys/CSaveableState.hpp | 39 ++++++++++++++ Runtime/MP1/MP1.cpp | 3 +- specter | 2 +- 27 files changed, 557 insertions(+), 17 deletions(-) create mode 100644 Runtime/GuiSys/CDrawStringOptions.cpp create mode 100644 Runtime/GuiSys/CDrawStringOptions.hpp create mode 100644 Runtime/GuiSys/CGuiGroup.cpp create mode 100644 Runtime/GuiSys/CGuiGroup.hpp create mode 100644 Runtime/GuiSys/CGuiMenuRadial.cpp create mode 100644 Runtime/GuiSys/CGuiMenuRadial.hpp create mode 100644 Runtime/GuiSys/CRasterFont.cpp create mode 100644 Runtime/GuiSys/CRasterFont.hpp create mode 100644 Runtime/GuiSys/CSaveableState.cpp create mode 100644 Runtime/GuiSys/CSaveableState.hpp diff --git a/Runtime/CToken.hpp b/Runtime/CToken.hpp index 9b0200410..ba5337687 100644 --- a/Runtime/CToken.hpp +++ b/Runtime/CToken.hpp @@ -11,7 +11,6 @@ namespace urde { class IObjectStore; -class IObj; /** Shared data-structure for CToken references, analogous to std::shared_ptr */ class CObjectReference @@ -86,7 +85,7 @@ public: /** Pointer-synchronized object-destructor, another building Lock cycle may be performed after */ void Unload() { - delete x10_object; + std::default_delete()(x10_object); x10_object = nullptr; x3_loading = false; } @@ -109,7 +108,7 @@ public: ~CObjectReference() { if (x10_object) - delete x10_object; + std::default_delete()(x10_object); else if (x3_loading) xC_objectStore->GetFactory().CancelBuild(x4_objTag); } @@ -145,7 +144,7 @@ public: { if (x0_objRef && x0_objRef->RemoveReference() == 0) { - delete x0_objRef; + std::default_delete()(x0_objRef); x0_objRef = nullptr; } } @@ -183,7 +182,8 @@ public: CToken(const CToken& other) : x0_objRef(other.x0_objRef) { - ++x0_objRef->x0_refCount; + if (x0_objRef) + ++x0_objRef->x0_refCount; } CToken(CToken&& other) : x0_objRef(other.x0_objRef), x4_lockHeld(other.x4_lockHeld) @@ -230,8 +230,7 @@ public: TToken() = default; TToken(const CToken& other) : CToken(other) {} TToken(CToken&& other) : CToken(std::move(other)) {} - TToken(T* obj) - : CToken(GetIObjObjectFor(std::unique_ptr(obj))) {} + TToken(T* obj) : CToken(GetIObjObjectFor(std::unique_ptr(obj))) {} TToken& operator=(T* obj) {*this = CToken(GetIObjObjectFor(obj)); return this;} T* GetObj() { diff --git a/Runtime/GuiSys/CAuiMeter.cpp b/Runtime/GuiSys/CAuiMeter.cpp index e69de29bb..8f79fb140 100644 --- a/Runtime/GuiSys/CAuiMeter.cpp +++ b/Runtime/GuiSys/CAuiMeter.cpp @@ -0,0 +1,13 @@ +#include "CAuiMeter.hpp" + +namespace urde +{ + +typedef bool(CAuiMeter::*FMAF)(CGuiFunctionDef* def, CGuiControllerInfo* info); +static std::unordered_map WidgetFnMap; + +void CAuiMeter::LoadWidgetFnMap() +{ +} + +} diff --git a/Runtime/GuiSys/CAuiMeter.hpp b/Runtime/GuiSys/CAuiMeter.hpp index 38e0e80d6..191244114 100644 --- a/Runtime/GuiSys/CAuiMeter.hpp +++ b/Runtime/GuiSys/CAuiMeter.hpp @@ -8,6 +8,8 @@ namespace urde class CAuiMeter : public CGuiCompoundWidget { +public: + static void LoadWidgetFnMap(); }; } diff --git a/Runtime/GuiSys/CDrawStringOptions.cpp b/Runtime/GuiSys/CDrawStringOptions.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/Runtime/GuiSys/CDrawStringOptions.hpp b/Runtime/GuiSys/CDrawStringOptions.hpp new file mode 100644 index 000000000..c95eeb5c4 --- /dev/null +++ b/Runtime/GuiSys/CDrawStringOptions.hpp @@ -0,0 +1,23 @@ +#ifndef __URDE_CDRAWSTRINGOPTIONS_HPP__ +#define __URDE_CDRAWSTRINGOPTIONS_HPP__ + +#include +#include "RetroTypes.hpp" + +namespace urde +{ + +class CDrawStringOptions +{ + u32 x0_ = 0; + std::vector x4_vec; +public: + CDrawStringOptions() + { + x4_vec.resize(16); + } +}; + +} + +#endif // __URDE_CDRAWSTRINGOPTIONS_HPP__ diff --git a/Runtime/GuiSys/CGuiAutoRepeatData.hpp b/Runtime/GuiSys/CGuiAutoRepeatData.hpp index eb8b73764..56d6c2c5f 100644 --- a/Runtime/GuiSys/CGuiAutoRepeatData.hpp +++ b/Runtime/GuiSys/CGuiAutoRepeatData.hpp @@ -4,6 +4,52 @@ namespace urde { +enum class EPhysicalControllerID +{ + Seventeen = 17, + Eighteen = 18, + Nineteen = 19, + Twenty = 20, + TwentyOne = 21, + TwentyTwo = 22, + TwentyThree = 23, + TwentyFour = 24, + ThirtyThree = 33, + ThirtyFour = 34, + ThirtyFive = 35, + ThirtySix = 36, + ThirtySeven = 37, + ThirtyEight = 38, + ThirtyNine = 39, + Forty = 40, + FortyOne = 41, + FortyTwo = 42, + FortyThree = 43, + FortyFour = 44, + FortyFive = 45, + FortySix = 46, + FortySeven = 47, + FortyEight = 48, + TwentyFive = 25, + TwentySix = 26, + TwentySeven = 27, + TwentyEight = 28, + TwentyNine = 29, + Thirty = 30, + ThirtyOne = 31, + ThirtyTwo = 32 +}; + +class CGuiAutoRepeatData +{ + EPhysicalControllerID x0_a; + EPhysicalControllerID x4_b; + float x8_[8] = {0.f, 0.f, 0.f, 0.f, 0.2f, 0.2f, 0.2f, 0.2f}; + bool x28_[8] = {}; +public: + CGuiAutoRepeatData(EPhysicalControllerID a, EPhysicalControllerID b) + : x0_a(a), x4_b(b) {} +}; } diff --git a/Runtime/GuiSys/CGuiGroup.cpp b/Runtime/GuiSys/CGuiGroup.cpp new file mode 100644 index 000000000..74e4a822e --- /dev/null +++ b/Runtime/GuiSys/CGuiGroup.cpp @@ -0,0 +1,10 @@ +#include "CGuiGroup.hpp" + +namespace urde +{ + +void CGuiGroup::LoadWidgetFnMap() +{ +} + +} diff --git a/Runtime/GuiSys/CGuiGroup.hpp b/Runtime/GuiSys/CGuiGroup.hpp new file mode 100644 index 000000000..2cf4d4307 --- /dev/null +++ b/Runtime/GuiSys/CGuiGroup.hpp @@ -0,0 +1,17 @@ +#ifndef __URDE_CGUIGROUP_HPP__ +#define __URDE_CGUIGROUP_HPP__ + +#include "CGuiCompoundWidget.hpp" + +namespace urde +{ + +class CGuiGroup : public CGuiCompoundWidget +{ +public: + static void LoadWidgetFnMap(); +}; + +} + +#endif // __URDE_CGUIGROUP_HPP__ diff --git a/Runtime/GuiSys/CGuiMenuRadial.cpp b/Runtime/GuiSys/CGuiMenuRadial.cpp new file mode 100644 index 000000000..5df2cc76c --- /dev/null +++ b/Runtime/GuiSys/CGuiMenuRadial.cpp @@ -0,0 +1,18 @@ +#include "CGuiMenuRadial.hpp" + +namespace urde +{ + +typedef bool(CGuiMenuRadial::*FMAF)(CGuiFunctionDef* def, CGuiControllerInfo* info); +static std::unordered_map WidgetFnMap; + +void CGuiMenuRadial::LoadWidgetFnMap() +{ + WidgetFnMap.emplace(std::make_pair(34, &CGuiMenuRadial::MAF_SelectWithStick)); +} + +bool CGuiMenuRadial::MAF_SelectWithStick(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +} diff --git a/Runtime/GuiSys/CGuiMenuRadial.hpp b/Runtime/GuiSys/CGuiMenuRadial.hpp new file mode 100644 index 000000000..5f88c4323 --- /dev/null +++ b/Runtime/GuiSys/CGuiMenuRadial.hpp @@ -0,0 +1,19 @@ +#ifndef __URDE_CGUIMENURADIAL_HPP__ +#define __URDE_CGUIMENURADIAL_HPP__ + +#include "CGuiTableGroup.hpp" + +namespace urde +{ + +class CGuiMenuRadial : public CGuiTableGroup +{ +public: + static void LoadWidgetFnMap(); + + bool MAF_SelectWithStick(CGuiFunctionDef* def, CGuiControllerInfo* info); +}; + +} + +#endif // __URDE_CGUIMENURADIAL_HPP__ diff --git a/Runtime/GuiSys/CGuiObject.cpp b/Runtime/GuiSys/CGuiObject.cpp index c653f680a..ec2ec6437 100644 --- a/Runtime/GuiSys/CGuiObject.cpp +++ b/Runtime/GuiSys/CGuiObject.cpp @@ -4,6 +4,12 @@ namespace urde { +CGuiObject::~CGuiObject() +{ + delete x74_child; + delete x78_nextSibling; +} + void CGuiObject::Update(float dt) { if (x74_child) @@ -31,18 +37,24 @@ void CGuiObject::MoveInWorld(const zeus::CVector3f& vec) void CGuiObject::RotateReset() { + x4_localXF.m_basis = zeus::CMatrix3f::skIdentityMatrix3f; + Reorthogonalize(); + RecalculateTransforms(); } zeus::CVector3f CGuiObject::RotateW2O(const zeus::CVector3f& vec) const { + return x34_worldXF.transposeRotate(vec); } zeus::CVector3f CGuiObject::RotateO2P(const zeus::CVector3f& vec) const { + return x4_localXF.rotate(vec); } zeus::CVector3f CGuiObject::RotateTranslateW2O(const zeus::CVector3f& vec) const { + return x34_worldXF.transposeRotate(vec - x34_worldXF.m_origin); } void CGuiObject::MultiplyO2P(const zeus::CTransform& xf) @@ -54,7 +66,7 @@ void CGuiObject::MultiplyO2P(const zeus::CTransform& xf) RecalculateTransforms(); } -void CGuiObject::AddChildObject(CGuiObject* obj, bool calcChildWorld, bool atEnd) +void CGuiObject::AddChildObject(CGuiObject* obj, bool makeWorldLocal, bool atEnd) { obj->x70_parent = this; @@ -76,9 +88,15 @@ void CGuiObject::AddChildObject(CGuiObject* obj, bool calcChildWorld, bool atEnd x74_child = obj; } - if (calcChildWorld) + if (makeWorldLocal) { - // TODO: do + zeus::CVector3f negParentWorld = -x34_worldXF.m_origin; + zeus::CMatrix3f basisMat( + x34_worldXF.m_basis[0] / x34_worldXF.m_basis[0].magnitude(), + x34_worldXF.m_basis[1] / x34_worldXF.m_basis[1].magnitude(), + x34_worldXF.m_basis[2] / x34_worldXF.m_basis[2].magnitude()); + zeus::CVector3f xfWorld = basisMat * negParentWorld; + obj->x4_localXF = zeus::CTransform(basisMat, xfWorld) * obj->x34_worldXF; } RecalculateTransforms(); diff --git a/Runtime/GuiSys/CGuiObject.hpp b/Runtime/GuiSys/CGuiObject.hpp index f830f1b73..5fb4264c9 100644 --- a/Runtime/GuiSys/CGuiObject.hpp +++ b/Runtime/GuiSys/CGuiObject.hpp @@ -8,6 +8,9 @@ namespace urde { class CGuiWidgetDrawParms; +class CGuiMessage; +class CGuiFunctionDef; +class CGuiControllerInfo; class CGuiObject { @@ -18,9 +21,10 @@ class CGuiObject CGuiObject* x74_child = nullptr; CGuiObject* x78_nextSibling = nullptr; public: - virtual ~CGuiObject() = default; + virtual ~CGuiObject(); virtual void Update(float dt); virtual void Draw(const CGuiWidgetDrawParms& parms) const; + virtual void Message(const CGuiMessage& msg)=0; void MoveInWorld(const zeus::CVector3f& vec); const zeus::CVector3f& GetLocalPosition() const {return x4_localXF.m_origin;} @@ -31,7 +35,7 @@ public: zeus::CVector3f RotateO2P(const zeus::CVector3f& vec) const; zeus::CVector3f RotateTranslateW2O(const zeus::CVector3f& vec) const; void MultiplyO2P(const zeus::CTransform& xf); - void AddChildObject(CGuiObject* obj, bool, bool); + void AddChildObject(CGuiObject* obj, bool makeWorldLocal, bool atEnd); CGuiObject* RemoveChildObject(CGuiObject* obj, bool makeWorldLocal); CGuiObject* GetParent() {return x70_parent;} CGuiObject* GetChildObject() {return x74_child;} diff --git a/Runtime/GuiSys/CGuiSliderGroup.cpp b/Runtime/GuiSys/CGuiSliderGroup.cpp index e69de29bb..e3f7e5c7b 100644 --- a/Runtime/GuiSys/CGuiSliderGroup.cpp +++ b/Runtime/GuiSys/CGuiSliderGroup.cpp @@ -0,0 +1,23 @@ +#include "CGuiSliderGroup.hpp" + +namespace urde +{ + +typedef bool(CGuiSliderGroup::*FMAF)(CGuiFunctionDef* def, CGuiControllerInfo* info); +static std::unordered_map WidgetFnMap; + +void CGuiSliderGroup::LoadWidgetFnMap() +{ + WidgetFnMap.emplace(std::make_pair(18, &CGuiSliderGroup::MAF_Increment)); + WidgetFnMap.emplace(std::make_pair(19, &CGuiSliderGroup::MAF_Decrement)); +} + +bool CGuiSliderGroup::MAF_Increment(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiSliderGroup::MAF_Decrement(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +} diff --git a/Runtime/GuiSys/CGuiSliderGroup.hpp b/Runtime/GuiSys/CGuiSliderGroup.hpp index 39d76edc2..503b0c87b 100644 --- a/Runtime/GuiSys/CGuiSliderGroup.hpp +++ b/Runtime/GuiSys/CGuiSliderGroup.hpp @@ -1,11 +1,19 @@ #ifndef __URDE_CGUISLIDERGROUP_HPP__ #define __URDE_CGUISLIDERGROUP_HPP__ -#include "CGuiWidget.hpp" +#include "CGuiCompoundWidget.hpp" namespace urde { +class CGuiSliderGroup : public CGuiCompoundWidget +{ +public: + static void LoadWidgetFnMap(); + + bool MAF_Increment(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_Decrement(CGuiFunctionDef* def, CGuiControllerInfo* info); +}; } diff --git a/Runtime/GuiSys/CGuiSys.cpp b/Runtime/GuiSys/CGuiSys.cpp index e69de29bb..348c57e94 100644 --- a/Runtime/GuiSys/CGuiSys.cpp +++ b/Runtime/GuiSys/CGuiSys.cpp @@ -0,0 +1,69 @@ +#include "CGuiSys.hpp" + +namespace urde +{ + +void CGuiSys::AddFactories(EUsageMode /* mode */) +{ + x8_factoryMgr.m_factories.clear(); +} + +void CGuiSys::LoadWidgetFunctions() +{ +} + +CGuiSys::CGuiSys(IFactory& resFactory, CSimplePool& resStore, EUsageMode mode) +: x0_resFactory(resFactory), x4_resStore(resStore), x2c_mode(mode), + x38_frameFactoryParams(new TObjOwnerParam(CGuiResFrameData(*this))), + x40_constructTime(std::chrono::steady_clock::now()) +{ + AddFactories(mode); + LoadWidgetFunctions(); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::Seventeen, + CGuiAutoRepeatData(EPhysicalControllerID::Seventeen, EPhysicalControllerID::Eighteen))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::Nineteen, + CGuiAutoRepeatData(EPhysicalControllerID::Nineteen, EPhysicalControllerID::Twenty))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::TwentyOne, + CGuiAutoRepeatData(EPhysicalControllerID::TwentyOne, EPhysicalControllerID::TwentyTwo))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::TwentyThree, + CGuiAutoRepeatData(EPhysicalControllerID::TwentyThree, EPhysicalControllerID::TwentyFour))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::ThirtyFive, + CGuiAutoRepeatData(EPhysicalControllerID::ThirtyFive, EPhysicalControllerID::ThirtySix))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::ThirtySeven, + CGuiAutoRepeatData(EPhysicalControllerID::ThirtySeven, EPhysicalControllerID::ThirtyEight))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::ThirtyNine, + CGuiAutoRepeatData(EPhysicalControllerID::ThirtyNine, EPhysicalControllerID::Forty))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::FortyOne, + CGuiAutoRepeatData(EPhysicalControllerID::FortyOne, EPhysicalControllerID::FortyTwo))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::FortyThree, + CGuiAutoRepeatData(EPhysicalControllerID::FortyThree, EPhysicalControllerID::FortyFour))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::FortyFive, + CGuiAutoRepeatData(EPhysicalControllerID::FortyFive, EPhysicalControllerID::FortySix))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::FortySeven, + CGuiAutoRepeatData(EPhysicalControllerID::FortySeven, EPhysicalControllerID::FortyEight))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::TwentyFive, + CGuiAutoRepeatData(EPhysicalControllerID::TwentyFive, EPhysicalControllerID::TwentySix))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::TwentySeven, + CGuiAutoRepeatData(EPhysicalControllerID::TwentySeven, EPhysicalControllerID::TwentyEight))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::TwentyNine, + CGuiAutoRepeatData(EPhysicalControllerID::TwentyNine, EPhysicalControllerID::Thirty))); + + x18_repeatMap.emplace(std::make_pair(EPhysicalControllerID::ThirtyOne, + CGuiAutoRepeatData(EPhysicalControllerID::ThirtyOne, EPhysicalControllerID::ThirtyTwo))); +} + +} diff --git a/Runtime/GuiSys/CGuiSys.hpp b/Runtime/GuiSys/CGuiSys.hpp index 91acc1740..d82f0b96c 100644 --- a/Runtime/GuiSys/CGuiSys.hpp +++ b/Runtime/GuiSys/CGuiSys.hpp @@ -1,11 +1,71 @@ #ifndef __URDE_CGUISYS_HPP__ #define __URDE_CGUISYS_HPP__ +#include "hecl/hecl.hpp" +#include +#include +#include +#include +#include "CGuiAutoRepeatData.hpp" +#include "CSaveableState.hpp" + +namespace std +{ +template <> struct hash +{ + size_t operator() (const urde::EPhysicalControllerID& id) const NOEXCEPT {return size_t(id);} +}; +} + namespace urde { +class CGuiObject; +class CVParamTransfer; +class SObjectTag; +class IFactory; +class CSimplePool; + +typedef CGuiObject*(*FGuiFactoryFunc)(const SObjectTag&, const CVParamTransfer&); + +class CGuiFactoryMgr +{ + friend class CGuiSys; + std::unordered_map m_factories; +public: + void AddFactory(hecl::FourCC key, FGuiFactoryFunc func) + { + m_factories[key] = func; + } +}; class CGuiSys { +public: + enum class EUsageMode + { + Zero + }; +private: + IFactory& x0_resFactory; + CSimplePool& x4_resStore; + CGuiFactoryMgr x8_factoryMgr; + std::unordered_map x18_repeatMap; + EUsageMode x2c_mode; + std::stack> x28_saveStack; + CVParamTransfer x38_frameFactoryParams; + std::chrono::time_point x40_constructTime; + + void AddFactories(EUsageMode mode); + void LoadWidgetFunctions(); +public: + CGuiSys(IFactory& resFactory, CSimplePool& resStore, EUsageMode mode); +}; + +/** Parameter pack for FRME factory */ +struct CGuiResFrameData +{ + CGuiSys& x0_guiSys; + CGuiResFrameData(CGuiSys& guiSys) : x0_guiSys(guiSys) {} }; } diff --git a/Runtime/GuiSys/CGuiTableGroup.cpp b/Runtime/GuiSys/CGuiTableGroup.cpp index e69de29bb..23dd204aa 100644 --- a/Runtime/GuiSys/CGuiTableGroup.cpp +++ b/Runtime/GuiSys/CGuiTableGroup.cpp @@ -0,0 +1,78 @@ +#include "CGuiTableGroup.hpp" + +namespace urde +{ + +typedef bool(CGuiTableGroup::*FMAF)(CGuiFunctionDef* def, CGuiControllerInfo* info); +static std::unordered_map WidgetFnMap; + +void CGuiTableGroup::LoadWidgetFnMap() +{ + WidgetFnMap.emplace(std::make_pair(21, &CGuiTableGroup::MAF_SelectNextColumn)); + WidgetFnMap.emplace(std::make_pair(22, &CGuiTableGroup::MAF_SelectPrevColumn)); + WidgetFnMap.emplace(std::make_pair(23, &CGuiTableGroup::MAF_SelectNextRow)); + WidgetFnMap.emplace(std::make_pair(24, &CGuiTableGroup::MAF_SelectPrevRow)); + WidgetFnMap.emplace(std::make_pair(25, &CGuiTableGroup::MAF_SelectNextColumnSkipUnActivated)); + WidgetFnMap.emplace(std::make_pair(26, &CGuiTableGroup::MAF_SelectPrevColumnSkipUnActivated)); + WidgetFnMap.emplace(std::make_pair(27, &CGuiTableGroup::MAF_SelectNextRowSkipUnActivated)); + WidgetFnMap.emplace(std::make_pair(28, &CGuiTableGroup::MAF_SelectPrevRowSkipUnActivated)); + WidgetFnMap.emplace(std::make_pair(29, &CGuiTableGroup::MAF_SelectColumnAtIndex)); + WidgetFnMap.emplace(std::make_pair(30, &CGuiTableGroup::MAF_SelectRowAtIndex)); + WidgetFnMap.emplace(std::make_pair(31, &CGuiTableGroup::MAF_InitializeTable)); + WidgetFnMap.emplace(std::make_pair(32, &CGuiTableGroup::MAF_MenuAdvance)); + WidgetFnMap.emplace(std::make_pair(33, &CGuiTableGroup::MAF_MenuCancel)); +} + +bool CGuiTableGroup::MAF_SelectNextColumn(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_SelectPrevColumn(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_SelectNextRow(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_SelectPrevRow(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_SelectNextColumnSkipUnActivated(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_SelectPrevColumnSkipUnActivated(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_SelectNextRowSkipUnActivated(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_SelectPrevRowSkipUnActivated(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_SelectColumnAtIndex(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_SelectRowAtIndex(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_InitializeTable(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_MenuAdvance(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiTableGroup::MAF_MenuCancel(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +} diff --git a/Runtime/GuiSys/CGuiTableGroup.hpp b/Runtime/GuiSys/CGuiTableGroup.hpp index 3e691486d..0160cb8c0 100644 --- a/Runtime/GuiSys/CGuiTableGroup.hpp +++ b/Runtime/GuiSys/CGuiTableGroup.hpp @@ -1,11 +1,30 @@ #ifndef __URDE_CGUITABLEGROUP_HPP__ #define __URDE_CGUITABLEGROUP_HPP__ -#include "CGuiWidget.hpp" +#include "CGuiCompoundWidget.hpp" namespace urde { +class CGuiTableGroup : public CGuiCompoundWidget +{ +public: + static void LoadWidgetFnMap(); + + bool MAF_SelectNextColumn(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SelectPrevColumn(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SelectNextRow(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SelectPrevRow(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SelectNextColumnSkipUnActivated(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SelectPrevColumnSkipUnActivated(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SelectNextRowSkipUnActivated(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SelectPrevRowSkipUnActivated(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SelectColumnAtIndex(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SelectRowAtIndex(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_InitializeTable(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_MenuAdvance(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_MenuCancel(CGuiFunctionDef* def, CGuiControllerInfo* info); +}; } diff --git a/Runtime/GuiSys/CGuiWidget.cpp b/Runtime/GuiSys/CGuiWidget.cpp index d62a5d5db..08ed23e50 100644 --- a/Runtime/GuiSys/CGuiWidget.cpp +++ b/Runtime/GuiSys/CGuiWidget.cpp @@ -3,4 +3,41 @@ namespace urde { +typedef bool(CGuiWidget::*FMAF)(CGuiFunctionDef* def, CGuiControllerInfo* info); +static std::unordered_map WidgetFnMap; + +void CGuiWidget::LoadWidgetFnMap() +{ + WidgetFnMap.emplace(std::make_pair(2, &CGuiWidget::MAF_StartAnimationSet)); + WidgetFnMap.emplace(std::make_pair(3, &CGuiWidget::MAF_SendMessage)); + WidgetFnMap.emplace(std::make_pair(6, &CGuiWidget::MAF_PauseAnim)); + WidgetFnMap.emplace(std::make_pair(7, &CGuiWidget::MAF_ResumeAnim)); + WidgetFnMap.emplace(std::make_pair(11, &CGuiWidget::MAF_SetState)); + WidgetFnMap.emplace(std::make_pair(12, &CGuiWidget::MAF_SetStateOfWidget)); +} + +bool CGuiWidget::MAF_StartAnimationSet(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiWidget::MAF_SendMessage(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiWidget::MAF_PauseAnim(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiWidget::MAF_ResumeAnim(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiWidget::MAF_SetState(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + +bool CGuiWidget::MAF_SetStateOfWidget(CGuiFunctionDef* def, CGuiControllerInfo* info) +{ +} + } diff --git a/Runtime/GuiSys/CGuiWidget.hpp b/Runtime/GuiSys/CGuiWidget.hpp index f8da58b9f..f0f1c134c 100644 --- a/Runtime/GuiSys/CGuiWidget.hpp +++ b/Runtime/GuiSys/CGuiWidget.hpp @@ -20,6 +20,7 @@ public: struct CGuiWidgetParms { }; + static void LoadWidgetFnMap(); private: public: virtual void Message(const CGuiMessage& msg); @@ -49,6 +50,13 @@ public: virtual void OnDeActivate(); virtual void DoRegisterEventHandler(); virtual void DoUnregisterEventHandler(); + + bool MAF_StartAnimationSet(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SendMessage(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_PauseAnim(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_ResumeAnim(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SetState(CGuiFunctionDef* def, CGuiControllerInfo* info); + bool MAF_SetStateOfWidget(CGuiFunctionDef* def, CGuiControllerInfo* info); }; } diff --git a/Runtime/GuiSys/CMakeLists.txt b/Runtime/GuiSys/CMakeLists.txt index fccae856f..4f37761e1 100644 --- a/Runtime/GuiSys/CMakeLists.txt +++ b/Runtime/GuiSys/CMakeLists.txt @@ -51,4 +51,14 @@ add_library(RuntimeCommonGuiSys CSplashScreen.cpp CSplashScreen.hpp CGuiCompoundWidget.cpp - CGuiCompoundWidget.hpp) + CGuiCompoundWidget.hpp + CSaveableState.cpp + CSaveableState.hpp + CDrawStringOptions.cpp + CDrawStringOptions.hpp + CRasterFont.cpp + CRasterFont.hpp + CGuiGroup.cpp + CGuiGroup.hpp + CGuiMenuRadial.cpp + CGuiMenuRadial.hpp) diff --git a/Runtime/GuiSys/CRasterFont.cpp b/Runtime/GuiSys/CRasterFont.cpp new file mode 100644 index 000000000..e69de29bb diff --git a/Runtime/GuiSys/CRasterFont.hpp b/Runtime/GuiSys/CRasterFont.hpp new file mode 100644 index 000000000..27d2bf580 --- /dev/null +++ b/Runtime/GuiSys/CRasterFont.hpp @@ -0,0 +1,13 @@ +#ifndef __URDE_CRASTERFONT_HPP__ +#define __URDE_CRASTERFONT_HPP__ + +namespace urde +{ + +class CRasterFont +{ +}; + +} + +#endif // __URDE_CRASTERFONT_HPP__ diff --git a/Runtime/GuiSys/CSaveableState.cpp b/Runtime/GuiSys/CSaveableState.cpp new file mode 100644 index 000000000..52197b1d9 --- /dev/null +++ b/Runtime/GuiSys/CSaveableState.cpp @@ -0,0 +1,6 @@ +#include "CSaveableState.hpp" + +namespace urde +{ + +} diff --git a/Runtime/GuiSys/CSaveableState.hpp b/Runtime/GuiSys/CSaveableState.hpp new file mode 100644 index 000000000..397933fc8 --- /dev/null +++ b/Runtime/GuiSys/CSaveableState.hpp @@ -0,0 +1,39 @@ +#ifndef __URDE_CSAVEABLESTATE_HPP__ +#define __URDE_CSAVEABLESTATE_HPP__ + +#include "CDrawStringOptions.hpp" +#include "CToken.hpp" + +namespace urde +{ +class CRasterFont; + +class CSaveableState +{ + CDrawStringOptions x0_drawStrOpts; + TToken x14_token; + struct VecElem + { + u8 a = 0; + u8 b = 0; + u8 c = 0; + u8 d = 0xff; + }; + std::vector x20_; + std::vector x30_; + float x40_ = 1.f; + u32 x44_ = 0; + bool x48_ = false; + u32 x4c_ = 0; + u32 x50_ = 0; + + CSaveableState() + { + x20_.resize(3); + x30_.resize(16); + } +}; + +} + +#endif // __URDE_CSAVEABLESTATE_HPP__ diff --git a/Runtime/MP1/MP1.cpp b/Runtime/MP1/MP1.cpp index 6fad2fc5a..80a8fe3ae 100644 --- a/Runtime/MP1/MP1.cpp +++ b/Runtime/MP1/MP1.cpp @@ -145,7 +145,8 @@ public: CGameArchitectureSupport() : m_audioSys(0,0,0,0,0), m_inputGenerator(0.0f /*g_tweakPlayer->GetLeftLogicalThreshold()*/, - 0.0f /*g_tweakPlayer->GetRightLogicalThreshold()*/) + 0.0f /*g_tweakPlayer->GetRightLogicalThreshold()*/), + m_guiSys(*g_ResFactory, *g_SimplePool, CGuiSys::EUsageMode::Zero) { m_inputGenerator.startScanning(); } diff --git a/specter b/specter index 0b750609a..ce321d80f 160000 --- a/specter +++ b/specter @@ -1 +1 @@ -Subproject commit 0b750609a665a47afc959ae58613703a689e91f2 +Subproject commit ce321d80fe2b8d5d20a8f4bfce7718700c7e2809