2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 05:07:43 +00:00

More AutoMapper imps (CMapArea and CMappableObject)

This commit is contained in:
2016-07-30 18:43:34 -07:00
parent df4ce27240
commit 4541234706
8 changed files with 158 additions and 13 deletions

View File

@@ -1,15 +1,67 @@
#include "CMappableObject.hpp"
#include "GameGlobalObjects.hpp"
#include "ITweakAutoMapper.hpp"
namespace urde
{
const zeus::CVector3f CMappableObject::skDoorVerts[8] = {};
zeus::CTransform CMappableObject::AdjustTransformForType()
{
/* TODO - Phil: Finish this */
float doorCenterX = g_tweakAutoMapper->GetDoorCenter().x;
float doorCenterY = g_tweakAutoMapper->GetDoorCenter().y;
if (x0_ == EMappableObjectType::BigDoor1)
{
}
else if (x0_ == EMappableObjectType::BigDoor2)
{
}
else if (x0_ == EMappableObjectType::IceDoorCeiling || x0_ == EMappableObjectType::WaveDoorCeiling
|| x0_ == EMappableObjectType::Eleven)
{
}
else if (x0_ == EMappableObjectType::IceDoorCeiling || x0_ == EMappableObjectType::WaveDoorFloor
|| x0_ == EMappableObjectType::Twelve)
{
}
else if (EMappableObjectType(u32(x0_) - u32(EMappableObjectType::IceDoorFloor2)) <= EMappableObjectType::ShieldDoor
|| x0_ == EMappableObjectType::Fifteen)
{
}
return x10_;
}
void CMappableObject::PostConstruct(const void *)
{
#if __BYTE_ORDER__!= __ORDER_BIG_ENDIAN__
x0_ = EMappableObjectType(SBIG(u32(x0_)));
x4_ = SBIG(x4_);
x8_ = SBIG(x8_);
xc_ = SBIG(xc_);
for (u32 i = 0 ; i<3 ; i++)
{
for (u32 j = 0 ; j<4 ; j++)
{
u32* tmp = reinterpret_cast<u32*>(&x10_.basis.m[i][j]);
*tmp = SBIG(*tmp);
}
}
#endif
x10_.origin.x = x10_.basis.m[0][3];
x10_.origin.y = x10_.basis.m[1][3];
x10_.origin.z = x10_.basis.m[2][3];
x10_.basis.transpose();
x10_ = AdjustTransformForType();
}
void CMappableObject::ReadAutoMapperTweaks(const ITweakAutoMapper& tweaks)
{
const zeus::CVector3f& center = tweaks.GetDoorCenter();
/* Ugly hack, but necessary */
zeus::CVector3f* doorVerts = (zeus::CVector3f*)CMappableObject::skDoorVerts;
zeus::CVector3f* doorVerts = const_cast<zeus::CVector3f*>(&CMappableObject::skDoorVerts[0]);
/* Wrap door verts around -Z to build surface */
doorVerts[0].assign( -center.z, -center.y, 0.f);
doorVerts[1].assign( -center.z, -center.y, 2.f * center.x);