#ifndef ISLEPATHACTOR_H #define ISLEPATHACTOR_H #include "legogamestate.h" #include "legopathactor.h" #include "mxtypes.h" #include "roi/legoroi.h" class LegoControlManagerNotificationParam; class LegoEndAnimNotificationParam; class LegoWorld; class LegoPathStructNotificationParam; // VTABLE: LEGO1 0x100d4398 // SIZE 0x160 class IslePathActor : public LegoPathActor { public: enum { c_LOCATIONS_NUM = 29 }; enum { c_spawnBit1 = 0x01, c_playMusic = 0x02, c_spawnBit3 = 0x04 }; // SIZE 0x38 struct SpawnLocation { SpawnLocation() {} // FUNCTION: LEGO1 0x1001b1b0 SpawnLocation( LegoGameState::Area p_area, MxAtomId* p_script, MxS32 p_entityId, const char* p_name, MxS16 p_src, float p_srcScale, MxS16 p_dest, float p_destScale, MxU32 p_location, JukeboxScript::Script p_music ) { m_area = p_area; m_script = p_script; m_entityId = p_entityId; strcpy(m_name, p_name); m_src = p_src; m_srcScale = p_srcScale; m_dest = p_dest; m_destScale = p_destScale; m_location = p_location; m_music = p_music; } // FUNCTION: LEGO1 0x1001b230 SpawnLocation& operator=(const SpawnLocation& p_location) { m_area = p_location.m_area; m_script = p_location.m_script; m_entityId = p_location.m_entityId; strcpy(m_name, p_location.m_name); m_src = p_location.m_src; m_srcScale = p_location.m_srcScale; m_dest = p_location.m_dest; m_destScale = p_location.m_destScale; m_location = p_location.m_location; m_music = p_location.m_music; return *this; } LegoGameState::Area m_area; // 0x00 MxAtomId* m_script; // 0x04 MxS32 m_entityId; // 0x08 char m_name[20]; // 0x0c MxS16 m_src; // 0x20 float m_srcScale; // 0x24 MxS16 m_dest; // 0x28 float m_destScale; // 0x2c MxU32 m_location; // 0x30 JukeboxScript::Script m_music; // 0x34 }; IslePathActor(); // FUNCTION: LEGO1 0x10002e10 inline ~IslePathActor() override { IslePathActor::Destroy(TRUE); } MxLong Notify(MxParam& p_param) override; // vtable+0x04 // FUNCTION: LEGO1 0x10002ea0 inline const char* ClassName() const override // vtable+0x0c { // STRING: LEGO1 0x100f0104 return "IslePathActor"; } // FUNCTION: LEGO1 0x10002eb0 inline MxBool IsA(const char* p_name) const override // vtable+0x10 { return !strcmp(p_name, IslePathActor::ClassName()) || LegoPathActor::IsA(p_name); } MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c // FUNCTION: LEGO1 0x10002e70 virtual MxLong HandleClick() { return 0; } // vtable+0xcc // FUNCTION: LEGO1 0x10002df0 virtual MxLong HandleNotification0() { return 0; } // vtable+0xd0 // FUNCTION: LEGO1 0x10002e80 virtual MxLong HandleControl(LegoControlManagerNotificationParam&) { return 0; } // vtable+0xd4 // FUNCTION: LEGO1 0x10002e90 virtual MxLong HandleEndAnim(LegoEndAnimNotificationParam&) { return 0; } // vtable+0xd8 // FUNCTION: LEGO1 0x10002e00 virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&) { return 0; } // vtable+0xdc virtual void Enter(); // vtable+0xe0 virtual void Exit(); // vtable+0xe4 virtual void SpawnPlayer(LegoGameState::Area p_area, MxBool p_enter, MxU8 p_flags); // vtable+0xe8 virtual void VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset); // vtable+0xec // SYNTHETIC: LEGO1 0x10002ff0 // IslePathActor::`scalar deleting destructor' void FUN_1001b660(); void Reset() { m_roi->SetVisibility(TRUE); SetState(0); } static void RegisterSpawnLocations(); protected: LegoWorld* m_world; // 0x154 LegoPathActor* m_previousActor; // 0x158 MxFloat m_previousVel; // 0x15c }; #endif // ISLEPATHACTOR_H