ParticleAssetEmitter.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  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. enum PhysicsParticleType
  61. {
  62. INVALID_PHYSICS_PARTICLE_TYPE,
  63. b2_barrierParticle,
  64. b2_colorMixingParticle,
  65. b2_destructionListenerParticle,
  66. b2_elasticParticle,
  67. b2_powderParticle,
  68. b2_reactiveParticle,
  69. b2_repulsiveParticle,
  70. b2_springParticle,
  71. b2_staticPressureParticle,
  72. b2_tensileParticle,
  73. b2_viscousParticle,
  74. b2_wallParticle,
  75. b2_waterParticle,
  76. b2_zombieParticle
  77. };
  78. private:
  79. typedef SimObject Parent;
  80. StringTableEntry mEmitterName;
  81. ParticleAsset* mOwner;
  82. EmitterType mEmitterType;
  83. Vector2 mEmitterOffset;
  84. F32 mEmitterAngle;
  85. Vector2 mEmitterSize;
  86. bool mFixedAspect;
  87. F32 mFixedForceAngle;
  88. Vector2 mFixedForceDirection;
  89. ParticleOrientationType mOrientationType;
  90. F32 mAlignedAngleOffset;
  91. bool mKeepAligned;
  92. F32 mRandomAngleOffset;
  93. F32 mRandomArc;
  94. F32 mFixedAngleOffset;
  95. Vector2 mPivotPoint;
  96. //Physics Particles
  97. PhysicsParticleType mPhysicsParticleType;
  98. bool mPhysicsParticles;
  99. //Physics Particles end---
  100. //Particle Target
  101. bool mTargetParticle;
  102. Vector2 mTargetPosition;
  103. //Particle Target end---
  104. bool mLinkEmissionRotation;
  105. bool mIntenseParticles;
  106. bool mSingleParticle;
  107. bool mAttachPositionToEmitter;
  108. bool mAttachRotationToEmitter;
  109. bool mOldestInFront;
  110. bool mBlendMode;
  111. S32 mSrcBlendFactor;
  112. S32 mDstBlendFactor;
  113. F32 mAlphaTest;
  114. bool mStaticMode;
  115. AssetPtr<ImageAsset> mImageAsset;
  116. U32 mImageFrame;
  117. StringTableEntry mNamedImageFrame;
  118. bool mRandomImageFrame;
  119. AssetPtr<AnimationAsset> mAnimationAsset;
  120. bool mUsingNamedFrame;
  121. /// Particle fields.
  122. ParticleAssetFieldCollection mParticleFields;
  123. ParticleAssetFieldBaseVariation mParticleLife;
  124. ParticleAssetFieldBaseVariation mQuantity;
  125. ParticleAssetFieldBaseVariationLife mSizeX;
  126. ParticleAssetFieldBaseVariationLife mSizeY;
  127. ParticleAssetFieldBaseVariationLife mSpeed;
  128. ParticleAssetFieldBaseVariationLife mSpin;
  129. ParticleAssetFieldBaseVariationLife mFixedForce;
  130. ParticleAssetFieldBaseVariationLife mRandomMotion;
  131. ParticleAssetFieldBaseVariation mEmissionForce;
  132. ParticleAssetFieldBaseVariation mEmissionAngle;
  133. ParticleAssetFieldBaseVariation mEmissionArc;
  134. ParticleAssetFieldLife mRedChannel;
  135. ParticleAssetFieldLife mGreenChannel;
  136. ParticleAssetFieldLife mBlueChannel;
  137. ParticleAssetFieldLife mAlphaChannel;
  138. Vector2 mLocalPivotAABB[4];
  139. public:
  140. ParticleAssetEmitter();
  141. virtual ~ParticleAssetEmitter();
  142. static void initPersistFields();
  143. virtual void copyTo(SimObject* object);
  144. inline ParticleAsset* getOwner( void ) const { return mOwner; }
  145. void setEmitterName( const char* pEmitterName );
  146. inline StringTableEntry getEmitterName( void ) const { return mEmitterName; }
  147. inline void setEmitterType( const EmitterType emitterType ) { mEmitterType = emitterType; refreshAsset(); }
  148. inline EmitterType getEmitterType( void ) { return mEmitterType; }
  149. inline void setEmitterOffset( const Vector2& offset ) { mEmitterOffset = offset; refreshAsset(); }
  150. inline const Vector2& getEmitterOffset( void ) const { return mEmitterOffset; }
  151. inline void setEmitterAngle( const F32 angle ) { mEmitterAngle = angle; refreshAsset(); }
  152. inline F32 getEmitterAngle( void ) const { return mEmitterAngle; }
  153. inline void setEmitterSize( const Vector2& size ) { mEmitterSize = size; refreshAsset(); }
  154. inline const Vector2& getEmitterSize( void ) const { return mEmitterSize; }
  155. inline void setFixedAspect( const bool fixedAspect ) { mFixedAspect = fixedAspect; refreshAsset(); }
  156. inline bool getFixedAspect( void ) const { return mFixedAspect; }
  157. void setFixedForceAngle( const F32 fixedForceAngle );
  158. inline F32 getFixedForceAngle( void ) const { return mFixedForceAngle; }
  159. inline const Vector2& getFixedForceDirection( void ) const { return mFixedForceDirection; }
  160. inline void setOrientationType( const ParticleOrientationType particleOrientationType ) { mOrientationType = particleOrientationType; refreshAsset(); }
  161. inline ParticleOrientationType getOrientationType( void ) const { return mOrientationType; }
  162. //Physics particles
  163. inline void setPhysicsParticleType(const PhysicsParticleType physicsParticleType) { mPhysicsParticleType = physicsParticleType; refreshAsset(); }
  164. inline PhysicsParticleType getPhysicsParticleType(void) const { return mPhysicsParticleType; }
  165. inline void setPhysicsParticles(const bool physicsPaticle) { mPhysicsParticles = physicsPaticle; refreshAsset(); }
  166. inline bool getPhysicsParticles(void) const { return mPhysicsParticles; }
  167. //Phyiscs particles end---
  168. //Particle Target
  169. inline void setTargetPosition(const Vector2& targetPos) { mTargetPosition = targetPos; }
  170. inline const Vector2& getTargetPosition(void) const { return mTargetPosition; }
  171. inline void setIsTargeting(const bool targetParticle) { mTargetParticle = targetParticle; refreshAsset(); }
  172. inline bool getIsTargeting(void) const { return mTargetParticle; }
  173. //Particle Target end---
  174. inline void setKeepAligned( const bool keepAligned ) { mKeepAligned = keepAligned; refreshAsset(); }
  175. inline bool getKeepAligned( void ) const { return mKeepAligned; }
  176. inline void setAlignedAngleOffset( const F32 angleOffset ) { mAlignedAngleOffset = angleOffset; refreshAsset(); }
  177. inline F32 getAlignedAngleOffset( void ) const { return mAlignedAngleOffset; }
  178. inline void setRandomAngleOffset( const F32 angleOffset ) { mRandomAngleOffset = angleOffset; refreshAsset(); };
  179. inline F32 getRandomAngleOffset( void ) const { return mRandomAngleOffset; }
  180. inline void setRandomArc( const F32 arc ) { mRandomArc = arc; refreshAsset(); }
  181. inline F32 getRandomArc( void ) const { return mRandomArc; }
  182. inline void setFixedAngleOffset( const F32 angleOffset ) { mFixedAngleOffset = angleOffset; refreshAsset(); }
  183. inline F32 getFixedAngleOffset( void ) const { return mFixedAngleOffset; }
  184. void setPivotPoint( const Vector2& pivotPoint );
  185. inline const Vector2& getPivotPoint( void ) const { return mPivotPoint; }
  186. inline void setLinkEmissionRotation( const bool linkEmissionRotation ) { mLinkEmissionRotation = linkEmissionRotation; refreshAsset(); }
  187. inline bool getLinkEmissionRotation( void ) const { return mLinkEmissionRotation; }
  188. inline void setIntenseParticles( const bool intenseParticles ) { mIntenseParticles = intenseParticles; refreshAsset(); }
  189. inline bool getIntenseParticles( void ) const { return mIntenseParticles; }
  190. inline void setSingleParticle( const bool singleParticle ) { mSingleParticle = singleParticle; refreshAsset(); }
  191. inline bool getSingleParticle( void ) const { return mSingleParticle; }
  192. inline void setAttachPositionToEmitter( const bool attachPositionToEmitter ) { mAttachPositionToEmitter = attachPositionToEmitter; refreshAsset(); }
  193. inline bool getAttachPositionToEmitter( void ) const { return mAttachPositionToEmitter; }
  194. inline void setAttachRotationToEmitter( const bool attachRotationToEmitter ) { mAttachRotationToEmitter = attachRotationToEmitter; refreshAsset(); }
  195. inline bool getAttachRotationToEmitter( void ) const { return mAttachRotationToEmitter; }
  196. inline void setOldestInFront( const bool oldestInFront ) { mOldestInFront = oldestInFront; refreshAsset(); }
  197. inline bool getOldestInFront( void ) const { return mOldestInFront; }
  198. inline bool isStaticFrameProvider( void ) const { return mStaticMode; }
  199. inline bool isUsingNamedImageFrame( void ) const { return mUsingNamedFrame; }
  200. bool setImage( const char* pAssetId, const U32 frame = 0 );
  201. bool setImage( const char* pAssetId, const char* frameName);
  202. inline StringTableEntry getImage( void ) const { return mImageAsset.getAssetId(); }
  203. bool setImageFrame( const U32 frame );
  204. inline U32 getImageFrame( void ) const { return mImageFrame; }
  205. bool setNamedImageFrame( const char* frameName);
  206. inline const char* getNamedImageFrame( void ) const { return mNamedImageFrame; }
  207. inline void setRandomImageFrame( const bool randomImageFrame ) { mRandomImageFrame = randomImageFrame; }
  208. inline bool getRandomImageFrame( void ) const { return mRandomImageFrame; }
  209. bool setAnimation( const char* animationName );
  210. inline StringTableEntry getAnimation( void ) const { return mAnimationAsset.getAssetId(); }
  211. inline AssetPtr<ImageAsset>& getImageAsset( void ) { return mImageAsset; }
  212. inline AssetPtr<AnimationAsset>& getAnimationAsset( void ) { return mAnimationAsset; }
  213. inline void setBlendMode( bool blendMode ) { mBlendMode = blendMode; refreshAsset(); }
  214. inline bool getBlendMode( void ) const { return mBlendMode; };
  215. inline void setSrcBlendFactor( const S32 blendFactor ) { mSrcBlendFactor = blendFactor; refreshAsset(); }
  216. inline S32 getSrcBlendFactor( void ) const { return mSrcBlendFactor; };
  217. inline void setDstBlendFactor( const S32 blendFactor ) { mDstBlendFactor = blendFactor; refreshAsset(); }
  218. inline S32 getDstBlendFactor( void ) const { return mDstBlendFactor; };
  219. inline void setAlphaTest( const F32 alphaTest ) { mAlphaTest = alphaTest; refreshAsset(); }
  220. inline F32 getAlphaTest( void ) const { return mAlphaTest; }
  221. inline ParticleAssetFieldCollection& getParticleFields( void ) { return mParticleFields; }
  222. inline ParticleAssetField& getParticleLifeBaseField( void ) { return mParticleLife.getBase(); }
  223. inline ParticleAssetField& getParticleLifeVariationField( void ) { return mParticleLife.getVariation(); }
  224. inline ParticleAssetField& getQuantityBaseField( void ) { return mQuantity.getBase(); }
  225. inline ParticleAssetField& getQuantityVariationField( void ) { return mQuantity.getVariation(); }
  226. inline ParticleAssetField& getSizeXBaseField( void ) { return mSizeX.getBase(); }
  227. inline ParticleAssetField& getSizeXVariationField( void ) { return mSizeX.getVariation(); }
  228. inline ParticleAssetField& getSizeXLifeField( void ) { return mSizeX.getLife(); }
  229. inline ParticleAssetField& getSizeYBaseField( void ) { return mSizeY.getBase(); }
  230. inline ParticleAssetField& getSizeYVariationField( void ) { return mSizeY.getVariation(); }
  231. inline ParticleAssetField& getSizeYLifeField( void ) { return mSizeY.getLife(); }
  232. inline ParticleAssetField& getSpeedBaseField( void ) { return mSpeed.getBase(); }
  233. inline ParticleAssetField& getSpeedVariationField( void ) { return mSpeed.getVariation(); }
  234. inline ParticleAssetField& getSpeedLifeField( void ) { return mSpeed.getLife(); }
  235. inline ParticleAssetField& getSpinBaseField( void ) { return mSpin.getBase(); }
  236. inline ParticleAssetField& getSpinVariationField( void ) { return mSpin.getVariation(); }
  237. inline ParticleAssetField& getSpinLifeField( void ) { return mSpin.getLife(); }
  238. inline ParticleAssetField& getFixedForceBaseField( void ) { return mFixedForce.getBase(); }
  239. inline ParticleAssetField& getFixedForceVariationField( void ) { return mFixedForce.getVariation(); }
  240. inline ParticleAssetField& getFixedForceLifeField( void ) { return mFixedForce.getLife(); }
  241. inline ParticleAssetField& getRandomMotionBaseField( void ) { return mRandomMotion.getBase(); }
  242. inline ParticleAssetField& getRandomMotionVariationField( void ) { return mRandomMotion.getVariation(); }
  243. inline ParticleAssetField& getRandomMotionLifeField( void ) { return mRandomMotion.getLife(); }
  244. inline ParticleAssetField& getEmissionForceForceBaseField( void ) { return mEmissionForce.getBase(); }
  245. inline ParticleAssetField& getEmissionForceVariationField( void ) { return mEmissionForce.getVariation(); }
  246. inline ParticleAssetField& getEmissionAngleBaseField( void ) { return mEmissionAngle.getBase(); }
  247. inline ParticleAssetField& getEmissionAngleVariationField( void ) { return mEmissionAngle.getVariation(); }
  248. inline ParticleAssetField& getEmissionArcBaseField( void ) { return mEmissionArc.getBase(); }
  249. inline ParticleAssetField& getEmissionArcVariationField( void ) { return mEmissionArc.getVariation(); }
  250. inline ParticleAssetField& getRedChannelLifeField( void ) { return mRedChannel.getLife(); }
  251. inline ParticleAssetField& getGreenChannelLifeField( void ) { return mGreenChannel.getLife(); }
  252. inline ParticleAssetField& getBlueChannelLifeField( void ) { return mBlueChannel.getLife(); }
  253. inline ParticleAssetField& getAlphaChannelLifeField( void ) { return mAlphaChannel.getLife(); }
  254. inline const Vector2& getLocalPivotAABB0( void ) { return mLocalPivotAABB[0]; }
  255. inline const Vector2& getLocalPivotAABB1( void ) { return mLocalPivotAABB[1]; }
  256. inline const Vector2& getLocalPivotAABB2( void ) { return mLocalPivotAABB[2]; }
  257. inline const Vector2& getLocalPivotAABB3( void ) { return mLocalPivotAABB[3]; }
  258. static EmitterType getEmitterTypeEnum(const char* label);
  259. static const char* getEmitterTypeDescription( const EmitterType emitterType );
  260. //phyiscs particles
  261. static PhysicsParticleType getPhysicsParticleTypeEnum(const char * label);
  262. static const char* getPhysicsParticleTypeDescription(const PhysicsParticleType particleType);
  263. //physics particles end----
  264. static ParticleOrientationType getOrientationTypeEnum(const char* label);
  265. static const char* getOrientationTypeDescription( const ParticleOrientationType orientationType );
  266. /// Declare Console Object.
  267. DECLARE_CONOBJECT(ParticleAssetEmitter);
  268. private:
  269. void setOwner( ParticleAsset* pParticleAsset );
  270. void refreshAsset( void );
  271. protected:
  272. virtual void onAssetRefreshed( AssetPtrBase* pAssetPtrBase );
  273. void onTamlCustomWrite( TamlCustomNodes& customNodes );
  274. void onTamlCustomRead( const TamlCustomNodes& customNodes );
  275. static bool setEmitterName(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterName( data ); return false; }
  276. static bool setEmitterType(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterType( getEmitterTypeEnum(data) ); return false; }
  277. static bool writeEmitterType( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getEmitterType() != POINT_EMITTER; }
  278. static bool setEmitterOffset(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterOffset(Vector2(data)); return false; }
  279. static bool writeEmitterOffset( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getEmitterOffset().notZero(); }
  280. static bool setIsTargeting(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setIsTargeting(dAtob(data)); return false; }
  281. static bool writeTargetParticle(void* obj, StringTableEntry pFieldName) { return static_cast<ParticleAssetEmitter*>(obj)->getIsTargeting(); }
  282. static bool setTargetPosition(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setTargetPosition(Vector2(data)); return false; }
  283. static bool writeTargetPosition(void* obj, StringTableEntry pFieldName) { return static_cast<ParticleAssetEmitter*>(obj)->getTargetPosition().notZero(); }
  284. static bool setEmitterAngle(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterAngle(dAtof(data)); return false; }
  285. static bool writeEmitterAngle( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getEmitterAngle()); }
  286. static bool setEmitterSize(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setEmitterSize(Vector2(data)); return false; }
  287. static bool writeEmitterSize( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getEmitterSize().notEqual(Vector2(10.0f, 10.0f)); }
  288. static bool setFixedAspect(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setFixedAspect(dAtob(data)); return false; }
  289. static bool writeFixedAspect( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getFixedAspect() == false; }
  290. static bool setFixedForceAngle(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setFixedForceAngle(dAtof(data)); return false; }
  291. static bool writeFixedForceAngle( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getFixedForceAngle() ); }
  292. //Physics Particles
  293. static bool setPhysicsParticleType(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setPhysicsParticleType(getPhysicsParticleTypeEnum(data)); return false; }
  294. static bool writePhysicsParticleType(void* obj, StringTableEntry pFieldName) { return static_cast<ParticleAssetEmitter*>(obj)->getPhysicsParticleType() != b2_zombieParticle; }
  295. static bool setPhysicsParticles(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setPhysicsParticles(dAtob(data)); return false; }
  296. static bool writePhysicsParticles(void* obj, StringTableEntry pFieldName) { return static_cast<ParticleAssetEmitter*>(obj)->getPhysicsParticles() == false; }
  297. //Physics Particles end---
  298. static bool setOrientationType(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setOrientationType( getOrientationTypeEnum(data) ); return false; }
  299. static bool writeOrientationType( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getOrientationType() != FIXED_ORIENTATION; }
  300. static bool setKeepAligned(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setKeepAligned(dAtob(data)); return false; }
  301. static bool writeKeepAligned( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getKeepAligned() == true; }
  302. static bool setAlignedAngleOffset(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAlignedAngleOffset(dAtof(data)); return false; }
  303. static bool writeAlignedAngleOffset( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getAlignedAngleOffset() ); }
  304. static bool setRandomAngleOffset(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setRandomAngleOffset(dAtof(data)); return false; }
  305. static bool writeRandomAngleOffset( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getRandomAngleOffset() ); }
  306. static bool setRandomArc(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setRandomArc(dAtof(data)); return false; }
  307. static bool writeRandomArc( void* obj, StringTableEntry pFieldName ) { return mNotEqual(static_cast<ParticleAssetEmitter*>(obj)->getRandomArc(), 360.0f ); }
  308. static bool setFixedAngleOffset(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setFixedAngleOffset(dAtof(data)); return false; }
  309. static bool writeFixedAngleOffset( void* obj, StringTableEntry pFieldName ) { return mNotZero(static_cast<ParticleAssetEmitter*>(obj)->getFixedAngleOffset() ); }
  310. static bool setPivotPoint(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setPivotPoint(Vector2(data)); return false; }
  311. static bool writePivotPoint( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getPivotPoint().notZero(); }
  312. static bool setLinkEmissionRotation(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setLinkEmissionRotation(dAtob(data)); return false; }
  313. static bool writeLinkEmissionRotation( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getLinkEmissionRotation() == false; }
  314. static bool setIntenseParticles(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setIntenseParticles(dAtob(data)); return false; }
  315. static bool writeIntenseParticles( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getIntenseParticles() == true; }
  316. static bool setSingleParticle(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setSingleParticle(dAtob(data)); return false; }
  317. static bool writeSingleParticle( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getSingleParticle() == true; }
  318. static bool setAttachPositionToEmitter(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAttachPositionToEmitter(dAtob(data)); return false; }
  319. static bool writeAttachPositionToEmitter( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getAttachPositionToEmitter() == true; }
  320. static bool setAttachRotationToEmitter(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAttachRotationToEmitter(dAtob(data)); return false; }
  321. static bool writeAttachRotationToEmitter( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getAttachRotationToEmitter() == true; }
  322. static bool setOldestInFront(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setOldestInFront(dAtob(data)); return false; }
  323. static bool writeOldestInFront( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getOldestInFront() == true; }
  324. static bool setImage(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setImage(data); return false; };
  325. static const char* getImage(void* obj, const char* data) { return static_cast<ParticleAssetEmitter*>(obj)->getImage(); }
  326. static bool writeImage( void* obj, StringTableEntry pFieldName ) { ParticleAssetEmitter* pCastObject = static_cast<ParticleAssetEmitter*>(obj); if ( !pCastObject->isStaticFrameProvider() ) return false; return pCastObject->mImageAsset.notNull(); }
  327. static bool setImageFrame(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setImageFrame(dAtoi(data)); return false; };
  328. static bool writeImageFrame( void* obj, StringTableEntry pFieldName ) { ParticleAssetEmitter* pCastObject = static_cast<ParticleAssetEmitter*>(obj); if ( !pCastObject->isStaticFrameProvider() ) return false; return pCastObject->mImageAsset.notNull() && !pCastObject->getRandomImageFrame(); }
  329. static bool setNamedImageFrame(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setNamedImageFrame(data); return false; };
  330. 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(); }
  331. static bool setRandomImageFrame(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setRandomImageFrame(dAtob(data)); return false; };
  332. static bool writeRandomImageFrame( void* obj, StringTableEntry pFieldName ) { ParticleAssetEmitter* pCastObject = static_cast<ParticleAssetEmitter*>(obj); if ( !pCastObject->isStaticFrameProvider() ) return false; return pCastObject->getRandomImageFrame(); }
  333. static bool setAnimation(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAnimation(data); return false; };
  334. static const char* getAnimation(void* obj, const char* data) { return static_cast<ParticleAssetEmitter*>(obj)->getAnimation(); }
  335. static bool writeAnimation( void* obj, StringTableEntry pFieldName ) { ParticleAssetEmitter* pCastObject = static_cast<ParticleAssetEmitter*>(obj); if ( pCastObject->isStaticFrameProvider() ) return false; return pCastObject->mAnimationAsset.notNull(); }
  336. static bool setBlendMode(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setBlendMode(dAtob(data)); return false; }
  337. static bool writeBlendMode( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getBlendMode() == false; }
  338. static bool setSrcBlendFactor(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setSrcBlendFactor(SceneObject::getSrcBlendFactorEnum(data)); return false; }
  339. static bool writeSrcBlendFactor( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getSrcBlendFactor() != GL_SRC_ALPHA; }
  340. static bool setDstBlendFactor(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setDstBlendFactor(SceneObject::getDstBlendFactorEnum(data)); return false; }
  341. static bool writeDstBlendFactor( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getDstBlendFactor() != GL_ONE_MINUS_SRC_ALPHA; }
  342. static bool setAlphaTest(void* obj, const char* data) { static_cast<ParticleAssetEmitter*>(obj)->setAlphaTest(dAtof(data)); return false; }
  343. static bool writeAlphaTest( void* obj, StringTableEntry pFieldName ) { return static_cast<ParticleAssetEmitter*>(obj)->getAlphaTest() >= 0.0f; }
  344. };
  345. #endif // _PARTICLE_ASSET_EMITTER_H_