/* * cocos2d for iPhone: http://www.cocos2d-iphone.org * * Copyright (c) 2008-2010 Ricardo Quesada * Copyright (c) 2011 Zynga Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ // cocos2d #import "CCParticleExamples.h" #import "CCTextureCache.h" #import "CCDirector.h" #import "Support/CGPointExtension.h" // // ParticleFireworks // @implementation CCParticleFireworks -(id) init { return [self initWithTotalParticles:1500]; } -(id) initWithTotalParticles:(NSUInteger)p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = kCCParticleDurationInfinity; // Gravity Mode self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(0,-90); // Gravity Mode: radial self.radialAccel = 0; self.radialAccelVar = 0; // Gravity Mode: speed of particles self.speed = 180; self.speedVar = 50; // emitter position CGSize winSize = [[CCDirector sharedDirector] winSize]; self.position = ccp(winSize.width/2, winSize.height/2); // angle angle = 90; angleVar = 20; // life of particles life = 3.5f; lifeVar = 1; // emits per frame emissionRate = totalParticles/life; // color of particles startColor.r = 0.5f; startColor.g = 0.5f; startColor.b = 0.5f; startColor.a = 1.0f; startColorVar.r = 0.5f; startColorVar.g = 0.5f; startColorVar.b = 0.5f; startColorVar.a = 0.1f; endColor.r = 0.1f; endColor.g = 0.1f; endColor.b = 0.1f; endColor.a = 0.2f; endColorVar.r = 0.1f; endColorVar.g = 0.1f; endColorVar.b = 0.1f; endColorVar.a = 0.2f; // size, in pixels startSize = 8.0f; startSizeVar = 2.0f; endSize = kCCParticleStartSizeEqualToEndSize; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = NO; } return self; } @end // // ParticleFire // @implementation CCParticleFire -(id) init { return [self initWithTotalParticles:250]; } -(id) initWithTotalParticles:(NSUInteger) p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = kCCParticleDurationInfinity; // Gravity Mode self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(0,0); // Gravity Mode: radial acceleration self.radialAccel = 0; self.radialAccelVar = 0; // Gravity Mode: speed of particles self.speed = 60; self.speedVar = 20; // starting angle angle = 90; angleVar = 10; // emitter position CGSize winSize = [[CCDirector sharedDirector] winSize]; self.position = ccp(winSize.width/2, 60); posVar = ccp(40, 20); // life of particles life = 3; lifeVar = 0.25f; // size, in pixels startSize = 54.0f; startSizeVar = 10.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per frame emissionRate = totalParticles/life; // color of particles startColor.r = 0.76f; startColor.g = 0.25f; startColor.b = 0.12f; startColor.a = 1.0f; startColorVar.r = 0.0f; startColorVar.g = 0.0f; startColorVar.b = 0.0f; startColorVar.a = 0.0f; endColor.r = 0.0f; endColor.g = 0.0f; endColor.b = 0.0f; endColor.a = 1.0f; endColorVar.r = 0.0f; endColorVar.g = 0.0f; endColorVar.b = 0.0f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = YES; } return self; } @end // // ParticleSun // @implementation CCParticleSun -(id) init { return [self initWithTotalParticles:350]; } -(id) initWithTotalParticles:(NSUInteger) p { if( (self=[super initWithTotalParticles:p]) ) { // additive self.blendAdditive = YES; // duration duration = kCCParticleDurationInfinity; // Gravity Mode self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(0,0); // Gravity mode: radial acceleration self.radialAccel = 0; self.radialAccelVar = 0; // Gravity mode: speed of particles self.speed = 20; self.speedVar = 5; // angle angle = 90; angleVar = 360; // emitter position CGSize winSize = [[CCDirector sharedDirector] winSize]; self.position = ccp(winSize.width/2, winSize.height/2); posVar = CGPointZero; // life of particles life = 1; lifeVar = 0.5f; // size, in pixels startSize = 30.0f; startSizeVar = 10.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per seconds emissionRate = totalParticles/life; // color of particles startColor.r = 0.76f; startColor.g = 0.25f; startColor.b = 0.12f; startColor.a = 1.0f; startColorVar.r = 0.0f; startColorVar.g = 0.0f; startColorVar.b = 0.0f; startColorVar.a = 0.0f; endColor.r = 0.0f; endColor.g = 0.0f; endColor.b = 0.0f; endColor.a = 1.0f; endColorVar.r = 0.0f; endColorVar.g = 0.0f; endColorVar.b = 0.0f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; } return self; } @end // // ParticleGalaxy // @implementation CCParticleGalaxy -(id) init { return [self initWithTotalParticles:200]; } -(id) initWithTotalParticles:(NSUInteger)p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = kCCParticleDurationInfinity; // Gravity Mode self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(0,0); // Gravity Mode: speed of particles self.speed = 60; self.speedVar = 10; // Gravity Mode: radial self.radialAccel = -80; self.radialAccelVar = 0; // Gravity Mode: tagential self.tangentialAccel = 80; self.tangentialAccelVar = 0; // angle angle = 90; angleVar = 360; // emitter position CGSize winSize = [[CCDirector sharedDirector] winSize]; self.position = ccp(winSize.width/2, winSize.height/2); posVar = CGPointZero; // life of particles life = 4; lifeVar = 1; // size, in pixels startSize = 37.0f; startSizeVar = 10.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per second emissionRate = totalParticles/life; // color of particles startColor.r = 0.12f; startColor.g = 0.25f; startColor.b = 0.76f; startColor.a = 1.0f; startColorVar.r = 0.0f; startColorVar.g = 0.0f; startColorVar.b = 0.0f; startColorVar.a = 0.0f; endColor.r = 0.0f; endColor.g = 0.0f; endColor.b = 0.0f; endColor.a = 1.0f; endColorVar.r = 0.0f; endColorVar.g = 0.0f; endColorVar.b = 0.0f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = YES; } return self; } @end // // ParticleFlower // @implementation CCParticleFlower -(id) init { return [self initWithTotalParticles:250]; } -(id) initWithTotalParticles:(NSUInteger) p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = kCCParticleDurationInfinity; // Gravity Mode self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(0,0); // Gravity Mode: speed of particles self.speed = 80; self.speedVar = 10; // Gravity Mode: radial self.radialAccel = -60; self.radialAccelVar = 0; // Gravity Mode: tagential self.tangentialAccel = 15; self.tangentialAccelVar = 0; // angle angle = 90; angleVar = 360; // emitter position CGSize winSize = [[CCDirector sharedDirector] winSize]; self.position = ccp(winSize.width/2, winSize.height/2); posVar = CGPointZero; // life of particles life = 4; lifeVar = 1; // size, in pixels startSize = 30.0f; startSizeVar = 10.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per second emissionRate = totalParticles/life; // color of particles startColor.r = 0.50f; startColor.g = 0.50f; startColor.b = 0.50f; startColor.a = 1.0f; startColorVar.r = 0.5f; startColorVar.g = 0.5f; startColorVar.b = 0.5f; startColorVar.a = 0.5f; endColor.r = 0.0f; endColor.g = 0.0f; endColor.b = 0.0f; endColor.a = 1.0f; endColorVar.r = 0.0f; endColorVar.g = 0.0f; endColorVar.b = 0.0f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = YES; } return self; } @end // // ParticleMeteor // @implementation CCParticleMeteor -(id) init { return [self initWithTotalParticles:150]; } -(id) initWithTotalParticles:(NSUInteger) p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = kCCParticleDurationInfinity; // Gravity Mode self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(-200,200); // Gravity Mode: speed of particles self.speed = 15; self.speedVar = 5; // Gravity Mode: radial self.radialAccel = 0; self.radialAccelVar = 0; // Gravity Mode: tagential self.tangentialAccel = 0; self.tangentialAccelVar = 0; // angle angle = 90; angleVar = 360; // emitter position CGSize winSize = [[CCDirector sharedDirector] winSize]; self.position = ccp(winSize.width/2, winSize.height/2); posVar = CGPointZero; // life of particles life = 2; lifeVar = 1; // size, in pixels startSize = 60.0f; startSizeVar = 10.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per second emissionRate = totalParticles/life; // color of particles startColor.r = 0.2f; startColor.g = 0.4f; startColor.b = 0.7f; startColor.a = 1.0f; startColorVar.r = 0.0f; startColorVar.g = 0.0f; startColorVar.b = 0.2f; startColorVar.a = 0.1f; endColor.r = 0.0f; endColor.g = 0.0f; endColor.b = 0.0f; endColor.a = 1.0f; endColorVar.r = 0.0f; endColorVar.g = 0.0f; endColorVar.b = 0.0f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = YES; } return self; } @end // // ParticleSpiral // @implementation CCParticleSpiral -(id) init { return [self initWithTotalParticles:500]; } -(id) initWithTotalParticles:(NSUInteger) p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = kCCParticleDurationInfinity; // Gravity Mode self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(0,0); // Gravity Mode: speed of particles self.speed = 150; self.speedVar = 0; // Gravity Mode: radial self.radialAccel = -380; self.radialAccelVar = 0; // Gravity Mode: tagential self.tangentialAccel = 45; self.tangentialAccelVar = 0; // angle angle = 90; angleVar = 0; // emitter position CGSize winSize = [[CCDirector sharedDirector] winSize]; self.position = ccp(winSize.width/2, winSize.height/2); posVar = CGPointZero; // life of particles life = 12; lifeVar = 0; // size, in pixels startSize = 20.0f; startSizeVar = 0.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per second emissionRate = totalParticles/life; // color of particles startColor.r = 0.5f; startColor.g = 0.5f; startColor.b = 0.5f; startColor.a = 1.0f; startColorVar.r = 0.5f; startColorVar.g = 0.5f; startColorVar.b = 0.5f; startColorVar.a = 0.0f; endColor.r = 0.5f; endColor.g = 0.5f; endColor.b = 0.5f; endColor.a = 1.0f; endColorVar.r = 0.5f; endColorVar.g = 0.5f; endColorVar.b = 0.5f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = NO; } return self; } @end // // ParticleExplosion // @implementation CCParticleExplosion -(id) init { return [self initWithTotalParticles:700]; } -(id) initWithTotalParticles:(NSUInteger)p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = 0.1f; self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(0,0); // Gravity Mode: speed of particles self.speed = 70; self.speedVar = 40; // Gravity Mode: radial self.radialAccel = 0; self.radialAccelVar = 0; // Gravity Mode: tagential self.tangentialAccel = 0; self.tangentialAccelVar = 0; // angle angle = 90; angleVar = 360; // emitter position CGSize winSize = [[CCDirector sharedDirector] winSize]; self.position = ccp(winSize.width/2, winSize.height/2); posVar = CGPointZero; // life of particles life = 5.0f; lifeVar = 2; // size, in pixels startSize = 15.0f; startSizeVar = 10.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per second emissionRate = totalParticles/duration; // color of particles startColor.r = 0.7f; startColor.g = 0.1f; startColor.b = 0.2f; startColor.a = 1.0f; startColorVar.r = 0.5f; startColorVar.g = 0.5f; startColorVar.b = 0.5f; startColorVar.a = 0.0f; endColor.r = 0.5f; endColor.g = 0.5f; endColor.b = 0.5f; endColor.a = 0.0f; endColorVar.r = 0.5f; endColorVar.g = 0.5f; endColorVar.b = 0.5f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = NO; } return self; } @end // // ParticleSmoke // @implementation CCParticleSmoke -(id) init { return [self initWithTotalParticles:200]; } -(id) initWithTotalParticles:(NSUInteger) p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = kCCParticleDurationInfinity; // Emitter mode: Gravity Mode self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(0,0); // Gravity Mode: radial acceleration self.radialAccel = 0; self.radialAccelVar = 0; // Gravity Mode: speed of particles self.speed = 25; self.speedVar = 10; // angle angle = 90; angleVar = 5; // emitter position CGSize winSize = [[CCDirector sharedDirector] winSize]; self.position = ccp(winSize.width/2, 0); posVar = ccp(20, 0); // life of particles life = 4; lifeVar = 1; // size, in pixels startSize = 60.0f; startSizeVar = 10.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per frame emissionRate = totalParticles/life; // color of particles startColor.r = 0.8f; startColor.g = 0.8f; startColor.b = 0.8f; startColor.a = 1.0f; startColorVar.r = 0.02f; startColorVar.g = 0.02f; startColorVar.b = 0.02f; startColorVar.a = 0.0f; endColor.r = 0.0f; endColor.g = 0.0f; endColor.b = 0.0f; endColor.a = 1.0f; endColorVar.r = 0.0f; endColorVar.g = 0.0f; endColorVar.b = 0.0f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = NO; } return self; } @end @implementation CCParticleSnow -(id) init { return [self initWithTotalParticles:700]; } -(id) initWithTotalParticles:(NSUInteger)p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = kCCParticleDurationInfinity; // set gravity mode. self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(0,-1); // Gravity Mode: speed of particles self.speed = 5; self.speedVar = 1; // Gravity Mode: radial self.radialAccel = 0; self.radialAccelVar = 1; // Gravity mode: tagential self.tangentialAccel = 0; self.tangentialAccelVar = 1; // emitter position self.position = (CGPoint) { [[CCDirector sharedDirector] winSize].width / 2, [[CCDirector sharedDirector] winSize].height + 10 }; posVar = ccp( [[CCDirector sharedDirector] winSize].width / 2, 0 ); // angle angle = -90; angleVar = 5; // life of particles life = 45; lifeVar = 15; // size, in pixels startSize = 10.0f; startSizeVar = 5.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per second emissionRate = 10; // color of particles startColor.r = 1.0f; startColor.g = 1.0f; startColor.b = 1.0f; startColor.a = 1.0f; startColorVar.r = 0.0f; startColorVar.g = 0.0f; startColorVar.b = 0.0f; startColorVar.a = 0.0f; endColor.r = 1.0f; endColor.g = 1.0f; endColor.b = 1.0f; endColor.a = 0.0f; endColorVar.r = 0.0f; endColorVar.g = 0.0f; endColorVar.b = 0.0f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = NO; } return self; } @end @implementation CCParticleRain -(id) init { return [self initWithTotalParticles:1000]; } -(id) initWithTotalParticles:(NSUInteger)p { if( (self=[super initWithTotalParticles:p]) ) { // duration duration = kCCParticleDurationInfinity; self.emitterMode = kCCParticleModeGravity; // Gravity Mode: gravity self.gravity = ccp(10,-10); // Gravity Mode: radial self.radialAccel = 0; self.radialAccelVar = 1; // Gravity Mode: tagential self.tangentialAccel = 0; self.tangentialAccelVar = 1; // Gravity Mode: speed of particles self.speed = 130; self.speedVar = 30; // angle angle = -90; angleVar = 5; // emitter position self.position = (CGPoint) { [[CCDirector sharedDirector] winSize].width / 2, [[CCDirector sharedDirector] winSize].height }; posVar = ccp( [[CCDirector sharedDirector] winSize].width / 2, 0 ); // life of particles life = 4.5f; lifeVar = 0; // size, in pixels startSize = 4.0f; startSizeVar = 2.0f; endSize = kCCParticleStartSizeEqualToEndSize; // emits per second emissionRate = 20; // color of particles startColor.r = 0.7f; startColor.g = 0.8f; startColor.b = 1.0f; startColor.a = 1.0f; startColorVar.r = 0.0f; startColorVar.g = 0.0f; startColorVar.b = 0.0f; startColorVar.a = 0.0f; endColor.r = 0.7f; endColor.g = 0.8f; endColor.b = 1.0f; endColor.a = 0.5f; endColorVar.r = 0.0f; endColorVar.g = 0.0f; endColorVar.b = 0.0f; endColorVar.a = 0.0f; self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"]; // additive self.blendAdditive = NO; } return self; } @end