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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user