mirror of https://github.com/AxioDL/metaforce.git
Fix CScriptEffect translation set
This commit is contained in:
parent
00a4cbdac7
commit
941c4d793c
|
@ -774,7 +774,7 @@ struct MVESwirl : IModVectorElement
|
|||
AT_DECL_DNA_YAML
|
||||
VectorElementFactory helixPoint;
|
||||
VectorElementFactory curveBinormal;
|
||||
RealElementFactory targetRadius;
|
||||
RealElementFactory filterGain;
|
||||
RealElementFactory tangentialVelocity;
|
||||
const char* ClassID() const {return "SWRL";}
|
||||
};
|
||||
|
|
|
@ -249,22 +249,13 @@ bool CMVESwirl::GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos
|
|||
x4_helixPoint->GetValue(frame, a);
|
||||
x8_curveBinormal->GetValue(frame, b);
|
||||
|
||||
/* Compute Frenet–Serret normal
|
||||
* https://en.wikipedia.org/wiki/Frenet–Serret_formulas */
|
||||
const zeus::CVector3f diff = a - pPos;
|
||||
float x = (diff.x - (((diff.z * ((diff.x * (diff.y * b.y)) + b.x)) + b.z) * b.x));
|
||||
float y = (diff.y - (((diff.z * ((diff.x * (diff.y * b.y)) + b.x)) + b.z) * b.y));
|
||||
float z = (diff.z - (((diff.z * ((diff.x * (diff.y * b.y)) + b.x)) + b.z) * b.z));
|
||||
const zeus::CVector3f posToOrigin = a - pPos;
|
||||
const zeus::CVector3f posToHelix = posToOrigin - posToOrigin.dot(b) * b;
|
||||
float c = 0.0f, d = 0.0f;
|
||||
xc_targetRadius->GetValue(frame, c);
|
||||
xc_filterGain->GetValue(frame, c);
|
||||
x10_tangentialVelocity->GetValue(frame, d);
|
||||
|
||||
/* Integrate tangential velocity by crossing particle normal with binormal,
|
||||
* also "homing" towards the target radius */
|
||||
const float f9 = (b.z * ((b.x * (b.y * pVel.y)) + pVel.x)) + pVel.x;
|
||||
pVel.x = (c * ((f9 * b.x) + (d * ((b.y * (y * b.z)) - z)))) + ((1.0 - c) * pVel.x);
|
||||
pVel.y = (c * ((f9 * b.y) + (d * ((b.z * x) - (z * b.x))))) + ((1.0 - c) * pVel.y);
|
||||
pVel.z = (c * ((f9 * b.z) + (d * ((b.x * (x * b.y)) - y)))) + ((1.0 - c) * pVel.x);
|
||||
const zeus::CVector3f wetVel = (posToHelix.cross(b) * d + b * b.dot(pVel));
|
||||
pVel = c * wetVel + (1.f - c) * pVel;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -157,13 +157,13 @@ class CMVESwirl : public CModVectorElement
|
|||
{
|
||||
std::unique_ptr<CVectorElement> x4_helixPoint;
|
||||
std::unique_ptr<CVectorElement> x8_curveBinormal;
|
||||
std::unique_ptr<CRealElement> xc_targetRadius;
|
||||
std::unique_ptr<CRealElement> xc_filterGain;
|
||||
std::unique_ptr<CRealElement> x10_tangentialVelocity;
|
||||
public:
|
||||
CMVESwirl(std::unique_ptr<CVectorElement>&& a, std::unique_ptr<CVectorElement>&& b,
|
||||
std::unique_ptr<CRealElement>&& c, std::unique_ptr<CRealElement>&& d)
|
||||
: x4_helixPoint(std::move(a)), x8_curveBinormal(std::move(b)),
|
||||
xc_targetRadius(std::move(c)), x10_tangentialVelocity(std::move(d)) {}
|
||||
xc_filterGain(std::move(c)), x10_tangentialVelocity(std::move(d)) {}
|
||||
bool GetValue(int frame, zeus::CVector3f& pVel, zeus::CVector3f& pPos) const;
|
||||
};
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ CScriptEffect::CScriptEffect(TUniqueId uid, std::string_view name, const CEntity
|
|||
zeus::CTransform newXf = xf;
|
||||
newXf.origin = zeus::CVector3f::skZero;
|
||||
x104_particleSystem->SetOrientation(newXf);
|
||||
x104_particleSystem->SetTranslation(xf.origin);
|
||||
x104_particleSystem->SetGlobalTranslation(xf.origin);
|
||||
x104_particleSystem->SetLocalScale(scale);
|
||||
x104_particleSystem->SetParticleEmission(active);
|
||||
x104_particleSystem->SetModulationColor(lParms.GetNoLightsAmbient());
|
||||
|
@ -77,7 +77,7 @@ CScriptEffect::CScriptEffect(TUniqueId uid, std::string_view name, const CEntity
|
|||
zeus::CTransform newXf = xf;
|
||||
newXf.origin = zeus::CVector3f::skZero;
|
||||
xf4_electric->SetOrientation(newXf);
|
||||
xf4_electric->SetTranslation(xf.origin);
|
||||
xf4_electric->SetGlobalTranslation(xf.origin);
|
||||
xf4_electric->SetLocalScale(scale);
|
||||
xf4_electric->SetParticleEmission(active);
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ void CScriptEffect::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CSt
|
|||
zeus::CTransform newXf = GetTransform();
|
||||
newXf.origin = zeus::CVector3f::skZero;
|
||||
x104_particleSystem->SetOrientation(newXf);
|
||||
x104_particleSystem->SetTranslation(GetTranslation());
|
||||
x104_particleSystem->SetGlobalTranslation(GetTranslation());
|
||||
x104_particleSystem->SetLocalScale(scale);
|
||||
x104_particleSystem->SetParticleEmission(oldActive);
|
||||
x104_particleSystem->SetModulationColor(color);
|
||||
|
@ -121,7 +121,7 @@ void CScriptEffect::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CSt
|
|||
zeus::CTransform newXf = GetTransform();
|
||||
newXf.origin = zeus::CVector3f::skZero;
|
||||
xf4_electric->SetOrientation(newXf);
|
||||
xf4_electric->SetTranslation(GetTranslation());
|
||||
xf4_electric->SetGlobalTranslation(GetTranslation());
|
||||
xf4_electric->SetLocalScale(scale);
|
||||
xf4_electric->SetParticleEmission(oldActive);
|
||||
xf4_electric->SetModulationColor(color);
|
||||
|
@ -291,14 +291,14 @@ void CScriptEffect::Think(float dt, CStateManager& mgr)
|
|||
zeus::CTransform newXf = x34_transform;
|
||||
newXf.origin = zeus::CVector3f::skZero;
|
||||
x104_particleSystem->SetOrientation(newXf);
|
||||
x104_particleSystem->SetTranslation(x34_transform.origin);
|
||||
x104_particleSystem->SetGlobalTranslation(x34_transform.origin);
|
||||
}
|
||||
if (xf4_electric)
|
||||
{
|
||||
zeus::CTransform newXf = x34_transform;
|
||||
newXf.origin = zeus::CVector3f::skZero;
|
||||
xf4_electric->SetOrientation(newXf);
|
||||
xf4_electric->SetTranslation(x34_transform.origin);
|
||||
xf4_electric->SetGlobalTranslation(x34_transform.origin);
|
||||
}
|
||||
|
||||
if (TCastToPtr<CActor> act = mgr.ObjectById(x108_lightId))
|
||||
|
|
Loading…
Reference in New Issue