mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-27 18:21:15 +00:00
* 100% match most of the remaining methods, only Tickle and FUN_10030630 remain. * The interesting finding is that the curious members of the LegoBuildingManager form a short embedded fixed-length array used to store info about current animation of buildings. * I saw that you removed the SetY which I had added to MxMatrix. Agree that this method doesn't make sense on MxMatrix, however I've added it back to Matrix4. I see the pattern of setting / getting the Y component used in enough places that I doubt they were just hoping they remembered the subscript correctly every time. Let me know if you agree or still don't think it makes sense to include.
107 lines
2.8 KiB
C++
107 lines
2.8 KiB
C++
#ifndef LEGOBUILDINGMANAGER_H
|
|
#define LEGOBUILDINGMANAGER_H
|
|
|
|
#include "decomp.h"
|
|
#include "mxcore.h"
|
|
#include "misc/legotypes.h"
|
|
|
|
class LegoEntity;
|
|
class LegoROI;
|
|
class LegoStorage;
|
|
class LegoWorld;
|
|
class LegoCacheSound;
|
|
class LegoPathBoundary;
|
|
|
|
// SIZE 0x2c
|
|
struct LegoBuildingInfo {
|
|
enum {
|
|
c_bit1 = 0x01,
|
|
c_bit2 = 0x02,
|
|
c_bit3 = 0x04,
|
|
c_bit4 = 0x08
|
|
};
|
|
|
|
LegoEntity* m_entity; // 0x00
|
|
const char* m_hausName; // 0x04
|
|
MxU32 m_cycle1; // 0x08
|
|
MxU32 m_cycle2; // 0x0c
|
|
MxU8 m_cycle3; // 0x10
|
|
MxS8 m_unk0x11; // 0x11
|
|
MxS8 m_initialUnk0x11; // 0x12 = initial value loaded to m_unk0x11
|
|
MxU8 m_flags; // 0x13
|
|
float m_unk0x014; // 0x14
|
|
const char* m_unk0x18; // 0x18
|
|
float m_x; // 0x1c
|
|
float m_y; // 0x20
|
|
float m_z; // 0x24
|
|
LegoPathBoundary* m_pathBoundary; // 0x28
|
|
};
|
|
|
|
// VTABLE: LEGO1 0x100d6f50
|
|
// SIZE 0x30
|
|
class LegoBuildingManager : public MxCore {
|
|
public:
|
|
LegoBuildingManager();
|
|
~LegoBuildingManager() override;
|
|
|
|
MxResult Tickle() override; // vtable+0x08
|
|
|
|
// FUNCTION: LEGO1 0x1002f930
|
|
inline const char* ClassName() const override // vtable+0x0c
|
|
{
|
|
// STRING: LEGO1 0x100f37d0
|
|
return "LegoBuildingManager";
|
|
}
|
|
|
|
static void configureLegoBuildingManager(MxS32);
|
|
static void SetCustomizeAnimFile(const char* p_value);
|
|
|
|
void Init();
|
|
void FUN_1002fa00();
|
|
void UpdatePosition(MxS32 p_index, LegoWorld* p_world);
|
|
void FUN_1002fb30();
|
|
MxResult Write(LegoStorage* p_storage);
|
|
MxResult Read(LegoStorage* p_storage);
|
|
LegoBuildingInfo* GetInfo(LegoEntity* p_entity);
|
|
MxBool IncrementVariant(LegoEntity* p_entity);
|
|
MxBool FUN_1002fe40(LegoEntity* p_entity);
|
|
MxBool FUN_1002fe80(LegoEntity* p_entity);
|
|
MxBool FUN_1002fed0(LegoEntity* p_entity);
|
|
MxU32 GetBuildingEntityId(LegoEntity* p_entity);
|
|
MxU32 FUN_1002ff40(LegoEntity*, MxBool);
|
|
MxBool FUN_10030000(LegoEntity* p_entity);
|
|
MxBool FUN_10030030(MxS32 p_index);
|
|
MxBool FUN_10030110(LegoBuildingInfo* p_data);
|
|
void ScheduleAnimation(LegoEntity*, MxU32 p_length, MxBool p_haveSound, MxBool);
|
|
void FUN_10030590();
|
|
void AdjustHeight(MxS32 p_index);
|
|
MxResult FUN_10030630();
|
|
LegoBuildingInfo* GetInfoArray(int* p_length);
|
|
void FUN_100307b0(LegoEntity*, MxS32);
|
|
static void FUN_10030800();
|
|
|
|
// SYNTHETIC: LEGO1 0x1002f940
|
|
// LegoBuildingManager::`scalar deleting destructor'
|
|
|
|
struct AnimEntry {
|
|
LegoEntity* m_entity;
|
|
LegoROI* m_roi;
|
|
LegoTime m_time;
|
|
float m_float;
|
|
MxBool m_muted;
|
|
};
|
|
|
|
private:
|
|
static char* g_customizeAnimFile;
|
|
|
|
MxU8 m_nextVariant; // 0x08
|
|
MxU8 m_unk0x09; // 0x09
|
|
AnimEntry* m_entries[5]; // 0x0c
|
|
MxS8 m_numEntries; // 0x20
|
|
LegoCacheSound* m_sound; // 0x24
|
|
MxBool m_unk0x28; // 0x28
|
|
LegoWorld* m_world; // 0x2c
|
|
};
|
|
|
|
#endif // LEGOBUILDINGMANAGER_H
|