mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-05-01 18:13:57 +00:00
Some checks failed
CI / clang-format (push) Has been cancelled
CI / ${{ matrix.name }} (false, --toolchain /usr/local/vitasdk/share/vita.toolchain.cmake, false, false, Ninja, Vita, ubuntu-latest, true, true) (push) Has been cancelled
CI / ${{ matrix.name }} (false, -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.26100.0, false, false, Visual Studio 17 2022, true, Xbox One, windows-latest, amd64, false, true) (push) Has been cancelled
CI / ${{ matrix.name }} (false, -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/3DS.cmake, false, devkitpro/devkitarm:latest, false, Ninja, true, Nintendo 3DS, ubuntu-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (false, -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake, false, devkitpro/devkita64:latest, false, Ninja, Nintendo Switch, true, ubuntu-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (false, emcmake, false, false, true, Ninja, Emscripten, ubuntu-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (false, false, false, Ninja, true, MSVC (arm64), windows-latest, amd64_arm64, false) (push) Has been cancelled
CI / ${{ matrix.name }} (false, false, true, Ninja, true, MSVC (x86), windows-latest, amd64_x86, false) (push) Has been cancelled
CI / ${{ matrix.name }} (false, true, false, Ninja, true, MSVC (x64), windows-latest, amd64, false) (push) Has been cancelled
CI / ${{ matrix.name }} (false, true, true, false, Ninja, true, MSVC (x64 Debug), windows-latest, amd64, false) (push) Has been cancelled
CI / ${{ matrix.name }} (true, false, -DCMAKE_SYSTEM_NAME=iOS, false, false, Xcode, true, iOS, macos-15, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, false, false, false, Ninja, Android, ubuntu-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, false, true, false, Ninja, macOS, macos-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, true, false, Ninja, true, mingw-w64-x86_64, mingw64, msys2 mingw64, windows-latest, msys2 {0}, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, true, true, false, Ninja, true, Linux (Debug), ubuntu-latest, true) (push) Has been cancelled
CI / ${{ matrix.name }} (true, true, true, false, Ninja, true, Linux, ubuntu-latest, true) (push) Has been cancelled
CI / Flatpak (${{ matrix.arch }}) (aarch64, ubuntu-22.04-arm) (push) Has been cancelled
CI / Flatpak (${{ matrix.arch }}) (x86_64, ubuntu-latest) (push) Has been cancelled
CI / C++ (push) Has been cancelled
Docker / Publish web port (push) Has been cancelled
CI / Release (push) Has been cancelled
Introduces a third person camera system with orbit camera, input handling (mouse/keyboard/touch/gamepad), display actor cloning, and camera-relative movement. Includes shared character utilities (animator, cloner, customizer) and an IExtraAnimHandler interface for optional animation extensions. Also includes generic base game fixes and extension system improvements.
151 lines
4.1 KiB
C++
151 lines
4.1 KiB
C++
#ifndef ISLEPATHACTOR_H
|
|
#define ISLEPATHACTOR_H
|
|
|
|
#include "extensions/fwd.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
|
|
// VTABLE: BETA10 0x101b9090
|
|
// 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 {
|
|
// FUNCTION: LEGO1 0x1001a6f0
|
|
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 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 UpdateWorld(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset); // vtable+0xec
|
|
|
|
// FUNCTION: LEGO1 0x10002e10
|
|
~IslePathActor() override { IslePathActor::Destroy(TRUE); }
|
|
|
|
MxLong Notify(MxParam& p_param) override; // vtable+0x04
|
|
|
|
// FUNCTION: LEGO1 0x10002ea0
|
|
// FUNCTION: BETA10 0x10023fa0
|
|
const char* ClassName() const override // vtable+0x0c
|
|
{
|
|
// STRING: LEGO1 0x100f0104
|
|
return "IslePathActor";
|
|
}
|
|
|
|
// FUNCTION: LEGO1 0x10002eb0
|
|
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
|
|
|
|
void TurnAround();
|
|
|
|
void SetWorld(LegoWorld* p_world) { m_world = p_world; }
|
|
|
|
static void RegisterSpawnLocations();
|
|
|
|
// SYNTHETIC: LEGO1 0x10002ff0
|
|
// IslePathActor::`scalar deleting destructor'
|
|
|
|
protected:
|
|
friend class Extensions::ThirdPersonCamera::Controller;
|
|
|
|
LegoWorld* m_world; // 0x154
|
|
LegoPathActor* m_previousActor; // 0x158
|
|
MxFloat m_previousVel; // 0x15c
|
|
};
|
|
|
|
#endif // ISLEPATHACTOR_H
|