00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #import "CCProtocols.h"
00028 #import "CCNode.h"
00029 #import "ccTypes.h"
00030 #import "ccConfig.h"
00031
00032 #if CC_ENABLE_PROFILERS
00033 @class CCProfilingTimer;
00034 #endif
00035
00036
00037 enum {
00039 kCCParticleDurationInfinity = -1,
00040
00042 kCCParticleStartSizeEqualToEndSize = -1,
00043
00045 kCCParticleStartRadiusEqualToEndRadius = -1,
00046
00047
00048 kParticleStartSizeEqualToEndSize = kCCParticleStartSizeEqualToEndSize,
00049 kParticleDurationInfinity = kCCParticleDurationInfinity,
00050 };
00051
00052
00053 enum {
00055 kCCParticleModeGravity,
00056
00058 kCCParticleModeRadius,
00059 };
00060
00061
00065 typedef enum {
00067 kCCPositionTypeFree,
00068
00072 kCCPositionTypeRelative,
00073
00075 kCCPositionTypeGrouped,
00076 }tCCPositionType;
00077
00078
00079 enum {
00080 kPositionTypeFree = kCCPositionTypeFree,
00081 kPositionTypeGrouped = kCCPositionTypeGrouped,
00082 };
00083
00087 typedef struct sCCParticle {
00088 CGPoint pos;
00089 CGPoint startPos;
00090
00091 ccColor4F color;
00092 ccColor4F deltaColor;
00093
00094 float size;
00095 float deltaSize;
00096
00097 float rotation;
00098 float deltaRotation;
00099
00100 ccTime timeToLive;
00101
00102 union {
00103
00104 struct {
00105 CGPoint dir;
00106 float radialAccel;
00107 float tangentialAccel;
00108 } A;
00109
00110
00111 struct {
00112 float angle;
00113 float degreesPerSecond;
00114 float radius;
00115 float deltaRadius;
00116 } B;
00117 } mode;
00118
00119 }tCCParticle;
00120
00121 typedef void (*CC_UPDATE_PARTICLE_IMP)(id, SEL, tCCParticle*, CGPoint);
00122
00123 @class CCTexture2D;
00124
00168 @interface CCParticleSystem : CCNode <CCTextureProtocol>
00169 {
00170
00171 BOOL active;
00172
00173 float duration;
00174
00175 float elapsed;
00176
00177
00178 CGPoint sourcePosition;
00179
00180 CGPoint posVar;
00181
00182
00183 float angle;
00184
00185 float angleVar;
00186
00187
00188
00189 NSInteger emitterMode_;
00190 union {
00191
00192 struct {
00193
00194 CGPoint gravity;
00195
00196
00197 float speed;
00198
00199 float speedVar;
00200
00201
00202 float tangentialAccel;
00203
00204 float tangentialAccelVar;
00205
00206
00207 float radialAccel;
00208
00209 float radialAccelVar;
00210 } A;
00211
00212
00213 struct {
00214
00215
00216 float startRadius;
00217
00218 float startRadiusVar;
00219
00220 float endRadius;
00221
00222 float endRadiusVar;
00223
00224 float rotatePerSecond;
00225
00226 float rotatePerSecondVar;
00227 } B;
00228 } mode;
00229
00230
00231 float startSize;
00232
00233 float startSizeVar;
00234
00235 float endSize;
00236
00237 float endSizeVar;
00238
00239
00240 float life;
00241
00242 float lifeVar;
00243
00244
00245 ccColor4F startColor;
00246
00247 ccColor4F startColorVar;
00248
00249 ccColor4F endColor;
00250
00251 ccColor4F endColorVar;
00252
00253
00254 float startSpin;
00255
00256 float startSpinVar;
00257
00258 float endSpin;
00259
00260 float endSpinVar;
00261
00262
00263
00264 tCCParticle *particles;
00265
00266 NSUInteger totalParticles;
00267
00268 NSUInteger particleCount;
00269
00270
00271
00272
00273
00274 float emissionRate;
00275 float emitCounter;
00276
00277
00278 CCTexture2D *texture_;
00279
00280 ccBlendFunc blendFunc_;
00281
00282
00283 tCCPositionType positionType_;
00284
00285
00286 BOOL autoRemoveOnFinish_;
00287
00288
00289 NSUInteger particleIdx;
00290
00291
00292 CC_UPDATE_PARTICLE_IMP updateParticleImp;
00293 SEL updateParticleSel;
00294
00295
00296 #if CC_ENABLE_PROFILERS
00297 CCProfilingTimer* _profilingTimer;
00298 #endif
00299 }
00300
00302 @property (nonatomic,readonly) BOOL active;
00304 @property (nonatomic,readonly) NSUInteger particleCount;
00306 @property (nonatomic,readwrite,assign) float duration;
00308 @property (nonatomic,readwrite,assign) CGPoint sourcePosition;
00310 @property (nonatomic,readwrite,assign) CGPoint posVar;
00312 @property (nonatomic,readwrite,assign) float life;
00314 @property (nonatomic,readwrite,assign) float lifeVar;
00316 @property (nonatomic,readwrite,assign) float angle;
00318 @property (nonatomic,readwrite,assign) float angleVar;
00319
00321 @property (nonatomic,readwrite,assign) CGPoint gravity;
00323 @property (nonatomic,readwrite,assign) float speed;
00325 @property (nonatomic,readwrite,assign) float speedVar;
00327 @property (nonatomic,readwrite,assign) float tangentialAccel;
00329 @property (nonatomic,readwrite,assign) float tangentialAccelVar;
00331 @property (nonatomic,readwrite,assign) float radialAccel;
00333 @property (nonatomic,readwrite,assign) float radialAccelVar;
00334
00336 @property (nonatomic,readwrite,assign) float startRadius;
00338 @property (nonatomic,readwrite,assign) float startRadiusVar;
00340 @property (nonatomic,readwrite,assign) float endRadius;
00342 @property (nonatomic,readwrite,assign) float endRadiusVar;
00344 @property (nonatomic,readwrite,assign) float rotatePerSecond;
00346 @property (nonatomic,readwrite,assign) float rotatePerSecondVar;
00347
00349 @property (nonatomic,readwrite,assign) float startSize;
00351 @property (nonatomic,readwrite,assign) float startSizeVar;
00353 @property (nonatomic,readwrite,assign) float endSize;
00355 @property (nonatomic,readwrite,assign) float endSizeVar;
00357 @property (nonatomic,readwrite,assign) ccColor4F startColor;
00359 @property (nonatomic,readwrite,assign) ccColor4F startColorVar;
00361 @property (nonatomic,readwrite,assign) ccColor4F endColor;
00363 @property (nonatomic,readwrite,assign) ccColor4F endColorVar;
00364
00365 @property (nonatomic,readwrite,assign) float startSpin;
00366
00367 @property (nonatomic,readwrite,assign) float startSpinVar;
00368
00369 @property (nonatomic,readwrite,assign) float endSpin;
00370
00371 @property (nonatomic,readwrite,assign) float endSpinVar;
00373 @property (nonatomic,readwrite,assign) float emissionRate;
00375 @property (nonatomic,readwrite,assign) NSUInteger totalParticles;
00377 @property (nonatomic,readwrite, retain) CCTexture2D * texture;
00379 @property (nonatomic,readwrite) ccBlendFunc blendFunc;
00387 @property (nonatomic,readwrite) BOOL blendAdditive;
00391 @property (nonatomic,readwrite) tCCPositionType positionType;
00396 @property (nonatomic,readwrite) BOOL autoRemoveOnFinish;
00401 @property (nonatomic,readwrite) NSInteger emitterMode;
00402
00408 +(id) particleWithFile:(NSString*)plistFile;
00409
00415 -(id) initWithFile:(NSString*) plistFile;
00416
00420 -(id) initWithDictionary:(NSDictionary*)dictionary;
00421
00423 -(id) initWithTotalParticles:(int) numberOfParticles;
00425 -(BOOL) addParticle;
00427 -(void) initParticle: (tCCParticle*) particle;
00429 -(void) stopSystem;
00431 -(void) resetSystem;
00433 -(BOOL) isFull;
00434
00436 -(void) updateQuadWithParticle:(tCCParticle*)particle newPosition:(CGPoint)pos;
00438 -(void) postStep;
00439
00441 -(void) update: (ccTime) dt;
00442
00443 @end
00444