ParticleAssetEmitter.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. //-----------------------------------------------------------------------------
  2. // Copyright (c) 2013 GarageGames, LLC
  3. //
  4. // Permission is hereby granted, free of charge, to any person obtaining a copy
  5. // of this software and associated documentation files (the "Software"), to
  6. // deal in the Software without restriction, including without limitation the
  7. // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  8. // sell copies of the Software, and to permit persons to whom the Software is
  9. // furnished to do so, subject to the following conditions:
  10. //
  11. // The above copyright notice and this permission notice shall be included in
  12. // all copies or substantial portions of the Software.
  13. //
  14. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  19. // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  20. // IN THE SOFTWARE.
  21. //-----------------------------------------------------------------------------
  22. #ifndef _PARTICLE_ASSET_EMITTER_H_
  23. #define _PARTICLE_ASSET_EMITTER_H_
  24. #ifndef _PARTICLE_ASSET_FIELD_H_
  25. #include "2d/assets/ParticleAssetFieldCollection.h"
  26. #endif
  27. #ifndef _IMAGE_ASSET_H_
  28. #include "2d/assets/ImageAsset.h"
  29. #endif
  30. #ifndef _ANIMATION_ASSET_H_
  31. #include "2d/assets/AnimationAsset.h"
  32. #endif
  33. #ifndef _SCENE_OBJECT_H_
  34. #include "2d/sceneobject/SceneObject.h"
  35. #endif
  36. //-----------------------------------------------------------------------------
  37. class ParticleAsset;
  38. //-----------------------------------------------------------------------------
  39. class ParticleAssetEmitter : public SimObject, protected AssetPtrCallback
  40. {
  41. friend class ParticleAsset;
  42. public:
  43. enum ParticleOrientationType
  44. {
  45. INVALID_ORIENTATION,
  46. FIXED_ORIENTATION,
  47. ALIGNED_ORIENTATION,
  48. RANDOM_ORIENTATION
  49. };
  50. enum EmitterType
  51. {
  52. INVALID_EMITTER_TYPE,
  53. POINT_EMITTER,
  54. LINE_EMITTER,
  55. BOX_EMITTER,
  56. DISK_EMITTER,
  57. ELLIPSE_EMITTER,
  58. TORUS_EMITTER,
  59. };
  60. private:
  61. typedef SimObject Parent;
  62. StringTableEntry mEmitterName;
  63. ParticleAsset* mOwner;
  64. EmitterType mEmitterType;
  65. Vector2 mEmitterOffset;
  66. F32 mEmitterAngle;
  67. Vector2 mEmitterSize;
  68. bool mFixedAspect;
  69. F32 mFixedForceAngle;
  70. Vector2 mFixedForceDirection;
  71. ParticleOrientationType mOrientationType;
  72. F32 mAlignedAngleOffset;
  73. bool mKeepAligned;
  74. F32 mRandomAngleOffset;
  75. F32 mRandomArc;
  76. F32 mFixedAngleOffset;
  77. Vector2 mPivotPoint;
  78. bool mLinkEmissionRotation;
  79. bool mIntenseParticles;
  80. bool mSingleParticle;
  81. bool mAttachPositionToEmitter;
  82. bool mAttachRotationToEmitter;
  83. bool mOldestInFront;
  84. bool mBlendMode;
  85. S32 mSrcBlendFactor;
  86. S32 mDstBlendFactor;
  87. F32 mAlphaTest;
  88. bool mStaticMode;
  89. AssetPtr<ImageAsset> mImageAsset;
  90. U32 mImageFrame;
  91. StringTableEntry mNamedImageFrame;
  92. bool mRandomImageFrame;
  93. AssetPtr<AnimationAsset> mAnimationAsset;
  94. bool mUsingNamedFrame;
  95. /// Particle fields.
  96. ParticleAssetFieldCollection mParticleFields;
  97. ParticleAssetFieldBaseVariation mParticleLife;
  98. ParticleAssetFieldBaseVariation mQuantity;
  99. ParticleAssetFieldBaseVariationLife mSizeX;
  100. ParticleAssetFieldBaseVariationLife mSizeY;
  101. ParticleAssetFieldBaseVariationLife mSpeed;
  102. ParticleAssetFieldBaseVariationLife mSpin;
  103. ParticleAssetFieldBaseVariationLife mFixedForce;
  104. ParticleAssetFieldBaseVariationLife mRandomMotion;
  105. ParticleAssetFieldBaseVariation mEmissionForce;
  106. ParticleAssetFieldBaseVariation mEmissionAngle;
  107. ParticleAssetFieldBaseVariation mEmissionArc;
  108. ParticleAssetFieldLife mRedChannel;
  109. ParticleAssetFieldLife mGreenChannel;
  110. ParticleAssetFieldLife mBlueChannel;
  111. ParticleAssetFieldLife mAlphaChannel;
  112. Vector2 mLocalPivotAABB[4];
  113. public:
  114. ParticleAssetEmitter();
  115. virtual ~ParticleAssetEmitter();
  116. static void initPersistFields();
  117. virtual void copyTo(SimObject* object);
  118. inline ParticleAsset* getOwner( void ) const { return mOwner; }
  119. void setEmitterName( const char* pEmitterName );
  120. inline StringTableEntry getEmitterName( void ) const { return mEmitterName; }
  121. inline void setEmitterType( const EmitterType emitterType ) { mEmitterType = emitterType; refreshAsset(); }
  122. inline EmitterType getEmitterType( void ) { return mEmitterType; }
  123. inline void setEmitterOffset( const Vector2& offset ) { mEmitterOffset = offset; refreshAsset(); }
  124. inline const Vector2& getEmitterOffset( void ) const { return mEmitterOffset; }
  125. inline void setEmitterAngle( const F32 angle ) { mEmitterAngle = angle; refreshAsset(); }
  126. inline F32 getEmitterAngle( void ) const { return mEmitterAngle; }
  127. inline void setEmitterSize( const Vector2& size ) { mEmitterSize = size; refreshAsset(); }
  128. inline const Vector2& getEmitterSize( void ) const { return mEmitterSize; }
  129. inline void setFixedAspect( const bool fixedAspect ) { mFixedAspect = fixedAspect; refreshAsset(); }
  130. inline bool getFixedAspect( void ) const { return mFixedAspect; }
  131. void setFixedForceAngle( const F32 fixedForceAngle );
  132. inline F32 getFixedForceAngle( void ) const { return mFixedForceAngle; }
  133. inline const Vector2& getFixedForceDirection( void ) const { return mFixedForceDirection; }
  134. inline void setOrientationType( const ParticleOrientationType particleOrientationType ) { mOrientationType = particleOrientationType; refreshAsset(); }
  135. inline ParticleOrientationType getOrientationType( void ) const { return mOrientationType; }
  136. inline void setKeepAligned( const bool keepAligned ) { mKeepAligned = keepAligned; refreshAsset(); }
  137. inline bool getKeepAligned( void ) const { return mKeepAligned; }
  138. inline void setAlignedAngleOffset( const F32 angleOffset ) { mAlignedAngleOffset = angleOffset; refreshAsset(); }
  139. inline F32 getAlignedAngleOffset( void ) const { return mAlignedAngleOffset; }
  140. inline void setRandomAngleOffset( const F32 angleOffset ) { mRandomAngleOffset = angleOffset; refreshAsset(); };
  141. inline F32 getRandomAngleOffset( void ) const { return mRandomAngleOffset; }
  142. inline void setRandomArc( const F32 arc ) { mRandomArc = arc; refreshAsset(); }
  143. inline F32 getRandomArc( void ) const { return mRandomArc; }
  144. inline void setFixedAngleOffset( const F32 angleOffset ) { mFixedAngleOffset = angleOffset; refreshAsset(); }
  145. inline F32 getFixedAngleOffset( void ) const { return mFixedAngleOffset; }
  146. void setPivotPoint( const Vector2& pivotPoint );
  147. inline const Vector2& getPivotPoint( void ) const { return mPivotPoint; }
  148. inline void setLinkEmissionRotation( const bool linkEmissionRotation ) { mLinkEmissionRotation = linkEmissionRotation; refreshAsset(); }
  149. inline bool getLinkEmissionRotation( void ) const { return mLinkEmissionRotation; }
  150. inline void setIntenseParticles( const bool intenseParticles ) { mIntenseParticles = intenseParticles; refreshAsset(); }
  151. inline bool getIntenseParticles( void ) const { return mIntenseParticles; }
  152. inline void setSingleParticle( const bool singleParticle ) { mSingleParticle = singleParticle; refreshAsset(); }
  153. inline bool getSingleParticle( void ) const { return mSingleParticle; }
  154. inline void setAttachPositionToEmitter( const bool attachPositionToEmitter ) { mAttachPositionToEmitter = attachPositionToEmitter; refreshAsset(); }
  155. inline bool getAttachPositionToEmitter( void ) const { return mAttachPositionToEmitter; }
  156. inline void setAttachRotationToEmitter( const bool attachRotationToEmitter ) { mAttachRotationToEmitter = attachRotationToEmitter; refreshAsset(); }
  157. inline bool getAttachRotationToEmitter( void ) const { return mAttachRotationToEmitter; }
  158. inline void setOldestInFront( const bool oldestInFront ) { mOldestInFront = oldestInFront; refreshAsset(); }
  159. inline bool getOldestInFront( void ) const { return mOldestInFront; }
  160. inline bool isStaticFrameProvider( void ) const { return mStaticMode; }
  161. inline bool isUsingNamedImageFrame( void ) const { return mUsingNamedFrame; }
  162. bool setImage( const char* pAssetId, const U32 frame = 0 );
  163. bool setImage( const char* pAssetId, const char* frameName);
  164. inline StringTableEntry getImage( void ) const { return mImageAsset.getAssetId(); }
  165. bool setImageFrame( const U32 frame );
  166. inline U32 getImageFrame( void ) const { return mImageFrame; }
  167. bool setNamedImageFrame( const char* frameName);
  168. inline const char* getNamedImageFrame( void ) const { return mNamedImageFrame; }
  169. inline void setRandomImageFrame( const bool randomImageFrame ) { mRandomImageFrame = randomImageFrame; }
  170. inline bool getRandomImageFrame( void ) const { return mRandomImageFrame; }
  171. bool setAnimation( const char* animationName );
  172. inline StringTableEntry getAnimation( void ) const { return mAnimationAsset.getAssetId(); }
  173. inline AssetPtr<ImageAsset>& getImageAsset( void ) { return mImageAsset; }
  174. inline AssetPtr<AnimationAsset>& getAnimationAsset( void ) { return mAnimationAsset; }
  175. inline void setBlendMode( bool blendMode ) { mBlendMode = blendMode; refreshAsset(); }
  176. inline bool getBlendMode( void ) const { return mBlendMode; };
  177. inline void setSrcBlendFactor( const S32 blendFactor ) { mSrcBlendFactor = blendFactor; refreshAsset(); }
  178. inline S32 getSrcBlendFactor( void ) const { return mSrcBlendFactor; };
  179. inline void setDstBlendFactor( const S32 blendFactor ) { mDstBlendFactor = blendFactor; refreshAsset(); }
  180. inline S32 getDstBlendFactor( void ) const { return mDstBlendFactor; };
  181. inline void setAlphaTest( const F32 alphaTest ) { mAlphaTest = alphaTest; refreshAsset(); }
  182. inline F32 getAlphaTest( void ) const { return mAlphaTest; }
  183. inline ParticleAssetFieldCollection& getParticleFields( void ) { return mParticleFields; }
  184. inline ParticleAssetField& getParticleLifeBaseField( void ) { return mParticleLife.getBase(); }
  185. inline ParticleAssetField& getParticleLifeVariationField( void ) { return mParticleLife.getVariation(); }
  186. inline ParticleAssetField& getQuantityBaseField( void ) { return mQuantity.getBase(); }
  187. inline ParticleAssetField& getQuantityVariationField( void ) { return mQuantity.getVariation(); }
  188. inline ParticleAssetField& getSizeXBaseField( void ) { return mSizeX.getBase(); }
  189. inline ParticleAssetField& getSizeXVariationField( void ) { return mSizeX.getVariation(); }
  190. inline ParticleAssetField& getSizeXLifeField( void ) { return mSizeX.getLife(); }
  191. inline ParticleAssetField& getSizeYBaseField( void ) { return mSizeY.getBase(); }
  192. inline ParticleAssetField& getSizeYVariationField( void ) { return mSizeY.getVariation(); }
  193. inline ParticleAssetField& getSizeYLifeField( void ) { return mSizeY.getLife(); }
  194. inline ParticleAssetField& getSpeedBaseField( void ) { return mSpeed.getBase(); }
  195. inline ParticleAssetField& getSpeedVariationField( void ) { return mSpeed.getVariation(); }
  196. inline ParticleAssetField& getSpeedLifeField( void ) { return mSpeed.getLife(); }
  197. inline ParticleAssetField& getSpinBaseField( void ) { return mSpin.getBase(); }
  198. inline ParticleAssetField& getSpinVariationField( void ) { return mSpin.getVariation(); }
  199. inline ParticleAssetField& getSpinLifeField( void ) { return mSpin.getLife(); }
  200. inline ParticleAssetField& getFixedForceBaseField( void ) { return mFixedForce.getBase(); }
  201. inline ParticleAssetField& getFixedForceVariationField( void ) { return mFixedForce.getVariation(); }
  202. inline ParticleAssetField& getFixedForceLifeField( void ) { return mFixedForce.getLife(); }
  203. inline ParticleAssetField& getRandomMotionBaseField( void ) { return mRandomMotion.getBase(); }
  204. inline ParticleAssetField& getRandomMotionVariationField( void ) { return mRandomMotion.getVariation(); }
  205. inline ParticleAssetField& getRandomMotionLifeField( void ) { return mRandomMotion.getLife(); }
  206. inline ParticleAssetField& getEmissionForceForceBaseField( void ) { return mEmissionForce.getBase(); }
  207. inline ParticleAssetField& getEmissionForceVariationField( void ) { return mEmissionForce.getVariation(); }
  208. inline ParticleAssetField& getEmissionAngleBaseField( void ) { return mEmissionAngle.getBase(); }
  209. inline ParticleAssetField& getEmissionAngleVariationField( void ) { return mEmissionAngle.getVariation(); }
  210. inline ParticleAssetField& getEmissionArcBaseField( void ) { return mEmissionArc.getBase(); }
  211. inline ParticleAssetField& getEmissionArcVariationField( void ) { return mEmissionArc.getVariation(); }
  212. inline ParticleAssetField& getRedChannelLifeField( void ) { return mRedChannel.getLife(); }
  213. inline ParticleAssetField& getGreenChannelLifeField( void ) { return mGreenChannel.getLife(); }
  214. inline ParticleAssetField& getBlueChannelLifeField( void ) { return mBlueChannel.getLife(); }
  215. inline ParticleAssetField& getAlphaChannelLifeField( void ) { return mAlphaChannel.getLife(); }
  216. inline const Vector2& getLocalPivotAABB0( void ) { return mLocalPivotAABB[0]; }
  217. inline const Vector2& getLocalPivotAABB1( void ) { return mLocalPivotAABB[1]; }
  218. inline const Vector2& getLocalPivotAABB2( void ) { return mLocalPivotAABB[2]; }
  219. inline const Vector2& getLocalPivotAABB3( void ) { return mLocalPivotAABB[3]; }
  220. static EmitterType getEmitterTypeEnum(const char* label);
  221. static const char* getEmitterTypeDescription( const EmitterType emitterType );
  222. static ParticleOrientationType getOrientationTypeEnum(const char* label);
  223. static const char* getOrientationTypeDescription( const ParticleOrientationType orientationType );
  224. /// Declare Console Object.
  225. DECLARE_CONOBJECT(ParticleAssetEmitter);
  226. private:
  227. void setOwner( ParticleAsset* pParticleAsset );
  228. void refreshAsset( void );
  229. protected:
  230. virtual void onAssetRefreshed( AssetPtrBase* pAssetPtrBase );
  231. void onTamlCustomWrite( TamlCustomNodes& customNodes );
  232. void onTamlCustomRead( const TamlCustomNodes& customNodes );
  233. static bool setEmitterName(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterName( data ); return false; }
  234. static bool setEmitterType(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterType( getEmitterTypeEnum(data) ); return false; }
  235. static bool writeEmitterType( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getEmitterType() != POINT_EMITTER; }
  236. static bool setEmitterOffset(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterOffset(Vector2(data)); return false; }
  237. static bool writeEmitterOffset( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getEmitterOffset().notZero(); }
  238. static bool setEmitterAngle(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterAngle(dAtof(data)); return false; }
  239. static bool writeEmitterAngle( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getEmitterAngle()); }
  240. static bool setEmitterSize(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterSize(Vector2(data)); return false; }
  241. static bool writeEmitterSize( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getEmitterSize().notEqual(Vector2(10.0f, 10.0f)); }
  242. static bool setFixedAspect(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setFixedAspect(dAtob(data)); return false; }
  243. static bool writeFixedAspect( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getFixedAspect() == false; }
  244. static bool setFixedForceAngle(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setFixedForceAngle(dAtof(data)); return false; }
  245. static bool writeFixedForceAngle( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getFixedForceAngle() ); }
  246. static bool setOrientationType(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setOrientationType( getOrientationTypeEnum(data) ); return false; }
  247. static bool writeOrientationType( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getOrientationType() != FIXED_ORIENTATION; }
  248. static bool setKeepAligned(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setKeepAligned(dAtob(data)); return false; }
  249. static bool writeKeepAligned( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getKeepAligned() == true; }
  250. static bool setAlignedAngleOffset(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAlignedAngleOffset(dAtof(data)); return false; }
  251. static bool writeAlignedAngleOffset( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getAlignedAngleOffset() ); }
  252. static bool setRandomAngleOffset(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setRandomAngleOffset(dAtof(data)); return false; }
  253. static bool writeRandomAngleOffset( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getRandomAngleOffset() ); }
  254. static bool setRandomArc(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setRandomArc(dAtof(data)); return false; }
  255. static bool writeRandomArc( void* obj, StringTableEntry pFieldName ) { return mNotEqual(static_cast<ParticleAssetEmitter*>(obj)->getRandomArc(), 360.0f ); }
  256. static bool setFixedAngleOffset(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setFixedAngleOffset(dAtof(data)); return false; }
  257. static bool writeFixedAngleOffset( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getFixedAngleOffset() ); }
  258. static bool setPivotPoint(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setPivotPoint(Vector2(data)); return false; }
  259. static bool writePivotPoint( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getPivotPoint().notZero(); }
  260. static bool setLinkEmissionRotation(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setLinkEmissionRotation(dAtob(data)); return false; }
  261. static bool writeLinkEmissionRotation( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getLinkEmissionRotation() == false; }
  262. static bool setIntenseParticles(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setIntenseParticles(dAtob(data)); return false; }
  263. static bool writeIntenseParticles( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getIntenseParticles() == true; }
  264. static bool setSingleParticle(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setSingleParticle(dAtob(data)); return false; }
  265. static bool writeSingleParticle( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getSingleParticle() == true; }
  266. static bool setAttachPositionToEmitter(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAttachPositionToEmitter(dAtob(data)); return false; }
  267. static bool writeAttachPositionToEmitter( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getAttachPositionToEmitter() == true; }
  268. static bool setAttachRotationToEmitter(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAttachRotationToEmitter(dAtob(data)); return false; }
  269. static bool writeAttachRotationToEmitter( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getAttachRotationToEmitter() == true; }
  270. static bool setOldestInFront(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setOldestInFront(dAtob(data)); return false; }
  271. static bool writeOldestInFront( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getOldestInFront() == true; }
  272. static bool setImage(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setImage(data); return false; };
  273. static const char* getImage(void* obj, const char* data) { return static_cast<ParticleAssetEmitter*>(obj)->getImage(); }
  274. static bool writeImage( void* obj, StringTableEntry pFieldName ) { ParticleAssetEmitter* pCastObject = static_cast<ParticleAssetEmitter*>(obj); if ( !pCastObject->isStaticFrameProvider() ) return false; return pCastObject->mImageAsset.notNull(); }
  275. static bool setImageFrame(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setImageFrame(dAtoi(data)); return false; };
  276. static bool writeImageFrame( void* obj, StringTableEntry pFieldName ) { ParticleAssetEmitter* pCastObject = static_cast<ParticleAssetEmitter*>(obj); if ( !pCastObject->isStaticFrameProvider() ) return false; return pCastObject->mImageAsset.notNull() && !pCastObject->getRandomImageFrame(); }
  277. static bool setNamedImageFrame(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setNamedImageFrame(data); return false; };
  278. static bool writeNamedImageFrame( void* obj, StringTableEntry pFieldName ) { ParticleAssetEmitter* pCastObject = static_cast<ParticleAssetEmitter*>(obj); if ( !pCastObject->isStaticFrameProvider() || !pCastObject->isUsingNamedImageFrame() ) return false; return pCastObject->mImageAsset.notNull() && !pCastObject->getRandomImageFrame(); }
  279. static bool setRandomImageFrame(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setRandomImageFrame(dAtob(data)); return false; };
  280. static bool writeRandomImageFrame( void* obj, StringTableEntry pFieldName ) { ParticleAssetEmitter* pCastObject = static_cast<ParticleAssetEmitter*>(obj); if ( !pCastObject->isStaticFrameProvider() ) return false; return pCastObject->getRandomImageFrame(); }
  281. static bool setAnimation(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAnimation(data); return false; };
  282. static const char* getAnimation(void* obj, const char* data) { return static_cast<ParticleAssetEmitter*>(obj)->getAnimation(); }
  283. static bool writeAnimation( void* obj, StringTableEntry pFieldName ) { ParticleAssetEmitter* pCastObject = static_cast<ParticleAssetEmitter*>(obj); if ( pCastObject->isStaticFrameProvider() ) return false; return pCastObject->mAnimationAsset.notNull(); }
  284. static bool setBlendMode(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setBlendMode(dAtob(data)); return false; }
  285. static bool writeBlendMode( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getBlendMode() == false; }
  286. static bool setSrcBlendFactor(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setSrcBlendFactor(SceneObject::getSrcBlendFactorEnum(data)); return false; }
  287. static bool writeSrcBlendFactor( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getSrcBlendFactor() != GL_SRC_ALPHA; }
  288. static bool setDstBlendFactor(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setDstBlendFactor(SceneObject::getDstBlendFactorEnum(data)); return false; }
  289. static bool writeDstBlendFactor( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getDstBlendFactor() != GL_ONE_MINUS_SRC_ALPHA; }
  290. static bool setAlphaTest(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAlphaTest(dAtof(data)); return false; }
  291. static bool writeAlphaTest( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getAlphaTest() >= 0.0f; }
  292. };
  293. #endif // _PARTICLE_ASSET_EMITTER_H_