Match CParticleDataFactory::GetModVectorElement

This commit is contained in:
2025-05-13 13:49:53 -07:00
parent 053b5c9c5e
commit 03165e3e54
2 changed files with 33 additions and 17 deletions

View File

@@ -142,7 +142,7 @@ class CMVEBounce : public CModVectorElement {
public: public:
CMVEBounce(CVectorElement* planePoint, CVectorElement* planeNormal, CRealElement* friction, CMVEBounce(CVectorElement* planePoint, CVectorElement* planeNormal, CRealElement* friction,
CRealElement* restitution, bool e); CRealElement* restitution, const bool e);
~CMVEBounce() override; ~CMVEBounce() override;
bool GetValue(int frame, CVector3f& pVel, CVector3f& pPos) const override; bool GetValue(int frame, CVector3f& pVel, CVector3f& pPos) const override;
}; };

View File

@@ -306,10 +306,12 @@ CVectorElement* CParticleDataFactory::GetVectorElement(CInputStream& in) { retur
CEmitterElement* CParticleDataFactory::GetEmitterElement(CInputStream& in) { return nullptr; } CEmitterElement* CParticleDataFactory::GetEmitterElement(CInputStream& in) { return nullptr; }
CModVectorElement* CParticleDataFactory::GetModVectorElement(CInputStream& in) { CModVectorElement* CParticleDataFactory::GetModVectorElement(CInputStream& in) {
CModVectorElement* ret;
FourCC clsId = GetClassID(in); FourCC clsId = GetClassID(in);
switch (clsId) { switch (clsId) {
case SBIG('NONE'): { case SBIG('NONE'): {
return nullptr; ret = nullptr;
break;
} }
case SBIG('CNST'): { case SBIG('CNST'): {
CRealElement* a = GetRealElement(in); CRealElement* a = GetRealElement(in);
@@ -327,40 +329,45 @@ CModVectorElement* CParticleDataFactory::GetModVectorElement(CInputStream& in) {
a->GetValue(0, bf); a->GetValue(0, bf);
a->GetValue(0, cf); a->GetValue(0, cf);
#endif #endif
CModVectorElement* result = rs_new CMVEFastConstant(af, bf, cf); ret = rs_new CMVEFastConstant(af, bf, cf);
delete a; delete a;
delete b; delete b;
delete c; delete c;
return result;
} else { } else {
return rs_new CMVEConstant(a, b, c); ret = rs_new CMVEConstant(a, b, c);
} }
break;
} }
case SBIG('GRAV'): { case SBIG('GRAV'): {
return rs_new CMVEGravity(GetVectorElement(in)); ret = rs_new CMVEGravity(GetVectorElement(in));
break;
} }
case SBIG('WIND'): { case SBIG('WIND'): {
CVectorElement* a = GetVectorElement(in); CVectorElement* a = GetVectorElement(in);
CRealElement* b = GetRealElement(in); CRealElement* b = GetRealElement(in);
return rs_new CMVEWind(a, b); ret = rs_new CMVEWind(a, b);
break;
} }
case SBIG('EXPL'): { case SBIG('EXPL'): {
CRealElement* a = GetRealElement(in); CRealElement* a = GetRealElement(in);
CRealElement* b = GetRealElement(in); CRealElement* b = GetRealElement(in);
return rs_new CMVEExplode(a, b); ret = rs_new CMVEExplode(a, b);
break;
} }
case SBIG('CHAN'): { case SBIG('CHAN'): {
CModVectorElement* a = GetModVectorElement(in); CModVectorElement* a = GetModVectorElement(in);
CModVectorElement* b = GetModVectorElement(in); CModVectorElement* b = GetModVectorElement(in);
CIntElement* c = GetIntElement(in); CIntElement* c = GetIntElement(in);
return rs_new CMVETimeChain(a, b, c); ret = rs_new CMVETimeChain(a, b, c);
break;
} }
case SBIG('PULS'): { case SBIG('PULS'): {
CIntElement* a = GetIntElement(in); CIntElement* a = GetIntElement(in);
CIntElement* b = GetIntElement(in); CIntElement* b = GetIntElement(in);
CModVectorElement* c = GetModVectorElement(in); CModVectorElement* c = GetModVectorElement(in);
CModVectorElement* d = GetModVectorElement(in); CModVectorElement* d = GetModVectorElement(in);
return rs_new CMVEPulse(a, b, c, d); ret = rs_new CMVEPulse(a, b, c, d);
break;
} }
case SBIG('IMPL'): { case SBIG('IMPL'): {
CVectorElement* a = GetVectorElement(in); CVectorElement* a = GetVectorElement(in);
@@ -368,7 +375,8 @@ CModVectorElement* CParticleDataFactory::GetModVectorElement(CInputStream& in) {
CRealElement* c = GetRealElement(in); CRealElement* c = GetRealElement(in);
CRealElement* d = GetRealElement(in); CRealElement* d = GetRealElement(in);
bool e = GetBool(in); bool e = GetBool(in);
return rs_new CMVEImplosion(a, b, c, d, e); ret = rs_new CMVEImplosion(a, b, c, d, e);
break;
} }
case SBIG('LMPL'): { case SBIG('LMPL'): {
CVectorElement* a = GetVectorElement(in); CVectorElement* a = GetVectorElement(in);
@@ -376,7 +384,8 @@ CModVectorElement* CParticleDataFactory::GetModVectorElement(CInputStream& in) {
CRealElement* c = GetRealElement(in); CRealElement* c = GetRealElement(in);
CRealElement* d = GetRealElement(in); CRealElement* d = GetRealElement(in);
bool e = GetBool(in); bool e = GetBool(in);
return rs_new CMVELinearImplosion(a, b, c, d, e); ret = rs_new CMVELinearImplosion(a, b, c, d, e);
break;
} }
case SBIG('EMPL'): { case SBIG('EMPL'): {
CVectorElement* a = GetVectorElement(in); CVectorElement* a = GetVectorElement(in);
@@ -384,14 +393,16 @@ CModVectorElement* CParticleDataFactory::GetModVectorElement(CInputStream& in) {
CRealElement* c = GetRealElement(in); CRealElement* c = GetRealElement(in);
CRealElement* d = GetRealElement(in); CRealElement* d = GetRealElement(in);
bool e = GetBool(in); bool e = GetBool(in);
return rs_new CMVEExponentialImplosion(a, b, c, d, e); ret = rs_new CMVEExponentialImplosion(a, b, c, d, e);
break;
} }
case SBIG('SWRL'): { case SBIG('SWRL'): {
CVectorElement* a = GetVectorElement(in); CVectorElement* a = GetVectorElement(in);
CVectorElement* b = GetVectorElement(in); CVectorElement* b = GetVectorElement(in);
CRealElement* c = GetRealElement(in); CRealElement* c = GetRealElement(in);
CRealElement* d = GetRealElement(in); CRealElement* d = GetRealElement(in);
return rs_new CMVESwirl(a, b, c, d); ret = rs_new CMVESwirl(a, b, c, d);
break;
} }
case SBIG('BNCE'): { case SBIG('BNCE'): {
CVectorElement* a = GetVectorElement(in); CVectorElement* a = GetVectorElement(in);
@@ -399,13 +410,18 @@ CModVectorElement* CParticleDataFactory::GetModVectorElement(CInputStream& in) {
CRealElement* c = GetRealElement(in); CRealElement* c = GetRealElement(in);
CRealElement* d = GetRealElement(in); CRealElement* d = GetRealElement(in);
bool e = GetBool(in); bool e = GetBool(in);
return rs_new CMVEBounce(a, b, c, d, e); ret = rs_new CMVEBounce(a, b, c, d, e);
break;
} }
case SBIG('SPOS'): { case SBIG('SPOS'): {
return rs_new CMVESetPosition(GetVectorElement(in)); ret = rs_new CMVESetPosition(GetVectorElement(in));
break;
} }
default:
return nullptr;
break;
} }
return nullptr; return ret;
} }
CColorElement* CParticleDataFactory::GetColorElement(CInputStream& in) { return nullptr; } CColorElement* CParticleDataFactory::GetColorElement(CInputStream& in) { return nullptr; }