public CCParticleSystemQuad(CCParticleSystemConfig config)
            : base(config)
        {
            InitRenderCommand();

            Texture = config.Texture;

            CCBlendFunc blendFunc = new CCBlendFunc();

            blendFunc.Source      = config.BlendFunc.Source;
            blendFunc.Destination = config.BlendFunc.Destination;
            BlendFunc             = blendFunc;
        }
        public CCParticleSystemConfig ParticleSystemForKey(string key)
        {
            CCParticleSystemConfig config = null;

            try
            {
                if (Path.HasExtension(key))
                {
                    key = CCFileUtils.RemoveExtension(key);
                }

                configs.TryGetValue(key, out config);
            }
            catch (ArgumentNullException)
            {
                CCLog.Log("Particle System with key {0} does not exist.", key);
            }

            return(config);
        }
示例#3
0
        CCParticleSystemConfig AddParticleSystem(string fileConfig, string directoryName, bool loadAsync)
        {
            Debug.Assert(!String.IsNullOrEmpty(fileConfig), "ParticleSystemConfigCache: fileConfig MUST not be NULL");

            CCParticleSystemConfig psConfig = null;

            var assetName = fileConfig;

            if (Path.HasExtension(assetName))
            {
                assetName = CCFileUtils.RemoveExtension(assetName);
            }

            lock (dictLock)
            {
                configs.TryGetValue(assetName, out psConfig);
            }

            if (psConfig == null)
            {
                try
                {
                    psConfig = new CCParticleSystemConfig(fileConfig, directoryName, loadAsync);

                    lock (dictLock)
                    {
                        configs[assetName] = psConfig;
                    }
                }
                catch (Exception exc)
                {
                    CCLog.Log("Error creating configuration: {0}", fileConfig);
                    return(null);
                }
            }

            return(psConfig);
        }
        public void Remove(CCParticleSystemConfig particleSystem)
        {
            if (particleSystem == null)
            {
                return;
            }

            string key = null;

            foreach (var pair in configs)
            {
                if (pair.Value == particleSystem)
                {
                    key = pair.Key;
                    break;
                }
            }

            if (key != null)
            {
                configs.Remove(key);
            }
        }
        CCParticleSystemConfig AddParticleSystem(string fileConfig, string directoryName, bool loadAsync)
        {
            Debug.Assert(!String.IsNullOrEmpty(fileConfig), "ParticleSystemConfigCache: fileConfig MUST not be NULL");

            CCParticleSystemConfig psConfig = null;

            var assetName = fileConfig;

            if (Path.HasExtension(assetName))
            {
                assetName = CCFileUtils.RemoveExtension(assetName);
            }

            lock (dictLock)
            {
                configs.TryGetValue(assetName, out psConfig);
            }
            if (psConfig == null)
            {
                psConfig = new CCParticleSystemConfig(fileConfig, directoryName, loadAsync);

                if (psConfig != null)
                {
                    lock (dictLock)
                    {
                        configs[assetName] = psConfig;
                    }
                }
                else
                {
                    return(null);
                }
            }

            return(psConfig);
        }
        void OnConfigLoad(CCParticleSystemConfig config, Action <CCParticleSystemConfig> action)
        {
            // Right now Mac can not load images with data defined asyncly so we want to short circuit this and
            // just load the data from disk.  If not then we will perform an async load on the image
#if MACOS
            config.LoadParticleTexture();
            if (action != null)
            {
                action(config);
            }
#else
            string textureData = config.TextureData;

            // We will try loading the texture data first if it exists.  Hopefully we get lucky
            if (!string.IsNullOrEmpty(textureData))
            {
                //Debug.Assert(!string.IsNullOrEmpty(textureData),
                //    string.Format("CCParticleSystem: textureData does not exist : {0}", textureName));

                int dataLen = textureData.Length;
                if (dataLen != 0)
                {
                    var dataBytes = Convert.FromBase64String(textureData);
                    Debug.Assert(dataBytes != null,
                                 string.Format("CCParticleSystem: error decoding textureImageData : {0}", config.TextureName));

                    var imageBytes = ZipUtils.Inflate(dataBytes);
                    Debug.Assert(imageBytes != null,
                                 string.Format("CCParticleSystem: error init image with Data for texture : {0}", config.TextureName));

                    try
                    {
                        CCTextureCache.SharedTextureCache.AddImageAsync(imageBytes, config.TextureName, CCSurfaceFormat.Color, (loadedTexture) =>
                        {
                            if (loadedTexture != null)
                            {
                                config.Texture = loadedTexture;
                                if (action != null)
                                {
                                    action(config);
                                }
                            }
                            else
                            {
                                if (!string.IsNullOrEmpty(config.TextureName))
                                {
                                    bool bNotify = CCFileUtils.IsPopupNotify;
                                    CCFileUtils.IsPopupNotify = false;
                                    try
                                    {
                                        CCTextureCache.SharedTextureCache.AddImageAsync(config.TextureName, (tex2) =>
                                        {
                                            config.Texture = tex2;

                                            if (config.Texture == null)
                                            {
                                                config.Texture = CCParticleExample.DefaultTexture;
                                            }

                                            if (action != null)
                                            {
                                                action(config);
                                            }
                                        });
                                    }
                                    catch (Exception)
                                    {
                                        config.Texture = CCParticleExample.DefaultTexture;
                                    }

                                    CCFileUtils.IsPopupNotify = bNotify;
                                    if (config.Texture == null)
                                    {
                                        config.Texture = CCParticleExample.DefaultTexture;
                                    }
                                }
                            }
                        }
                                                                        );
                    }
                    catch (Exception ex)
                    {
                        CCLog.Log(ex.ToString());
                        config.Texture = CCParticleExample.DefaultTexture;
                    }
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(config.TextureName))
                {
                    bool bNotify = CCFileUtils.IsPopupNotify;
                    CCFileUtils.IsPopupNotify = false;
                    try
                    {
                        CCTextureCache.SharedTextureCache.AddImageAsync(config.TextureName, (tex2) =>
                        {
                            config.Texture = tex2;

                            if (config.Texture == null)
                            {
                                config.Texture = CCParticleExample.DefaultTexture;
                            }

                            if (action != null)
                            {
                                action(config);
                            }
                        });
                    }
                    catch (Exception)
                    {
                        config.Texture = CCParticleExample.DefaultTexture;
                    }

                    CCFileUtils.IsPopupNotify = bNotify;
                }
            }
#endif
        }
示例#7
0
        public CCParticleFire(CCPoint position, CCEmitterMode emitterMode = CCEmitterMode.Gravity) : base(250, emitterMode)
        {
            if (config == null)
            {
                config = new CCParticleSystemConfig();
                config.ParticleSystemType = CCParticleSystemType.Internal;

                config.Duration     = ParticleDurationInfinity;
                config.Life         = 3;
                config.LifeVar      = 0.25f;
                config.Position     = position;
                config.PositionVar  = new CCPoint(40, 20);
                config.Angle        = 90;
                config.AngleVar     = 10;
                config.StartSize    = 54.0f;
                config.StartSizeVar = 10.0f;
                config.EndSize      = ParticleStartSizeEqualToEndSize;

                config.EmitterMode = CCEmitterMode.Gravity;

                CCColor4F cstartColor = new CCColor4F();
                cstartColor.R     = 0.76f;
                cstartColor.G     = 0.25f;
                cstartColor.B     = 0.12f;
                cstartColor.A     = 1.0f;
                config.StartColor = cstartColor;

                CCColor4F cstartColorVar = new CCColor4F();
                cstartColorVar.R     = 0.0f;
                cstartColorVar.G     = 0.0f;
                cstartColorVar.B     = 0.0f;
                cstartColorVar.A     = 0.0f;
                config.StartColorVar = cstartColorVar;

                CCColor4F cendColor = new CCColor4F();
                cendColor.R     = 0.0f;
                cendColor.G     = 0.0f;
                cendColor.B     = 0.0f;
                cendColor.A     = 1.0f;
                config.EndColor = cendColor;

                CCColor4F cendColorVar = new CCColor4F();
                cendColorVar.R     = 0.0f;
                cendColorVar.G     = 0.0f;
                cendColorVar.B     = 0.0f;
                cendColorVar.A     = 0.0f;
                config.EndColorVar = cendColorVar;

                config.Gravity               = new CCPoint(0, 0);
                config.GravityRadialAccel    = 0;
                config.GravityRadialAccelVar = 0;
                config.GravitySpeed          = 60;
                config.GravitySpeedVar       = 20;

                config.Texture = CCParticleExample.DefaultTexture;
            }

            Duration     = config.Duration;
            Life         = config.Life;
            LifeVar      = config.LifeVar;
            Position     = config.Position;
            PositionVar  = config.PositionVar;
            Angle        = config.Angle;
            AngleVar     = config.AngleVar;
            StartSize    = config.StartSize;
            StartSizeVar = config.StartSizeVar;
            EndSize      = config.EndSize;

            EmissionRate = TotalParticles / Life;

            CCColor4F startColor = new CCColor4F();

            startColor.R = config.StartColor.R;
            startColor.G = config.StartColor.G;
            startColor.B = config.StartColor.B;
            startColor.A = config.StartColor.A;
            StartColor   = startColor;

            CCColor4F startColorVar = new CCColor4F();

            startColorVar.R = config.StartColorVar.R;
            startColorVar.G = config.StartColorVar.G;
            startColorVar.B = config.StartColorVar.B;
            startColorVar.A = config.StartColorVar.A;
            StartColorVar   = startColorVar;

            CCColor4F endColor = new CCColor4F();

            endColor.R = config.EndColor.R;
            endColor.G = config.EndColor.G;
            endColor.B = config.EndColor.B;
            endColor.A = config.EndColor.A;
            EndColor   = endColor;

            CCColor4F endColorVar = new CCColor4F();

            endColorVar.R = config.EndColorVar.R;
            endColorVar.G = config.EndColorVar.G;
            endColorVar.B = config.EndColorVar.B;
            endColorVar.A = config.EndColorVar.A;
            EndColorVar   = endColorVar;

            GravityMoveMode gravityMode = new GravityMoveMode();

            gravityMode.Gravity        = new CCPoint(config.Gravity);
            gravityMode.RadialAccel    = config.GravityRadialAccel;
            gravityMode.RadialAccelVar = config.GravityRadialAccelVar;
            gravityMode.Speed          = config.GravitySpeed;
            gravityMode.SpeedVar       = config.GravitySpeedVar;
            GravityMode = gravityMode;

            BlendAdditive = true;

            Texture = config.Texture;
        }
 public CCParticleSystemQuad(CCParticleSystemConfig config) : base(config)
 {}
示例#9
0
        public CCParticleSystem(CCParticleSystemConfig particleConfig) : this(particleConfig.MaxParticles, false)
        {
            Duration = particleConfig.Duration;;
            Life = particleConfig.Life;
            LifeVar = particleConfig.LifeVar;
            EmissionRate = TotalParticles / Life;

            Angle = particleConfig.Angle;
            AngleVar = particleConfig.AngleVar;

            CCColor4F startColor = new CCColor4F();
            startColor.R = particleConfig.StartColor.R;
            startColor.G = particleConfig.StartColor.G;
            startColor.B = particleConfig.StartColor.B;
            startColor.A = particleConfig.StartColor.A;
            StartColor = startColor;

            CCColor4F startColorVar = new CCColor4F();
            startColorVar.R = particleConfig.StartColorVar.R;
            startColorVar.G = particleConfig.StartColorVar.G;
            startColorVar.B = particleConfig.StartColorVar.B;
            startColorVar.A = particleConfig.StartColorVar.A;
            StartColorVar = startColorVar;

            CCColor4F endColor = new CCColor4F();
            endColor.R = particleConfig.EndColor.R;
            endColor.G = particleConfig.EndColor.G;
            endColor.B = particleConfig.EndColor.B;
            endColor.A = particleConfig.EndColor.A;
            EndColor = endColor;

            CCColor4F endColorVar = new CCColor4F();
            endColorVar.R = particleConfig.EndColorVar.R;
            endColorVar.G = particleConfig.EndColorVar.G;
            endColorVar.B = particleConfig.EndColorVar.B;
            endColorVar.A = particleConfig.EndColorVar.A;
            EndColorVar = endColorVar;

            StartSize = particleConfig.StartSize;
            StartSizeVar = particleConfig.StartSizeVar;
            EndSize = particleConfig.EndSize;
            EndSizeVar = particleConfig.EndSizeVar;

            CCPoint position;
            position.X = particleConfig.Position.X;
            position.Y = particleConfig.Position.Y;
            Position = position;

            CCPoint positionVar;
            positionVar.X = particleConfig.PositionVar.X;
            positionVar.Y = particleConfig.PositionVar.X;
            PositionVar = positionVar;

            StartSpin = particleConfig.StartSpin;
            StartSpinVar = particleConfig.StartSpinVar;
            EndSpin = particleConfig.EndSpin;
            EndSpinVar = particleConfig.EndSpinVar;

            EmitterMode = particleConfig.EmitterMode;

            if (EmitterMode == CCEmitterMode.Gravity)
            {
                GravityParticles = new CCParticleGravity[TotalParticles];

                GravityMoveMode newGravityMode = new GravityMoveMode();

                CCPoint gravity;
                gravity.X = particleConfig.Gravity.X;
                gravity.Y = particleConfig.Gravity.Y;
                newGravityMode.Gravity = gravity;

                newGravityMode.Speed = particleConfig.GravitySpeed;
                newGravityMode.SpeedVar = particleConfig.GravitySpeedVar;
                newGravityMode.RadialAccel = particleConfig.GravityRadialAccel;
                newGravityMode.RadialAccelVar = particleConfig.GravityRadialAccelVar;
                newGravityMode.TangentialAccel = particleConfig.GravityTangentialAccel;
                newGravityMode.TangentialAccelVar = particleConfig.GravityTangentialAccelVar;
                newGravityMode.RotationIsDir = particleConfig.GravityRotationIsDir;

                GravityMode = newGravityMode;
            }
            else if (EmitterMode == CCEmitterMode.Radius)
            {
                RadialParticles = new CCParticleRadial[TotalParticles];

                RadialMoveMode newRadialMode = new RadialMoveMode();

                newRadialMode.StartRadius = particleConfig.RadialStartRadius;
                newRadialMode.StartRadiusVar = particleConfig.RadialStartRadiusVar;
                newRadialMode.EndRadius = particleConfig.RadialEndRadius;
                newRadialMode.EndRadiusVar = particleConfig.RadialEndRadiusVar;
                newRadialMode.RotatePerSecond = particleConfig.RadialRotatePerSecond;
                newRadialMode.RotatePerSecondVar = particleConfig.RadialRotatePerSecondVar;

                RadialMode = newRadialMode;
            }
            else
            {
                Debug.Assert(false, "Invalid emitterType in config file");
                return;
            }
        }
示例#10
0
        public CCParticleFire(CCPoint position, CCEmitterMode emitterMode=CCEmitterMode.Gravity) : base(250, emitterMode)
        {
            if (config == null) 
            {
                config = new CCParticleSystemConfig ();
                config.ParticleSystemType = CCParticleSystemType.Internal;

                config.Duration = ParticleDurationInfinity;
                config.Life = 3;
                config.LifeVar = 0.25f;
                config.Position = position;
                config.PositionVar = new CCPoint(40, 20);
                config.Angle = 90;
                config.AngleVar = 10;
                config.StartSize = 54.0f;
                config.StartSizeVar = 10.0f;
                config.EndSize = ParticleStartSizeEqualToEndSize;

                config.EmitterMode = CCEmitterMode.Gravity;

                CCColor4F cstartColor = new CCColor4F();
                cstartColor.R = 0.76f;
                cstartColor.G = 0.25f;
                cstartColor.B = 0.12f;
                cstartColor.A = 1.0f;
                config.StartColor = cstartColor;

                CCColor4F cstartColorVar = new CCColor4F();
                cstartColorVar.R = 0.0f;
                cstartColorVar.G = 0.0f;
                cstartColorVar.B = 0.0f;
                cstartColorVar.A = 0.0f;
                config.StartColorVar = cstartColorVar;

                CCColor4F cendColor = new CCColor4F();
                cendColor.R = 0.0f;
                cendColor.G = 0.0f;
                cendColor.B = 0.0f;
                cendColor.A = 1.0f;
                config.EndColor = cendColor;

                CCColor4F cendColorVar = new CCColor4F();
                cendColorVar.R = 0.0f;
                cendColorVar.G = 0.0f;
                cendColorVar.B = 0.0f;
                cendColorVar.A = 0.0f;
                config.EndColorVar = cendColorVar;

                config.Gravity = new CCPoint(0, 0);
                config.GravityRadialAccel = 0;
                config.GravityRadialAccelVar = 0;
                config.GravitySpeed = 60;
                config.GravitySpeedVar = 20;

                config.Texture = CCParticleExample.DefaultTexture;

            }

            Duration = config.Duration;
            Life = config.Life;
            LifeVar = config.LifeVar;
            Position = config.Position;
            PositionVar = config.PositionVar;
            Angle = config.Angle;
            AngleVar = config.AngleVar;
            StartSize = config.StartSize;
            StartSizeVar = config.StartSizeVar;
            EndSize = config.EndSize;

            EmissionRate = TotalParticles / Life;

            CCColor4F startColor = new CCColor4F();
            startColor.R = config.StartColor.R;
            startColor.G = config.StartColor.G;
            startColor.B = config.StartColor.B;
            startColor.A = config.StartColor.A;
            StartColor = startColor;

            CCColor4F startColorVar = new CCColor4F();
            startColorVar.R = config.StartColorVar.R;
            startColorVar.G = config.StartColorVar.G;
            startColorVar.B = config.StartColorVar.B;
            startColorVar.A = config.StartColorVar.A;
            StartColorVar = startColorVar;

            CCColor4F endColor = new CCColor4F();
            endColor.R = config.EndColor.R;
            endColor.G = config.EndColor.G;
            endColor.B = config.EndColor.B;
            endColor.A = config.EndColor.A;
            EndColor = endColor;

            CCColor4F endColorVar = new CCColor4F();
            endColorVar.R = config.EndColorVar.R;
            endColorVar.G = config.EndColorVar.G;
            endColorVar.B = config.EndColorVar.B;
            endColorVar.A = config.EndColorVar.A;
            EndColorVar = endColorVar;

            GravityMoveMode gravityMode = new GravityMoveMode();
            gravityMode.Gravity = new CCPoint(config.Gravity);
            gravityMode.RadialAccel = config.GravityRadialAccel;
            gravityMode.RadialAccelVar = config.GravityRadialAccelVar;
            gravityMode.Speed = config.GravitySpeed;
            gravityMode.SpeedVar = config.GravitySpeedVar;
            GravityMode = gravityMode;

            BlendAdditive = true;

            Texture = config.Texture;
        }
示例#11
0
 public CCParticleSystemQuad(CCParticleSystemConfig config) : base(config)
 {
 }
示例#12
0
		public void Remove(CCParticleSystemConfig particleSystem)
		{
			if (particleSystem == null)
			{
				return;
			}

			string key = null;

			foreach (var pair in configs)
			{
				if (pair.Value == particleSystem)
				{
					key = pair.Key;
					break;
				}
			}

			if (key != null)
			{
				configs.Remove(key);
			}
		}
示例#13
0
		CCParticleSystemConfig AddParticleSystem(string fileConfig, string directoryName, bool loadAsync)
		{
			Debug.Assert(!String.IsNullOrEmpty(fileConfig), "ParticleSystemConfigCache: fileConfig MUST not be NULL");

			CCParticleSystemConfig psConfig = null;

			var assetName = fileConfig;
			if (Path.HasExtension(assetName))
			{
				assetName = CCFileUtils.RemoveExtension(assetName);
			}

			lock (dictLock)
			{
				configs.TryGetValue(assetName, out psConfig);
			}
			if (psConfig == null)
			{
				psConfig = new CCParticleSystemConfig(fileConfig, directoryName, loadAsync);

				if (psConfig != null)
				{
					lock (dictLock)
					{
						configs[assetName] = psConfig;
					}
				}
				else
				{
					return null;
				}
			}

			return psConfig;
		}
示例#14
0
		void OnConfigLoad(CCParticleSystemConfig config, Action<CCParticleSystemConfig> action)
		{

			// Right now Mac can not load images with data defined asyncly so we want to short circuit this and 
			// just load the data from disk.  If not then we will perform an async load on the image
#if MACOS
            config.LoadParticleTexture ();
            if (action != null)
                action (config);
#else

			string textureData = config.TextureData;

			// We will try loading the texture data first if it exists.  Hopefully we get lucky
			if (!string.IsNullOrEmpty(textureData))
			{
				//Debug.Assert(!string.IsNullOrEmpty(textureData),
				//    string.Format("CCParticleSystem: textureData does not exist : {0}", textureName));

				int dataLen = textureData.Length;
				if (dataLen != 0)
				{

					var dataBytes = Convert.FromBase64String(textureData);
					Debug.Assert(dataBytes != null,
					string.Format("CCParticleSystem: error decoding textureImageData : {0}", config.TextureName));

					var imageBytes = ZipUtils.Inflate(dataBytes);
					Debug.Assert(imageBytes != null,
					string.Format("CCParticleSystem: error init image with Data for texture : {0}", config.TextureName));

					try
					{
						CCTextureCache.SharedTextureCache.AddImageAsync(imageBytes, config.TextureName, CCSurfaceFormat.Color, (loadedTexture) =>
									{
										if (loadedTexture != null)
										{
											config.Texture = loadedTexture;
											if (action != null)
												action(config);
										}
										else
										{
											if (!string.IsNullOrEmpty(config.TextureName))
											{
												bool bNotify = CCFileUtils.IsPopupNotify;
												CCFileUtils.IsPopupNotify = false;
												try
												{
													CCTextureCache.SharedTextureCache.AddImageAsync(config.TextureName, (tex2) =>
													{
														config.Texture = tex2;

														if (config.Texture == null)
															config.Texture = CCParticleExample.DefaultTexture;

														if (action != null)
															action(config);
													});
												}
												catch (Exception)
												{
													config.Texture = CCParticleExample.DefaultTexture;
												}

												CCFileUtils.IsPopupNotify = bNotify;
												if (config.Texture == null)
													config.Texture = CCParticleExample.DefaultTexture;
											}

										}

									}
									);
					}
					catch (Exception ex)
					{
						CCLog.Log(ex.ToString());
						config.Texture = CCParticleExample.DefaultTexture;

					}

				}
			}
			else
			{
				if (!string.IsNullOrEmpty(config.TextureName))
				{
					bool bNotify = CCFileUtils.IsPopupNotify;
					CCFileUtils.IsPopupNotify = false;
					try
					{
						CCTextureCache.SharedTextureCache.AddImageAsync(config.TextureName, (tex2) =>
						{
							config.Texture = tex2;

							if (config.Texture == null)
								config.Texture = CCParticleExample.DefaultTexture;

							if (action != null)
								action(config);
						});
					}
					catch (Exception)
					{
						config.Texture = CCParticleExample.DefaultTexture;
					}

					CCFileUtils.IsPopupNotify = bNotify;

				}
			}
#endif
		}
示例#15
0
        public override void OnEnter()
        {
            base.OnEnter(); CCSize windowSize = Layer.VisibleBoundsWorldspace.Size;

            Color = new CCColor3B(0, 0, 0);
            RemoveChild(Background, true);
            Background = null;

            string filename = "Particles/" + title;

            CCParticleSystemConfig config;

            if (particleConfigManager.ContainsKey (filename))
                config = particleConfigManager [filename];
            else
            {
                config = new CCParticleSystemConfig(filename, null);
                particleConfigManager.Add (filename, config);
            }

            Emitter = new CCParticleSystemQuad(config);

            AddChild(Emitter, 10);

            Emitter.BlendAdditive = true;

			SetEmitterPosition();
        }
示例#16
0
        public CCParticleSystem(CCParticleSystemConfig particleConfig) : this(particleConfig.MaxParticles, false)
        {
            Duration     = particleConfig.Duration;;
            Life         = particleConfig.Life;
            LifeVar      = particleConfig.LifeVar;
            EmissionRate = TotalParticles / Life;

            Angle    = particleConfig.Angle;
            AngleVar = particleConfig.AngleVar;

            CCBlendFunc blendFunc = new CCBlendFunc();

            blendFunc.Source      = particleConfig.BlendFunc.Source;
            blendFunc.Destination = particleConfig.BlendFunc.Destination;
            BlendFunc             = blendFunc;

            CCColor4F startColor = new CCColor4F();

            startColor.R = particleConfig.StartColor.R;
            startColor.G = particleConfig.StartColor.G;
            startColor.B = particleConfig.StartColor.B;
            startColor.A = particleConfig.StartColor.A;
            StartColor   = startColor;

            CCColor4F startColorVar = new CCColor4F();

            startColorVar.R = particleConfig.StartColorVar.R;
            startColorVar.G = particleConfig.StartColorVar.G;
            startColorVar.B = particleConfig.StartColorVar.B;
            startColorVar.A = particleConfig.StartColorVar.A;
            StartColorVar   = startColorVar;

            CCColor4F endColor = new CCColor4F();

            endColor.R = particleConfig.EndColor.R;
            endColor.G = particleConfig.EndColor.G;
            endColor.B = particleConfig.EndColor.B;
            endColor.A = particleConfig.EndColor.A;
            EndColor   = endColor;

            CCColor4F endColorVar = new CCColor4F();

            endColorVar.R = particleConfig.EndColorVar.R;
            endColorVar.G = particleConfig.EndColorVar.G;
            endColorVar.B = particleConfig.EndColorVar.B;
            endColorVar.A = particleConfig.EndColorVar.A;
            EndColorVar   = endColorVar;

            StartSize    = particleConfig.StartSize;
            StartSizeVar = particleConfig.StartSizeVar;
            EndSize      = particleConfig.EndSize;
            EndSizeVar   = particleConfig.EndSizeVar;

            CCPoint position;

            position.X = particleConfig.Position.X;
            position.Y = particleConfig.Position.Y;
            Position   = position;

            CCPoint positionVar;

            positionVar.X = particleConfig.PositionVar.X;
            positionVar.Y = particleConfig.PositionVar.X;
            PositionVar   = positionVar;

            StartSpin    = particleConfig.StartSpin;
            StartSpinVar = particleConfig.StartSpinVar;
            EndSpin      = particleConfig.EndSpin;
            EndSpinVar   = particleConfig.EndSpinVar;

            EmitterMode = particleConfig.EmitterMode;

            if (EmitterMode == CCEmitterMode.Gravity)
            {
                GravityParticles = new CCParticleGravity[TotalParticles];

                GravityMoveMode newGravityMode = new GravityMoveMode();

                CCPoint gravity;
                gravity.X = particleConfig.Gravity.X;
                gravity.Y = particleConfig.Gravity.Y;
                newGravityMode.Gravity = gravity;

                newGravityMode.Speed              = particleConfig.GravitySpeed;
                newGravityMode.SpeedVar           = particleConfig.GravitySpeedVar;
                newGravityMode.RadialAccel        = particleConfig.GravityRadialAccel;
                newGravityMode.RadialAccelVar     = particleConfig.GravityRadialAccelVar;
                newGravityMode.TangentialAccel    = particleConfig.GravityTangentialAccel;
                newGravityMode.TangentialAccelVar = particleConfig.GravityTangentialAccelVar;
                newGravityMode.RotationIsDir      = particleConfig.GravityRotationIsDir;

                GravityMode = newGravityMode;
            }
            else if (EmitterMode == CCEmitterMode.Radius)
            {
                RadialParticles = new CCParticleRadial[TotalParticles];

                RadialMoveMode newRadialMode = new RadialMoveMode();

                newRadialMode.StartRadius        = particleConfig.RadialStartRadius;
                newRadialMode.StartRadiusVar     = particleConfig.RadialStartRadiusVar;
                newRadialMode.EndRadius          = particleConfig.RadialEndRadius;
                newRadialMode.EndRadiusVar       = particleConfig.RadialEndRadiusVar;
                newRadialMode.RotatePerSecond    = particleConfig.RadialRotatePerSecond;
                newRadialMode.RotatePerSecondVar = particleConfig.RadialRotatePerSecondVar;

                RadialMode = newRadialMode;
            }
            else
            {
                Debug.Assert(false, "Invalid emitterType in config file");
                return;
            }

            // Don't get the internal texture if a batchNode is used
            if (BatchNode == null)
            {
                Texture = particleConfig.Texture;
            }
        }
示例#17
0
        void ParticleSystemLoaded(CCParticleSystemConfig psConfig)
        {
            label.RemoveFromParent(true);

            CCParticleSystemQuad ignore = new CCParticleSystemQuad (psConfig);

            //ignore.TotalParticles = 200;
            CCNode parent1 = new CCNode ();
            CCParticleBatchNode parent2 = new CCParticleBatchNode (ignore.Texture);

            parent1.ContentSize = new CCSize (300.0f, 300.0f);

            for (int i = 0; i < 2; i++) {
                CCNode parent = (i == 0 ? parent1 : parent2);

                CCParticleSystemQuad emitter1 = new CCParticleSystemQuad (psConfig);
                //emitter1.TotalParticles = 200;
                emitter1.StartColor = (new CCColor4F (1, 0, 0, 1));
                emitter1.BlendAdditive = (false);
                CCParticleSystemQuad emitter2 = new CCParticleSystemQuad (psConfig);
                //emitter2.TotalParticles = 200;
                emitter2.StartColor = (new CCColor4F (0, 1, 0, 1));
                emitter2.BlendAdditive = (false);
                CCParticleSystemQuad emitter3 = new CCParticleSystemQuad (psConfig);
                //emitter3.TotalParticles = 200;
                emitter3.StartColor = (new CCColor4F (0, 0, 1, 1));
                emitter3.BlendAdditive = (false);

                CCSize s = Layer.VisibleBoundsWorldspace.Size;


                int neg = (i == 0 ? 1 : -1);

                emitter1.Position = (new CCPoint (s.Width / 2 - 30, s.Height / 2 + 60 * neg));
                emitter2.Position = (new CCPoint (s.Width / 2, s.Height / 2 + 60 * neg));
                emitter3.Position = (new CCPoint (s.Width / 2 + 30, s.Height / 2 + 60 * neg));

                parent.AddChild (emitter1, 0, 1);
                parent.AddChild (emitter2, 0, 2);
                parent.AddChild (emitter3, 0, 3);

                AddChild (parent, 10, 1000 + i);
            }

            Schedule(ReorderParticles, 1.0f);
        }
示例#18
0
		CCParticleSystemConfig AddParticleSystem(string fileConfig, string directoryName, bool loadAsync)
		{
			Debug.Assert(!String.IsNullOrEmpty(fileConfig), "ParticleSystemConfigCache: fileConfig MUST not be NULL");

			CCParticleSystemConfig psConfig = null;

			var assetName = fileConfig;
			if (Path.HasExtension(assetName))
			{
				assetName = CCFileUtils.RemoveExtension(assetName);
			}

			lock (dictLock)
			{
				configs.TryGetValue(assetName, out psConfig);
			}

			if (psConfig == null)
			{
                try 
                {
				    psConfig = new CCParticleSystemConfig(fileConfig, directoryName, loadAsync);

					lock (dictLock)
					{
						configs[assetName] = psConfig;
					}
                }
                catch (Exception exc)
                {
                    CCLog.Log("Error creating configuration: {0}", fileConfig);
                    return null;
                }
			}

			return psConfig;
		}