#ifndef __COMMON_PARTICLECOMMON_HPP__ #define __COMMON_PARTICLECOMMON_HPP__ #include "DNACommon.hpp" namespace Retro { namespace DNAParticle { struct IElement : BigYAML { Delete _d; virtual ~IElement() = default; virtual const char* ClassName() const=0; }; struct IRealElement : IElement {Delete _d;}; struct RealElementFactory : BigYAML { Delete _d; std::unique_ptr m_elem; void read(Athena::io::YAMLDocReader& r); void write(Athena::io::YAMLDocWriter& w) const; size_t binarySize(size_t __isz) const; void read(Athena::io::IStreamReader& r); void write(Athena::io::IStreamWriter& w) const; }; struct IIntElement : IElement {Delete _d;}; struct IntElementFactory : BigYAML { Delete _d; std::unique_ptr m_elem; void read(Athena::io::YAMLDocReader& r); void write(Athena::io::YAMLDocWriter& w) const; size_t binarySize(size_t __isz) const; void read(Athena::io::IStreamReader& r); void write(Athena::io::IStreamWriter& w) const; }; struct RELifetimeTween : IRealElement { DECL_YAML RealElementFactory a; RealElementFactory b; const char* ClassName() const {return "LFTW";} }; struct REConstant : IRealElement { DECL_YAML Value val; const char* ClassName() const {return "CNST";} }; struct RETimeChain : IRealElement { DECL_YAML RealElementFactory a; RealElementFactory b; IntElementFactory c; const char* ClassName() const {return "CHAN";} }; struct REAdd : IRealElement { DECL_YAML RealElementFactory a; RealElementFactory b; const char* ClassName() const {return "ADD_";} }; struct REClamp : IRealElement { DECL_YAML RealElementFactory a; RealElementFactory b; RealElementFactory c; const char* ClassName() const {return "CLMP";} }; struct REKeyframeEmitter : IRealElement { DECL_YAML Value a; Value b; Value c; Value d; Value e; Value f; Value count; Vector keys; const char* ClassName() const {return "KEYE";} }; struct REInitialRandom : IRealElement { DECL_YAML RealElementFactory a; RealElementFactory b; const char* ClassName() const {return "IRND";} }; struct REKeyframeEmitterP : REKeyframeEmitter { Delete _d; const char* ClassName() const {return "KEYP";} }; struct RERandom : IRealElement { DECL_YAML RealElementFactory a; RealElementFactory b; const char* ClassName() const {return "RAND";} }; struct REMultiply : IRealElement { DECL_YAML RealElementFactory a; RealElementFactory b; const char* ClassName() const {return "MULT";} }; struct REPulse : IRealElement { DECL_YAML IntElementFactory a; IntElementFactory b; RealElementFactory c; RealElementFactory d; const char* ClassName() const {return "PULS";} }; struct RETimeScale : IRealElement { DECL_YAML RealElementFactory a; const char* ClassName() const {return "SCAL";} }; struct RELifetimePercent : IRealElement { DECL_YAML RealElementFactory a; const char* ClassName() const {return "RLPT";} }; struct RESineWave : IRealElement { DECL_YAML RealElementFactory a; RealElementFactory b; RealElementFactory c; const char* ClassName() const {return "SINE";} }; struct IEKeyframeEmitter : IIntElement { DECL_YAML Value a; Value b; Value c; Value d; Value e; Value f; Value count; Vector keys; const char* ClassName() const {return "KEYE";} }; struct IEDeath : IIntElement { DECL_YAML IntElementFactory a; IntElementFactory b; const char* ClassName() const {return "DETH";} }; struct IEClamp : IIntElement { DECL_YAML IntElementFactory a; IntElementFactory b; IntElementFactory c; const char* ClassName() const {return "CLMP";} }; struct IETimeChain : IIntElement { DECL_YAML IntElementFactory a; IntElementFactory b; IntElementFactory c; const char* ClassName() const {return "CHAN";} }; struct IEAdd : IIntElement { DECL_YAML IntElementFactory a; IntElementFactory b; const char* ClassName() const {return "ADD_";} }; struct IEConstant : IIntElement { DECL_YAML Value val; const char* ClassName() const {return "CNST";} }; struct IEImpulse : IIntElement { DECL_YAML IntElementFactory a; const char* ClassName() const {return "IMPL";} }; struct IELifetimePercent : IIntElement { DECL_YAML IntElementFactory a; const char* ClassName() const {return "ILPT";} }; struct IEInitialRandom : IIntElement { DECL_YAML IntElementFactory a; IntElementFactory b; const char* ClassName() const {return "IRND";} }; struct IEPulse : IIntElement { DECL_YAML IntElementFactory a; IntElementFactory b; IntElementFactory c; IntElementFactory d; const char* ClassName() const {return "PULS";} }; struct IEMultiply : IIntElement { DECL_YAML IntElementFactory a; IntElementFactory b; const char* ClassName() const {return "MULT";} }; struct IEKeyframeEmitterP : IEKeyframeEmitter { Delete _d; const char* ClassName() const {return "KEYP";} }; struct IESampleAndHold : IIntElement { DECL_YAML IntElementFactory a; IntElementFactory b; IntElementFactory c; const char* ClassName() const {return "SPAH";} }; struct IERandom : IIntElement { DECL_YAML IntElementFactory a; IntElementFactory b; const char* ClassName() const {return "RAND";} }; struct IETimeScale : IIntElement { DECL_YAML RealElementFactory a; const char* ClassName() const {return "TSCL";} }; template struct ChildGeneratorDesc : BigYAML { Delete _d; IDType id; void read(Athena::io::YAMLDocReader& r) { id.clear(); if (r.enterSubRecord("CNST")) { id.read(r); r.leaveSubRecord(); } } void write(Athena::io::YAMLDocWriter& w) const { if (id) { w.enterSubRecord("CNST"); id.write(w); w.leaveSubRecord(); } } size_t binarySize(size_t __isz) const { if (id) return __isz + 8; else return __isz + 4; } void read(Athena::io::IStreamReader& r) { id.clear(); if (r.readUint32Big() == 'CNST') id.read(r); } void write(Athena::io::IStreamWriter& w) const { if (id) { w.writeUint32Big('CNST'); id.write(w); } else w.writeUint32Big('NONE'); } }; } } #endif // __COMMON_PARTICLECOMMON_HPP__