CustomizeAnimFile MxVariable (#584)

* CustomizeAnimFile MxVariable

* Fixes

* Remove returns

* Add size asserts

---------

Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
MS
2024-02-21 15:30:02 -05:00
committed by GitHub
parent 48cd648357
commit 761b120aee
9 changed files with 180 additions and 6 deletions

View File

@@ -21,6 +21,7 @@ public:
}
static void configureLegoBuildingManager(MxS32);
static void SetCustomizeAnimFile(const char* p_value);
void FUN_1002fa00();
void FUN_1002fb30();
@@ -30,6 +31,8 @@ public:
// LegoBuildingManager::`scalar deleting destructor'
private:
static char* g_customizeAnimFile;
void Init();
undefined m_unk0x08[0x28]; // 0x08

View File

@@ -24,10 +24,14 @@ public:
void FUN_100263a0(undefined4 p_und);
void FUN_10027120();
static void SetCustomizeAnimFile(const char* p_value);
// SYNTHETIC: LEGO1 0x100262a0
// LegoPlantManager::`scalar deleting destructor'
private:
static char* g_customizeAnimFile;
void Init();
undefined m_unk0x08[0x24]; // 0x08

View File

@@ -3,10 +3,28 @@
#include "decomp.h"
#include "lego/sources/misc/legostorage.h"
#include "legovariables.h"
#include "mxstl/stlcompat.h"
#include "mxtypes.h"
class LegoROI;
#pragma warning(disable : 4237)
// TODO: generic string comparator?
struct LegoUnkSaveDataMapComparator {
bool operator()(const char* const& p_a, const char* const& p_b) const { return strcmpi(p_a, p_b) > 0; }
};
// TODO: pair instead?
// SIZE 0x08
struct LegoUnkSaveDataMapValue {
LegoROI* m_roi; // 0x00
MxU32 m_counter; // 0x04
};
typedef map<char*, LegoUnkSaveDataMapValue*, LegoUnkSaveDataMapComparator> LegoUnkSaveDataMap;
struct LegoSaveDataEntry3 {
char* m_name;
void* m_unk0x04;
@@ -38,13 +56,42 @@ public:
LegoUnkSaveDataWriter();
MxResult WriteSaveData3(LegoStorage* p_stream);
LegoROI* FUN_10083500(char*, undefined4);
LegoROI* FUN_10083500(char*, MxBool);
static void InitSaveData();
static void SetCustomizeAnimFile(const char* p_value);
void FUN_100832a0();
void FUN_10083db0(LegoROI* p_roi);
void FUN_10083f10(LegoROI* p_roi);
private:
undefined m_unk0x00[0x08]; // 0x00
static char* g_customizeAnimFile;
LegoUnkSaveDataMap* m_map; // 0x00
CustomizeAnimFileVariable* m_customizeAnimFile; // 0x04
};
// clang-format off
// FUNCTION: LEGO1 0x10082b90
// _Tree<char *,pair<char * const,LegoUnkSaveDataMapValue *>,map<char *,LegoUnkSaveDataMapValue *,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::_Kfn,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::~_Tree<char *,pair<char * const,LegoUnkSaveDataMapValue *>,map<char *,LegoUnkSaveDataMapValue *,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::_Kfn,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >
// FUNCTION: LEGO1 0x10082c60
// _Tree<char *,pair<char * const,LegoUnkSaveDataMapValue *>,map<char *,LegoUnkSaveDataMapValue *,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::_Kfn,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::iterator::_Inc
// FUNCTION: LEGO1 0x10082ca0
// _Tree<char *,pair<char * const,LegoUnkSaveDataMapValue *>,map<char *,LegoUnkSaveDataMapValue *,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::_Kfn,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::erase
// FUNCTION: LEGO1 0x100830f0
// _Tree<char *,pair<char * const,LegoUnkSaveDataMapValue *>,map<char *,LegoUnkSaveDataMapValue *,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::_Kfn,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::_Erase
// FUNCTION: LEGO1 0x10083130
// map<char *,LegoUnkSaveDataMapValue *,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::~map<char *,LegoUnkSaveDataMapValue *,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >
// GLOBAL: LEGO1 0x100fc508
// _Tree<char *,pair<char * const,LegoUnkSaveDataMapValue *>,map<char *,LegoUnkSaveDataMapValue *,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::_Kfn,LegoUnkSaveDataMapComparator,allocator<LegoUnkSaveDataMapValue *> >::_Nil
// clang-format on
#endif // LEGOUNKSAVEDATAWRITER_H

View File

@@ -44,4 +44,13 @@ public:
void SetValue(const char* p_value) override; // vtable+0x04
};
// VTABLE: LEGO1 0x100da878
// SIZE 0x24
class CustomizeAnimFileVariable : public MxVariable {
public:
CustomizeAnimFileVariable(const char* p_key);
void SetValue(const char* p_value) override; // vtable+0x04
};
#endif // LEGOVARIABLES_H