mirror of
https://github.com/isledecomp/isle.git
synced 2025-02-16 19:50:15 -05:00
Implement/match LegoEntity::SetWorldTransform and ResetWorldTransform (#632)
* Implement/match LegoEntity::SetWorldTransform and ResetWorldTransform * Add param name
This commit is contained in:
parent
8ecae549df
commit
71bcd4c771
4 changed files with 50 additions and 16 deletions
|
@ -37,12 +37,16 @@ public:
|
||||||
return !strcmp(p_name, LegoEntity::ClassName()) || MxEntity::IsA(p_name);
|
return !strcmp(p_name, LegoEntity::ClassName()) || MxEntity::IsA(p_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual MxResult Create(MxDSAction& p_dsAction); // vtable+0x18
|
virtual MxResult Create(MxDSAction& p_dsAction); // vtable+0x18
|
||||||
virtual void Destroy(MxBool p_fromDestructor); // vtable+0x1c
|
virtual void Destroy(MxBool p_fromDestructor); // vtable+0x1c
|
||||||
virtual void ParseAction(char*); // vtable+0x20
|
virtual void ParseAction(char* p_extra); // vtable+0x20
|
||||||
virtual void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2); // vtable+0x24
|
virtual void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2); // vtable+0x24
|
||||||
virtual void SetWorldTransform(const Vector3& p_loc, const Vector3& p_dir, const Vector3& p_up); // vtable+0x28
|
virtual void SetWorldTransform(
|
||||||
virtual void ResetWorldTransform(MxBool p_inVehicle); // vtable+0x2c
|
const Vector3& p_location,
|
||||||
|
const Vector3& p_direction,
|
||||||
|
const Vector3& p_up
|
||||||
|
); // vtable+0x28
|
||||||
|
virtual void ResetWorldTransform(MxBool p_cameraFlag); // vtable+0x2c
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10001090
|
// FUNCTION: LEGO1 0x10001090
|
||||||
virtual void SetWorldSpeed(MxFloat p_worldSpeed) { m_worldSpeed = p_worldSpeed; } // vtable+0x30
|
virtual void SetWorldSpeed(MxFloat p_worldSpeed) { m_worldSpeed = p_worldSpeed; } // vtable+0x30
|
||||||
|
|
|
@ -105,8 +105,8 @@
|
||||||
class LegoObjectFactory : public MxObjectFactory {
|
class LegoObjectFactory : public MxObjectFactory {
|
||||||
public:
|
public:
|
||||||
LegoObjectFactory();
|
LegoObjectFactory();
|
||||||
MxCore* Create(const char* p_name) override; // vtable 0x14
|
MxCore* Create(const char* p_name) override; // vtable+0x14
|
||||||
void Destroy(MxCore* p_object) override; // vtable 0x18
|
void Destroy(MxCore* p_object) override; // vtable+0x18
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x10009000
|
// SYNTHETIC: LEGO1 0x10009000
|
||||||
// LegoObjectFactory::`scalar deleting destructor'
|
// LegoObjectFactory::`scalar deleting destructor'
|
||||||
|
|
|
@ -25,16 +25,45 @@ void LegoEntity::Init()
|
||||||
m_unk0x59 = 4;
|
m_unk0x59 = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10010650
|
// FUNCTION: LEGO1 0x10010650
|
||||||
void LegoEntity::ResetWorldTransform(MxBool p_inVehicle)
|
void LegoEntity::ResetWorldTransform(MxBool p_cameraFlag)
|
||||||
{
|
{
|
||||||
// TODO
|
LegoWorld* world = CurrentWorld();
|
||||||
|
|
||||||
|
if (world != NULL && world->GetCamera() != NULL) {
|
||||||
|
m_cameraFlag = p_cameraFlag;
|
||||||
|
|
||||||
|
if (m_cameraFlag) {
|
||||||
|
world->GetCamera()->SetEntity(this);
|
||||||
|
world->GetCamera()->SetWorldTransform(
|
||||||
|
Mx3DPointFloat(0.0F, 1.25F, 0.0F),
|
||||||
|
Mx3DPointFloat(0.0F, 0.0F, 1.0F),
|
||||||
|
Mx3DPointFloat(0.0F, 1.0F, 0.0F)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (world->GetCamera()->GetEntity() == this) {
|
||||||
|
world->GetCamera()->SetEntity(NULL);
|
||||||
|
world->GetCamera()->SetWorldTransform(
|
||||||
|
Mx3DPointFloat(0.0F, 0.0F, 0.0F),
|
||||||
|
Mx3DPointFloat(0.0F, 0.0F, 1.0F),
|
||||||
|
Mx3DPointFloat(0.0F, 1.0F, 0.0F)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10010790
|
// FUNCTION: LEGO1 0x10010790
|
||||||
void LegoEntity::SetWorldTransform(const Vector3& p_loc, const Vector3& p_dir, const Vector3& p_up)
|
void LegoEntity::SetWorldTransform(const Vector3& p_location, const Vector3& p_direction, const Vector3& p_up)
|
||||||
{
|
{
|
||||||
// TODO
|
LegoWorld* world = CurrentWorld();
|
||||||
|
|
||||||
|
if (world != NULL && world->GetCamera() != NULL) {
|
||||||
|
m_cameraFlag = TRUE;
|
||||||
|
world->GetCamera()->SetEntity(this);
|
||||||
|
world->GetCamera()->SetWorldTransform(p_location, p_direction, p_up);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100107e0
|
// FUNCTION: LEGO1 0x100107e0
|
||||||
|
@ -71,6 +100,7 @@ void LegoEntity::Destroy(MxBool p_fromDestructor)
|
||||||
void LegoEntity::SetWorld()
|
void LegoEntity::SetWorld()
|
||||||
{
|
{
|
||||||
LegoWorld* world = CurrentWorld();
|
LegoWorld* world = CurrentWorld();
|
||||||
|
|
||||||
if (world != NULL && world != (LegoWorld*) this) {
|
if (world != NULL && world != (LegoWorld*) this) {
|
||||||
world->Add(this);
|
world->Add(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,8 +36,8 @@ public:
|
||||||
return !strcmp(p_name, MxObjectFactory::ClassName()) || MxCore::IsA(p_name);
|
return !strcmp(p_name, MxObjectFactory::ClassName()) || MxCore::IsA(p_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual MxCore* Create(const char* p_name); // vtable 0x14
|
virtual MxCore* Create(const char* p_name); // vtable+0x14
|
||||||
virtual void Destroy(MxCore* p_object); // vtable 0x18
|
virtual void Destroy(MxCore* p_object); // vtable+0x18
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100b1160
|
// SYNTHETIC: LEGO1 0x100b1160
|
||||||
// MxObjectFactory::`scalar deleting destructor'
|
// MxObjectFactory::`scalar deleting destructor'
|
||||||
|
|
Loading…
Reference in a new issue