mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-12-09 18:27:41 +00:00
Match and link CRipperControlledPlatform
This commit is contained in:
52
src/MetroidPrime/Enemies/CRipperControlledPlatform.cpp
Normal file
52
src/MetroidPrime/Enemies/CRipperControlledPlatform.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#include "MetroidPrime/Enemies/CRipperControlledPlatform.hpp"
|
||||
|
||||
#include "MetroidPrime/CActorParameters.hpp"
|
||||
#include "MetroidPrime/CGameCollision.hpp"
|
||||
|
||||
#include "Kyoto/Math/CRelAngle.hpp"
|
||||
|
||||
CRipperControlledPlatform::CRipperControlledPlatform(
|
||||
TUniqueId uid, TUniqueId owner, const rstl::string& name, const CEntityInfo& info,
|
||||
const CTransform4f& xf, const CAABox& bounds, bool active,
|
||||
const rstl::optional_object< TLockedToken< CCollidableOBBTreeGroupContainer > >& colTree)
|
||||
: CScriptPlatform(uid, name, info, xf, CModelData::CModelDataNull(), CActorParameters::None(),
|
||||
bounds, 0.f, false, 1.f, active, CHealthInfo(FLT_MAX, 10.f),
|
||||
CDamageVulnerability::ImmuneVulnerabilty(), colTree, false, 1, 1)
|
||||
, x358_owner(owner)
|
||||
, x35c_yaw(GetYaw()) {}
|
||||
|
||||
float RCP_2PI = 0.15915494f;
|
||||
|
||||
CQuaternion CRipperControlledPlatform::Move(float arg, CStateManager& mgr) {
|
||||
if (const CActor* actor = static_cast< CActor* >(mgr.ObjectById(x358_owner))) {
|
||||
CVector3f delta = actor->GetTranslation() - GetTranslation();
|
||||
MoveToWR(GetTranslation() + delta, arg);
|
||||
|
||||
float zRot = CMath::ClampRadians(actor->GetYaw() - x35c_yaw);
|
||||
if (zRot > M_PIF) {
|
||||
zRot -= M_2PIF;
|
||||
}
|
||||
const CQuaternion quat = CQuaternion::ZRotation(CRelAngle::FromRadians(zRot));
|
||||
RotateToOR(quat, arg);
|
||||
|
||||
TEntityList nearList;
|
||||
CAABox volume(GetMotionVolume(arg));
|
||||
mgr.BuildColliderList(nearList, *this, volume);
|
||||
|
||||
TEntityList filteredNearList;
|
||||
for (TEntityList::iterator id = nearList.begin(); id != nearList.end(); ++id) {
|
||||
if (!IsRider(*id) && !IsSlave(*id)) {
|
||||
filteredNearList.push_back(*id);
|
||||
}
|
||||
}
|
||||
|
||||
SetMovable(true);
|
||||
CGameCollision::Move(mgr, *this, arg, &filteredNearList);
|
||||
SetMovable(false);
|
||||
x35c_yaw = GetYaw();
|
||||
return quat;
|
||||
}
|
||||
return CQuaternion::NoRotation();
|
||||
}
|
||||
|
||||
CRipperControlledPlatform::~CRipperControlledPlatform() {}
|
||||
Reference in New Issue
Block a user