2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-08 13:44:56 +00:00

Fixes in ANIM cooking

This commit is contained in:
Jack Andersen
2019-06-15 16:22:23 -10:00
parent 37307e1cf6
commit 87023b432e
6 changed files with 47 additions and 41 deletions

View File

@@ -63,24 +63,25 @@ void CFlameWarp::ModifyParticles(std::vector<CParticle>& particles) {
std::sort(vec.begin(), vec.end(), [](auto& a, auto& b) { return a.first < b.first; });
int pitch = particles.size() / 9;
for (int i = 0; i < 9; ++i) {
CParticle& part = particles[vec[i].second];
x4_points[i] = part.x4_pos;
CParticle& part = particles[vec[i * pitch].second];
x4_collisionPoints[i] = part.x4_pos;
if (i > 0) {
zeus::CVector3f delta = x4_points[i] - x4_points[i - 1];
zeus::CVector3f delta = x4_collisionPoints[i] - x4_collisionPoints[i - 1];
if (delta.magnitude() < 0.0011920929f)
x4_points[i] += delta.normalized() * 0.0011920929f;
x4_collisionPoints[i] += delta.normalized() * 0.0011920929f;
}
}
x4_points[0] = x74_warpPoint;
x80_floatingPoint = x4_points[8];
x4_collisionPoints[0] = x74_warpPoint;
x80_floatingPoint = x4_collisionPoints[8];
xa0_26_processed = true;
}
zeus::CAABox CFlameWarp::CalculateBounds() const {
zeus::CAABox ret;
for (const auto& v : x4_points)
for (const auto& v : x4_collisionPoints)
ret.accumulateBounds(v);
return ret;
}

View File

@@ -6,7 +6,7 @@ namespace urde {
class CStateManager;
class CFlameWarp : public CWarp {
rstl::reserved_vector<zeus::CVector3f, 9> x4_points;
rstl::reserved_vector<zeus::CVector3f, 9> x4_collisionPoints;
zeus::CVector3f x74_warpPoint;
zeus::CVector3f x80_floatingPoint;
float x8c_maxDistSq = 0.f;
@@ -23,13 +23,13 @@ public:
: x74_warpPoint(warpPoint)
, x80_floatingPoint(warpPoint)
, x98_maxInfluenceDistSq(maxInfluenceDist * maxInfluenceDist) {
x4_points.resize(9, warpPoint);
x4_collisionPoints.resize(9, warpPoint);
xa0_24_activated = false;
xa0_25_collisionWarp = collisionWarp;
xa0_26_processed = false;
}
const rstl::reserved_vector<zeus::CVector3f, 9>& GetPoints() const { return x4_points; }
const rstl::reserved_vector<zeus::CVector3f, 9>& GetCollisionPoints() const { return x4_collisionPoints; }
float GetMinSize() const { return x90_minSize; }
float GetMaxSize() const { return x94_maxSize; }
void SetWarpPoint(const zeus::CVector3f& p) { x74_warpPoint = p; }
@@ -44,7 +44,7 @@ public:
bool IsProcessed() const { return xa0_26_processed; }
FourCC Get4CharID() { return FOURCC('FWRP'); }
void ResetPosition(const zeus::CVector3f& pos) {
for (auto& vec : x4_points) {
for (auto& vec : x4_collisionPoints) {
vec = pos;
}
xa0_26_processed = false;