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

@@ -2,6 +2,9 @@
DECOMP_SIZE_ASSERT(LegoPlantManager, 0x2c)
// GLOBAL: LEGO1 0x100f3188
char* LegoPlantManager::g_customizeAnimFile = NULL;
// FUNCTION: LEGO1 0x10026220
LegoPlantManager::LegoPlantManager()
{
@@ -32,6 +35,25 @@ void LegoPlantManager::FUN_100263a0(undefined4 p_und)
// TODO
}
// FUNCTION: LEGO1 0x10026be0
void LegoPlantManager::SetCustomizeAnimFile(const char* p_value)
{
if (g_customizeAnimFile != NULL) {
delete[] g_customizeAnimFile;
}
if (p_value != NULL) {
g_customizeAnimFile = new char[strlen(p_value) + 1];
if (g_customizeAnimFile != NULL) {
strcpy(g_customizeAnimFile, p_value);
}
}
else {
g_customizeAnimFile = NULL;
}
}
// STUB: LEGO1 0x10026e00
MxResult LegoPlantManager::Tickle()
{

View File

@@ -1,18 +1,37 @@
#include "legounksavedatawriter.h"
#include "legogamestate.h"
#include "legoomni.h"
#include "roi/legoroi.h"
DECOMP_SIZE_ASSERT(LegoUnkSaveDataWriter, 0x08)
DECOMP_SIZE_ASSERT(LegoSaveDataEntry3, 0x108)
// GLOBAL: LEGO1 0x100f80c0
LegoSaveDataEntry3 g_saveDataInit[66]; // TODO: add data
// GLOBAL: LEGO1 0x100fc4e4
char* LegoUnkSaveDataWriter::g_customizeAnimFile = NULL;
// GLOBAL: LEGO1 0x10104f20
LegoSaveDataEntry3 g_saveData3[66];
// STUB: LEGO1 0x10082a20
// FUNCTION: LEGO1 0x10082a20
LegoUnkSaveDataWriter::LegoUnkSaveDataWriter()
{
// TODO
m_map = new LegoUnkSaveDataMap();
InitSaveData();
m_customizeAnimFile = new CustomizeAnimFileVariable("CUSTOMIZE_ANIM_FILE");
VariableTable()->SetVariable(m_customizeAnimFile);
}
// FUNCTION: LEGO1 0x10083270
void LegoUnkSaveDataWriter::InitSaveData()
{
for (MxS32 i = 0; i < 66; i++) {
g_saveData3[i] = g_saveDataInit[i];
}
}
// STUB: LEGO1 0x100832a0
@@ -71,7 +90,7 @@ MxResult LegoUnkSaveDataWriter::WriteSaveData3(LegoStorage* p_stream)
}
// STUB: LEGO1 0x10083500
LegoROI* LegoUnkSaveDataWriter::FUN_10083500(char*, undefined4)
LegoROI* LegoUnkSaveDataWriter::FUN_10083500(char* p_key, MxBool p_option)
{
// TODO
// involves an STL map with a _Nil node at 0x100fc508
@@ -89,3 +108,22 @@ void LegoUnkSaveDataWriter::FUN_10083f10(LegoROI* p_roi)
{
// TODO
}
// FUNCTION: LEGO1 0x100851a0
void LegoUnkSaveDataWriter::SetCustomizeAnimFile(const char* p_value)
{
if (g_customizeAnimFile != NULL) {
delete[] g_customizeAnimFile;
}
if (p_value != NULL) {
g_customizeAnimFile = new char[strlen(p_value) + 1];
if (g_customizeAnimFile != NULL) {
strcpy(g_customizeAnimFile, p_value);
}
}
else {
g_customizeAnimFile = NULL;
}
}

View File

@@ -1,5 +1,16 @@
#include "legovariables.h"
#include "legobuildingmanager.h"
#include "legoomni.h"
#include "legoplantmanager.h"
#include "legounksavedatawriter.h"
DECOMP_SIZE_ASSERT(VisibilityVariable, 0x24)
DECOMP_SIZE_ASSERT(CameraLocationVariable, 0x24)
DECOMP_SIZE_ASSERT(CursorVariable, 0x24)
DECOMP_SIZE_ASSERT(WhoAmIVariable, 0x24)
DECOMP_SIZE_ASSERT(CustomizeAnimFileVariable, 0x24)
// GLOBAL: LEGO1 0x100f3a40
// STRING: LEGO1 0x100f3808
const char* g_varVISIBILITY = "VISIBILITY";
@@ -38,3 +49,21 @@ void WhoAmIVariable::SetValue(const char* p_value)
{
// TODO
}
// FUNCTION: LEGO1 0x10085aa0
CustomizeAnimFileVariable::CustomizeAnimFileVariable(const char* p_key)
{
m_key = p_key;
m_key.ToUpperCase();
}
// FUNCTION: LEGO1 0x10085b50
void CustomizeAnimFileVariable::SetValue(const char* p_value)
{
// STRING: LEGO1 0x100fc4f4
if (strcmp(m_key.GetData(), "CUSTOMIZE_ANIM_FILE") == 0) {
UnkSaveDataWriter()->SetCustomizeAnimFile(p_value);
PlantManager()->SetCustomizeAnimFile(p_value);
BuildingManager()->SetCustomizeAnimFile(p_value);
}
}