mirror of https://github.com/AxioDL/metaforce.git
parent
4568b2e3f6
commit
08a8dd7eeb
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "Runtime/CStateManager.hpp"
|
#include "Runtime/CStateManager.hpp"
|
||||||
#include "Runtime/Collision/CCollidableOBBTreeGroup.hpp"
|
#include "Runtime/Collision/CCollidableOBBTreeGroup.hpp"
|
||||||
|
#include "Runtime/Collision/CGameCollision.hpp"
|
||||||
#include "Runtime/Weapon/CPlayerGun.hpp"
|
#include "Runtime/Weapon/CPlayerGun.hpp"
|
||||||
#include "Runtime/World/CActorParameters.hpp"
|
#include "Runtime/World/CActorParameters.hpp"
|
||||||
#include "Runtime/World/CPlayer.hpp"
|
#include "Runtime/World/CPlayer.hpp"
|
||||||
|
@ -148,4 +149,39 @@ CRipperControlledPlatform::CRipperControlledPlatform(
|
||||||
active, CHealthInfo(FLT_MAX, 10.f), CDamageVulnerability::ImmuneVulnerabilty(), colTree, false, 1, 1)
|
active, CHealthInfo(FLT_MAX, 10.f), CDamageVulnerability::ImmuneVulnerabilty(), colTree, false, 1, 1)
|
||||||
, x358_owner(owner)
|
, x358_owner(owner)
|
||||||
, x35c_yaw(GetYaw()) {}
|
, x35c_yaw(GetYaw()) {}
|
||||||
|
|
||||||
|
constexpr float RCP_2PI = 0.15915494f;
|
||||||
|
constexpr float M_2PI = 6.2831855f;
|
||||||
|
|
||||||
|
zeus::CQuaternion CRipperControlledPlatform::Move(float arg, CStateManager& mgr) {
|
||||||
|
if (const auto* actor = static_cast<CActor*>(mgr.ObjectById(x358_owner))) {
|
||||||
|
MoveToWR(GetTranslation() + (actor->GetTranslation() - GetTranslation()), arg);
|
||||||
|
float yawDiff = actor->GetYaw() - x35c_yaw;
|
||||||
|
float zRot = yawDiff - static_cast<float>(static_cast<int>(yawDiff * RCP_2PI)) * M_2PI;
|
||||||
|
if (zRot < 0.f) {
|
||||||
|
zRot += M_2PI;
|
||||||
|
}
|
||||||
|
if (zRot > M_PIF) {
|
||||||
|
zRot -= M_2PI;
|
||||||
|
}
|
||||||
|
const auto quat = zeus::CQuaternion::fromAxisAngle({0.0f, 0.0f, 1.0f}, zRot);
|
||||||
|
RotateToOR(quat, arg);
|
||||||
|
|
||||||
|
rstl::reserved_vector<TUniqueId, 1024> nearList;
|
||||||
|
rstl::reserved_vector<TUniqueId, 1024> filteredNearList;
|
||||||
|
mgr.BuildColliderList(nearList, *this, GetMotionVolume(arg));
|
||||||
|
for (const TUniqueId id : nearList) {
|
||||||
|
if (!IsRider(id) && !IsSlave(id)) {
|
||||||
|
filteredNearList.push_back(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xf8_24_movable = true;
|
||||||
|
CGameCollision::Move(mgr, *this, arg, &filteredNearList);
|
||||||
|
xf8_24_movable = false;
|
||||||
|
x35c_yaw = GetYaw();
|
||||||
|
return quat;
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
} // namespace urde::MP1
|
} // namespace urde::MP1
|
||||||
|
|
|
@ -46,5 +46,7 @@ class CRipperControlledPlatform : public CScriptPlatform {
|
||||||
public:
|
public:
|
||||||
CRipperControlledPlatform(TUniqueId, TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&,
|
CRipperControlledPlatform(TUniqueId, TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&,
|
||||||
const zeus::CAABox&, bool, const std::optional<TLockedToken<CCollidableOBBTreeGroup>>&);
|
const zeus::CAABox&, bool, const std::optional<TLockedToken<CCollidableOBBTreeGroup>>&);
|
||||||
|
|
||||||
|
zeus::CQuaternion Move(float, CStateManager &) override;
|
||||||
};
|
};
|
||||||
} // namespace urde::MP1
|
} // namespace urde::MP1
|
||||||
|
|
Loading…
Reference in New Issue