metaforce/Runtime/Character/CSteeringBehaviors.cpp

39 lines
1.2 KiB
C++
Raw Normal View History

#include "CSteeringBehaviors.hpp"
namespace urde
{
2017-08-20 05:23:22 +00:00
zeus::CVector3f
CSteeringBehaviors::ProjectOrbitalPosition(const zeus::CVector3f& pos, const zeus::CVector3f& vel,
const zeus::CVector3f& orbitPoint, float dt, float preThinkDt)
{
2017-08-20 05:23:22 +00:00
zeus::CVector3f usePos = pos;
if (vel.canBeNormalized())
{
zeus::CVector3f pointToPos = pos - orbitPoint;
pointToPos.z = 0.f;
if (pointToPos.canBeNormalized())
{
zeus::CVector3f useVel = vel;
pointToPos.normalize();
float f29 = pointToPos.dot(useVel);
float f30 = pointToPos.cross(zeus::CVector3f::skUp).dot(useVel);
for (float curDt = 0.f ; curDt < dt ;)
{
usePos += preThinkDt * useVel;
zeus::CVector3f usePointToPos = usePos - orbitPoint;
usePointToPos.z = 0.f;
if (usePointToPos.canBeNormalized())
{
usePointToPos.normalize();
useVel = usePointToPos.cross(zeus::CVector3f::skUp) * f30 + usePointToPos * f29;
}
curDt += std::min(dt - curDt, preThinkDt);
}
}
}
return usePos;
}
}