mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-26 09:41: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.
185 lines
6.6 KiB
C++
185 lines
6.6 KiB
C++
#ifndef LEGOWORLD_H
|
|
#define LEGOWORLD_H
|
|
|
|
#include "legocachesoundlist.h"
|
|
#include "legoentity.h"
|
|
#include "legoentitylist.h"
|
|
#include "legopathcontrollerlist.h"
|
|
#include "mxpresenterlist.h"
|
|
#include "roi/legoroi.h"
|
|
|
|
class IslePathActor;
|
|
class LegoCameraController;
|
|
class LegoPathBoundary;
|
|
class LegoHideAnimPresenter;
|
|
|
|
struct CoreSetCompare {
|
|
MxS32 operator()(MxCore* const& p_a, MxCore* const& p_b) const { return (MxS32) p_a < (MxS32) p_b; }
|
|
};
|
|
|
|
typedef set<MxCore*, CoreSetCompare> MxCoreSet;
|
|
|
|
// VTABLE: LEGO1 0x100d6280
|
|
// SIZE 0xf8
|
|
class LegoWorld : public LegoEntity {
|
|
public:
|
|
enum StartupTicks {
|
|
e_start = 0,
|
|
e_one,
|
|
e_two,
|
|
e_three,
|
|
e_four
|
|
};
|
|
|
|
LegoWorld();
|
|
~LegoWorld() override; // vtable+0x00
|
|
|
|
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
|
MxResult Tickle() override; // vtable+0x08
|
|
|
|
// FUNCTION: LEGO1 0x1001d690
|
|
inline const char* ClassName() const override // vtable+0x0c
|
|
{
|
|
// STRING: LEGO1 0x100f0058
|
|
return "LegoWorld";
|
|
}
|
|
|
|
// FUNCTION: LEGO1 0x1001d6a0
|
|
inline MxBool IsA(const char* p_name) const override // vtable+0x10
|
|
{
|
|
return !strcmp(p_name, LegoWorld::ClassName()) || LegoEntity::IsA(p_name);
|
|
}
|
|
|
|
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
|
|
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
|
|
virtual void ReadyWorld(); // vtable+0x50
|
|
virtual LegoCameraController* VTable0x54(); // vtable+0x54
|
|
virtual void Add(MxCore* p_object); // vtable+0x58
|
|
virtual MxBool VTable0x5c(); // vtable+0x5c
|
|
|
|
// FUNCTION: LEGO1 0x100010a0
|
|
virtual void VTable0x60() {} // vtable+0x60
|
|
|
|
virtual MxBool VTable0x64(); // vtable+0x64
|
|
virtual void Enable(MxBool p_enable); // vtable+0x68
|
|
|
|
MxBool PresentersPending();
|
|
void Remove(MxCore* p_object);
|
|
MxResult FUN_1001f720(
|
|
IslePathActor* p_actor,
|
|
const char* p_path,
|
|
MxS32 p_src,
|
|
float p_srcScale,
|
|
MxS32 p_dest,
|
|
float p_destScale
|
|
);
|
|
undefined4 FUN_1001fa70(IslePathActor* p_actor);
|
|
undefined4 FUN_1001fb70(
|
|
IslePathActor* p_actor,
|
|
LegoAnimPresenter* p_presenter,
|
|
Vector3& p_position,
|
|
Vector3& p_direction
|
|
);
|
|
void FUN_1001fc80(IslePathActor* p_actor);
|
|
void FUN_1001fda0(LegoAnimPresenter* p_presenter);
|
|
void FUN_1001fe90(LegoAnimPresenter* p_presenter);
|
|
LegoPathBoundary* FindPathBoundary(const char* p_name);
|
|
void AddPath(LegoPathController* p_controller);
|
|
MxResult GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value);
|
|
MxCore* Find(const char* p_class, const char* p_name);
|
|
MxCore* Find(const MxAtomId& p_atom, MxS32 p_entityId);
|
|
|
|
inline LegoCameraController* GetCamera() { return m_cameraController; }
|
|
inline MxS32 GetScriptIndex() { return m_scriptIndex; }
|
|
inline MxCoreSet& GetUnknown0xd0() { return m_set0xd0; }
|
|
inline list<LegoROI*>& GetROIList() { return m_roiList; }
|
|
|
|
inline void SetScriptIndex(MxS32 p_scriptIndex) { m_scriptIndex = p_scriptIndex; }
|
|
|
|
// SYNTHETIC: LEGO1 0x1001dee0
|
|
// LegoWorld::`scalar deleting destructor'
|
|
|
|
protected:
|
|
LegoPathControllerList m_list0x68; // 0x68
|
|
MxPresenterList m_animPresenters; // 0x80
|
|
LegoCameraController* m_cameraController; // 0x98
|
|
LegoEntityList* m_entityList; // 0x9c
|
|
LegoCacheSoundList* m_cacheSoundList; // 0xa0
|
|
MxBool m_destroyed; // 0xa4
|
|
MxCoreSet m_set0xa8; // 0xa8
|
|
MxPresenterList m_controlPresenters; // 0xb8
|
|
MxCoreSet m_set0xd0; // 0xd0
|
|
list<LegoROI*> m_roiList; // 0xe0
|
|
MxS32 m_scriptIndex; // 0xec
|
|
LegoHideAnimPresenter* m_hideAnimPresenter; // 0xf0
|
|
MxS16 m_startupTicks; // 0xf4
|
|
MxBool m_worldStarted; // 0xf6
|
|
undefined m_unk0xf7; // 0xf7
|
|
};
|
|
|
|
// clang-format off
|
|
// TEMPLATE: LEGO1 0x1001d780
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::~_Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >
|
|
|
|
// TEMPLATE: LEGO1 0x1001d850
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::iterator::_Inc
|
|
|
|
// TEMPLATE: LEGO1 0x1001d890
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::erase
|
|
|
|
// TEMPLATE: LEGO1 0x1001dcf0
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Erase
|
|
|
|
// TEMPLATE: LEGO1 0x1001dd30
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Init
|
|
|
|
// TEMPLATE: LEGO1 0x1001ddf0
|
|
// list<LegoROI *,allocator<LegoROI *> >::~list<LegoROI *,allocator<LegoROI *> >
|
|
|
|
// TEMPLATE: LEGO1 0x1001df50
|
|
// List<LegoROI *>::~List<LegoROI *>
|
|
|
|
// TEMPLATE: LEGO1 0x1001de60
|
|
// list<LegoROI *,allocator<LegoROI *> >::_Buynode
|
|
|
|
// TEMPLATE: LEGO1 0x1001de90
|
|
// set<MxCore *,CoreSetCompare,allocator<MxCore *> >::~set<MxCore *,CoreSetCompare,allocator<MxCore *> >
|
|
|
|
// TEMPLATE: LEGO1 0x1001df00
|
|
// Set<MxCore *,CoreSetCompare>::~Set<MxCore *,CoreSetCompare>
|
|
|
|
// TEMPLATE: LEGO1 0x1001f590
|
|
// list<LegoROI *,allocator<LegoROI *> >::erase
|
|
|
|
// TEMPLATE: LEGO1 0x100208b0
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::insert
|
|
|
|
// TEMPLATE: LEGO1 0x10020b20
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::iterator::_Dec
|
|
|
|
// XTEMPLATE LEGO1 0x10020b70
|
|
|
|
// TEMPLATE: LEGO1 0x10020bb0
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Buynode
|
|
|
|
// TEMPLATE: LEGO1 0x10020bd0
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Insert
|
|
|
|
// TEMPLATE: LEGO1 0x10020e50
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Lrotate
|
|
|
|
// TEMPLATE: LEGO1 0x10020eb0
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Rrotate
|
|
|
|
// TEMPLATE: LEGO1 0x10021340
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::find
|
|
|
|
// TEMPLATE: LEGO1 0x10022360
|
|
// ?_Construct@@YAXPAPAVMxCore@@ABQAV1@@Z
|
|
|
|
// GLOBAL: LEGO1 0x100f11a0
|
|
// _Tree<MxCore *,MxCore *,set<MxCore *,CoreSetCompare,allocator<MxCore *> >::_Kfn,CoreSetCompare,allocator<MxCore *> >::_Nil
|
|
// clang-format on
|
|
|
|
#endif // LEGOWORLD_H
|