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,
00069 kCCPositionTypeGrouped,
00070 }tCCPositionType;
00071
00072
00073 enum {
00074 kPositionTypeFree = kCCPositionTypeFree,
00075 kPositionTypeGrouped = kCCPositionTypeGrouped,
00076 };
00077
00081 typedef struct sCCParticle {
00082 CGPoint pos;
00083 CGPoint startPos;
00084
00085 ccColor4F color;
00086 ccColor4F deltaColor;
00087
00088 float size;
00089 float deltaSize;
00090
00091 float rotation;
00092 float deltaRotation;
00093
00094 ccTime timeToLive;
00095
00096 union {
00097
00098 struct {
00099 CGPoint dir;
00100 float radialAccel;
00101 float tangentialAccel;
00102 } A;
00103
00104
00105 struct {
00106 float angle;
00107 float degreesPerSecond;
00108 float radius;
00109 float deltaRadius;
00110 } B;
00111 } mode;
00112
00113 }tCCParticle;
00114
00115 typedef void (*CC_UPDATE_PARTICLE_IMP)(id, SEL, tCCParticle*, CGPoint);
00116
00117 @class CCTexture2D;
00118
00162 @interface CCParticleSystem : CCNode <CCTextureProtocol>
00163 {
00164
00165 BOOL active;
00166
00167 float duration;
00168
00169 float elapsed;
00170
00171
00172
00173 CGPoint centerOfGravity;
00174
00175 CGPoint posVar;
00176
00177
00178 float angle;
00179
00180 float angleVar;
00181
00182
00183
00184 int emitterMode_;
00185 union {
00186
00187 struct {
00188
00189 CGPoint gravity;
00190
00191
00192 float speed;
00193
00194 float speedVar;
00195
00196
00197 float tangentialAccel;
00198
00199 float tangentialAccelVar;
00200
00201
00202 float radialAccel;
00203
00204 float radialAccelVar;
00205 } A;
00206
00207
00208 struct {
00209
00210
00211 float startRadius;
00212
00213 float startRadiusVar;
00214
00215 float endRadius;
00216
00217 float endRadiusVar;
00218
00219 float rotatePerSecond;
00220
00221 float rotatePerSecondVar;
00222 } B;
00223 } mode;
00224
00225
00226 float startSize;
00227
00228 float startSizeVar;
00229
00230 float endSize;
00231
00232 float endSizeVar;
00233
00234
00235 float life;
00236
00237 float lifeVar;
00238
00239
00240 ccColor4F startColor;
00241
00242 ccColor4F startColorVar;
00243
00244 ccColor4F endColor;
00245
00246 ccColor4F endColorVar;
00247
00248
00249 float startSpin;
00250
00251 float startSpinVar;
00252
00253 float endSpin;
00254
00255 float endSpinVar;
00256
00257
00258
00259 tCCParticle *particles;
00260
00261 int totalParticles;
00262
00263 int particleCount;
00264
00265
00266
00267
00268
00269 float emissionRate;
00270 float emitCounter;
00271
00272
00273 CCTexture2D *texture_;
00274
00275 ccBlendFunc blendFunc_;
00276
00277
00278 tCCPositionType positionType_;
00279
00280
00281 BOOL autoRemoveOnFinish_;
00282
00283
00284 int particleIdx;
00285
00286
00287 CC_UPDATE_PARTICLE_IMP updateParticleImp;
00288 SEL updateParticleSel;
00289
00290
00291 #if CC_ENABLE_PROFILERS
00292 CCProfilingTimer* _profilingTimer;
00293 #endif
00294 }
00295
00297 @property (nonatomic,readonly) BOOL active;
00299 @property (nonatomic,readonly) int particleCount;
00301 @property (nonatomic,readwrite,assign) float duration;
00303 @property (nonatomic,readwrite,assign) CGPoint centerOfGravity;
00305 @property (nonatomic,readwrite,assign) CGPoint posVar;
00307 @property (nonatomic,readwrite,assign) float life;
00309 @property (nonatomic,readwrite,assign) float lifeVar;
00311 @property (nonatomic,readwrite,assign) float angle;
00313 @property (nonatomic,readwrite,assign) float angleVar;
00314
00316 @property (nonatomic,readwrite,assign) CGPoint gravity;
00318 @property (nonatomic,readwrite,assign) float speed;
00320 @property (nonatomic,readwrite,assign) float speedVar;
00322 @property (nonatomic,readwrite,assign) float tangentialAccel;
00324 @property (nonatomic,readwrite,assign) float tangentialAccelVar;
00326 @property (nonatomic,readwrite,assign) float radialAccel;
00328 @property (nonatomic,readwrite,assign) float radialAccelVar;
00329
00331 @property (nonatomic,readwrite,assign) float startRadius;
00333 @property (nonatomic,readwrite,assign) float startRadiusVar;
00335 @property (nonatomic,readwrite,assign) float endRadius;
00337 @property (nonatomic,readwrite,assign) float endRadiusVar;
00339 @property (nonatomic,readwrite,assign) float rotatePerSecond;
00341 @property (nonatomic,readwrite,assign) float rotatePerSecondVar;
00342
00344 @property (nonatomic,readwrite,assign) float startSize;
00346 @property (nonatomic,readwrite,assign) float startSizeVar;
00348 @property (nonatomic,readwrite,assign) float endSize;
00350 @property (nonatomic,readwrite,assign) float endSizeVar;
00352 @property (nonatomic,readwrite,assign) ccColor4F startColor;
00354 @property (nonatomic,readwrite,assign) ccColor4F startColorVar;
00356 @property (nonatomic,readwrite,assign) ccColor4F endColor;
00358 @property (nonatomic,readwrite,assign) ccColor4F endColorVar;
00359
00360 @property (nonatomic,readwrite,assign) float startSpin;
00361
00362 @property (nonatomic,readwrite,assign) float startSpinVar;
00363
00364 @property (nonatomic,readwrite,assign) float endSpin;
00365
00366 @property (nonatomic,readwrite,assign) float endSpinVar;
00368 @property (nonatomic,readwrite,assign) float emissionRate;
00370 @property (nonatomic,readwrite,assign) int totalParticles;
00372 @property (nonatomic,readwrite, retain) CCTexture2D * texture;
00374 @property (nonatomic,readwrite) ccBlendFunc blendFunc;
00382 @property (nonatomic,readwrite) BOOL blendAdditive;
00386 @property (nonatomic,readwrite) tCCPositionType positionType;
00391 @property (nonatomic,readwrite) BOOL autoRemoveOnFinish;
00396 @property (nonatomic,readwrite) int emitterMode;
00397
00403 +(id) particleWithFile:(NSString*)plistFile;
00404
00410 -(id) initWithFile:(NSString*) plistFile;
00411
00415 -(id) initWithDictionary:(NSDictionary*)dictionary;
00416
00418 -(id) initWithTotalParticles:(int) numberOfParticles;
00420 -(BOOL) addParticle;
00422 -(void) initParticle: (tCCParticle*) particle;
00424 -(void) stopSystem;
00426 -(void) resetSystem;
00428 -(BOOL) isFull;
00429
00431 -(void) updateQuadWithParticle:(tCCParticle*)particle newPosition:(CGPoint)pos;
00433 -(void) postStep;
00434
00435 @end
00436