prime/src/MetroidPrime/Enemies/CRipperControlledPlatform.cpp
Henrique Gemignani Passos Lima cd46490a6c Match and link CRipperControlledPlatform
Former-commit-id: f0840951902345139a00fd18d9b1c8168d50e42c
2022-11-07 15:30:53 +02:00

53 lines
1.9 KiB
C++

#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() {}