diff --git a/src/Kyoto/Particles/CParticleDataFactory.cpp b/src/Kyoto/Particles/CParticleDataFactory.cpp index 0c8e5ba5..aeaa5d18 100644 --- a/src/Kyoto/Particles/CParticleDataFactory.cpp +++ b/src/Kyoto/Particles/CParticleDataFactory.cpp @@ -2,6 +2,8 @@ #include "Kyoto/Particles/CIntElement.hpp" #include "Kyoto/Particles/CModVectorElement.hpp" +#include "Kyoto/Particles/CRealElement.hpp" +#include "Kyoto/Particles/IElement.hpp" #include "Kyoto/Streams/CInputStream.hpp" #define SBIG(v) v @@ -117,6 +119,188 @@ CIntElement* CParticleDataFactory::GetIntElement(CInputStream& in) { return nullptr; } +CRealElement* CParticleDataFactory::GetRealElement(CInputStream& in) { + FourCC clsId = GetClassID(in); + switch (clsId) { + case SBIG('CNST'): { + return rs_new CREConstant(GetReal(in)); + } + case SBIG('KEYP'): { + return rs_new CREKeyframeEmitter(in); + } + case SBIG('SCAL'): { + return rs_new CRETimeScale(GetRealElement(in)); + } + case SBIG('SINE'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + CRealElement* c = GetRealElement(in); + return rs_new CRESineWave(c, a,b); + } + case SBIG('ADD_'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + return rs_new CREAdd(a, b); + } + case SBIG('MULT'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + return rs_new CREMultiply(a, b); + } + case SBIG('DOTP'): { + CVectorElement* a = GetVectorElement(in); + CVectorElement* b = GetVectorElement(in); + return rs_new CREDotProduct(a, b); + } + case SBIG('RAND'): { + CRealElement* min = GetRealElement(in); + CRealElement* max = GetRealElement(in); + return rs_new CRERandom(min, max); + } + case SBIG('IRND'): { + CRealElement* min = GetRealElement(in); + CRealElement* max = GetRealElement(in); + return rs_new CREInitialRandom(min, max); + } + case SBIG('CHAN'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + CIntElement* c = GetIntElement(in); + return rs_new CRETimeChain(a, b, c); + } + case SBIG('CLMP'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + CRealElement* c = GetRealElement(in); + return rs_new CREClamp(a, b, c); + } + case SBIG('PULS'): { + CIntElement* a = GetIntElement(in); + CIntElement* b = GetIntElement(in); + CRealElement* c = GetRealElement(in); + CRealElement* d = GetRealElement(in); + return rs_new CREPulse(a, b, c, d); + } + case SBIG('RLPT'): { + CRealElement* a = GetRealElement(in); + return rs_new CRELifetimePercent(a); + } + case SBIG('LFTW'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + return rs_new CRELifetimeTween(a, b); + } + case SBIG('PRLW'): { + return rs_new CREParticleRotationOrLineWidth(); + } + case SBIG('PSLL'): { + return rs_new CREParticleSizeOrLineLength(); + } + case SBIG('PAP1'): { + return rs_new CREParticleAccessParameter1(); + } + case SBIG('PAP2'): { + return rs_new CREParticleAccessParameter2(); + } + case SBIG('PAP3'): { + return rs_new CREParticleAccessParameter3(); + } + case SBIG('PAP4'): { + return rs_new CREParticleAccessParameter4(); + } + case SBIG('PAP5'): { + return rs_new CREParticleAccessParameter5(); + } + case SBIG('PAP6'): { + return rs_new CREParticleAccessParameter6(); + } + case SBIG('PAP7'): { + return rs_new CREParticleAccessParameter7(); + } + case SBIG('PAP8'): { + return rs_new CREParticleAccessParameter8(); + } + case SBIG('VXTR'): { + CVectorElement* a = GetVectorElement(in); + return rs_new CREVectorXToReal(a); + } + case SBIG('VYTR'): { + CVectorElement* a = GetVectorElement(in); + return rs_new CREVectorYToReal(a); + } + case SBIG('VZTR'): { + CVectorElement* a = GetVectorElement(in); + return rs_new CREVectorZToReal(a); + } + case SBIG('VMAG'): { + CVectorElement* a = GetVectorElement(in); + return rs_new CREVectorMagnitude(a); + } + case SBIG('ISWT'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + return rs_new CREInitialSwitch(a, b); + } + case SBIG('CLTN'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + CRealElement* c = GetRealElement(in); + CRealElement* d = GetRealElement(in); + return rs_new CRECompareLessThan(a, b, c, d); + } + case SBIG('CEQL'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + CRealElement* c = GetRealElement(in); + CRealElement* d = GetRealElement(in); + return rs_new CRECompareEqual(a, b, c, d); + } + case SBIG('CRNG'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + CRealElement* c = GetRealElement(in); + CRealElement* d = GetRealElement(in); + CRealElement* e = GetRealElement(in); + return rs_new CREConstantRange(a, b, c, d, e); + } + case SBIG('CEXT'): { + CIntElement* a = GetIntElement(in); + return rs_new CREExternalVar(a); + } + case SBIG('ITRL'): { + CIntElement* a = GetIntElement(in); + CRealElement* b = GetRealElement(in); + return rs_new CREIntTimesReal(a, b); + } + case SBIG('SUB_'): { + CRealElement* a = GetRealElement(in); + CRealElement* b = GetRealElement(in); + return rs_new CRESubtract(a, b); + } + case SBIG('GTCR'): { + CColorElement* alpha = GetColorElement(in); + return rs_new CREGetComponentRed(alpha); + } + case SBIG('GTCG'): { + CColorElement* alpha = GetColorElement(in); + return rs_new CREGetComponentGreen(alpha); + } + case SBIG('GTCB'): { + CColorElement* alpha = GetColorElement(in); + return rs_new CREGetComponentBlue(alpha); + } + case SBIG('GTCA'): { + CColorElement* alpha = GetColorElement(in); + return rs_new CREGetComponentAlpha(alpha); + } + } + return nullptr; +} + +CVectorElement* CParticleDataFactory::GetVectorElement(CInputStream& in) { return nullptr; } + +CEmitterElement* CParticleDataFactory::GetEmitterElement(CInputStream& in) { return nullptr; } + CModVectorElement* CParticleDataFactory::GetModVectorElement(CInputStream& in) { FourCC clsId = GetClassID(in); switch (clsId) { @@ -219,3 +403,9 @@ CModVectorElement* CParticleDataFactory::GetModVectorElement(CInputStream& in) { } return nullptr; } + +CColorElement* CParticleDataFactory::GetColorElement(CInputStream& in) { return nullptr; } + +CUVElement* CParticleDataFactory::GetTextureElement(CInputStream& in, CSimplePool* resPool) { + return nullptr; +}