public PathCPUParticleEmitter(GameScreen scrn, Vector2 pos, VectorPath path, ParticleEmitterConfig cfg) : base(scrn, cfg)
		{
			vectorPath = path;
			vectorPathCenter = path.Boundings.Center;

			Position = pos;
		}
Пример #2
0
        /// <summary>
        /// Export the specified ParticleEmitterConfig to the specified filename in PEX format.
        /// </summary>
        /// <param name="emitterConfig">Emitter config.</param>
        /// <param name="filename">Output filename.</param>
        public void Export(ParticleEmitterConfig emitterConfig, string filename)
        {
            // We don't use XmlSerializer here because the output format needed by PEX is bizzare.
            // I first tried to implement it using Serializer overrides, but that became much larger than
            // constructing by hand.
            var doc    = new XmlDocument();
            var parent = doc.CreateElement("particleEmitterConfig");

            AddXmlChild(doc, parent, "yCoordFlipped", "1");
            AddXmlChild(doc, parent, "sourcePosition", emitterConfig.SourcePosition);
            AddXmlChild(doc, parent, "sourcePositionVariance", emitterConfig.SourcePositionVariance);
            AddXmlChild(doc, parent, "speed", emitterConfig.Speed);
            AddXmlChild(doc, parent, "speedVariance", emitterConfig.SpeedVariance);
            AddXmlChild(doc, parent, "particleLifeSpan", emitterConfig.ParticleLifespan, "F4");
            AddXmlChild(doc, parent, "particleLifespanVariance", emitterConfig.ParticleLifespanVariance, "F4");
            AddXmlChild(doc, parent, "angle", emitterConfig.Angle, "F0");
            AddXmlChild(doc, parent, "angleVariance", emitterConfig.AngleVariance, "F0");
            AddXmlChild(doc, parent, "gravity", emitterConfig.Gravity);
            AddXmlChild(doc, parent, "radialAcceleration", emitterConfig.RadialAcceleration);
            AddXmlChild(doc, parent, "radialAccelVariance", emitterConfig.RadialAccelVariance);
            AddXmlChild(doc, parent, "tangentialAcceleration", emitterConfig.TangentialAcceleration);
            AddXmlChild(doc, parent, "tangentialAccelVariance", emitterConfig.TangentialAccelVariance);
            AddXmlChild(doc, parent, "startColor", emitterConfig.StartColor);
            AddXmlChild(doc, parent, "startColorVariance", emitterConfig.StartColorVariance);
            AddXmlChild(doc, parent, "finishColor", emitterConfig.FinishColor);
            AddXmlChild(doc, parent, "finishColorVariance", emitterConfig.FinishColorVariance);
            AddXmlChild(doc, parent, "maxParticles", emitterConfig.MaxParticles, "F0");
            AddXmlChild(doc, parent, "startParticleSize", emitterConfig.StartParticleSize);
            AddXmlChild(doc, parent, "startParticleSizeVariance", emitterConfig.StartParticleSizeVariance);
            AddXmlChild(doc, parent, "finishParticleSize", emitterConfig.FinishParticleSize);
            AddXmlChild(doc, parent, "finishParticleSizeVariance", emitterConfig.FinishParticleSizeVariance);
            AddXmlChild(doc, parent, "duration", emitterConfig.Duration);
            AddXmlChild(doc, parent, "emitterType", emitterConfig.EmitterType);
            AddXmlChild(doc, parent, "maxRadius", emitterConfig.MaxRadius);
            AddXmlChild(doc, parent, "maxRadiusVariance", emitterConfig.MaxRadiusVariance);
            AddXmlChild(doc, parent, "minRadius", emitterConfig.MinRadius);
            AddXmlChild(doc, parent, "minRadiusVariance", emitterConfig.MinRadiusVariance);
            AddXmlChild(doc, parent, "rotatePerSecond", emitterConfig.RotatePerSecond);
            AddXmlChild(doc, parent, "rotatePerSecondVariance", emitterConfig.RotatePerSecondVariance);
            AddXmlChild(doc, parent, "blendFuncSource", emitterConfig.BlendFuncSource);
            AddXmlChild(doc, parent, "blendFuncDestination", emitterConfig.BlendFuncDestination);
            AddXmlChild(doc, parent, "rotationStart", emitterConfig.RotationStart);
            AddXmlChild(doc, parent, "rotationStartVariance", emitterConfig.RotationStartVariance);
            AddXmlChild(doc, parent, "rotationEnd", emitterConfig.RotationEnd);
            AddXmlChild(doc, parent, "rotationEndVariance", emitterConfig.RotationEndVariance);
            AddXmlChild(doc, parent, "texture", emitterConfig.Sprite);


            doc.AppendChild(parent);
            try
            {
                doc.Save(filename);
            }
            catch (Exception e)
            {
                // It would be nice to display another dialog when something happens,
                // but this is a sample program and the application console will do.
                System.Console.WriteLine("Error saving to {0}: {1}", filename, e.Message);
            }
        }
Пример #3
0
        public PathCPUParticleEmitter(GameScreen scrn, FPoint pos, VectorPath path, ParticleEmitterConfig cfg, int order) : base(scrn, cfg, order)
        {
            vectorPath       = path;
            vectorPathCenter = path.Boundings.Center;

            Position = pos;
        }
		public AnimatedPathCPUParticleEmitter(GameScreen scrn, Vector2 pos, VectorPath path, ParticleEmitterConfig cfg, float delay, float length) : base(scrn, cfg)
		{
			vectorPath = path;
			vectorPathCenter = path.Boundings.Center;

			Position = pos;

			animationLength = length;
			animationInitialDelay = delay;
		}
Пример #5
0
        public override void onAddedToScene()
        {
            starTexture = scene.content.Load <Texture2D>("ColorEntities/star");
            starSprite  = new Sprite(starTexture);
            addComponent(starSprite);

            var collider = new CircleCollider(starTexture.Height / 2);

            addComponent(collider);

            particleConfig          = scene.content.Load <ParticleEmitterConfig>("Particles/star_death");
            particleConfig.duration = deathDuration;
        }
Пример #6
0
        public Fire(IEffectApi effectApi, int width, int height) : base(width, height)
        {
            _api            = effectApi;
            _render         = _api.CreateRender();
            _particleSystem = _api.CreateParticleSystem();

            _beginColor = new SKColor(128, 64, 16);
            var endColor = new SKColor(64, 64, 64);

            _particleEmitters = new List <IParticleEmitter>();

            int numEmbers = Math.Max((int)(Width / EmberDistance), 1);

            for (int i = 0; i < numEmbers; i++)
            {
                var xPos = Width / (numEmbers - 1f) * i;
                var yPos = Height;

                var emitterConfig = new ParticleEmitterConfig
                {
                    Position               = new Vector2(xPos, yPos),
                    AxisPosition           = new Vector2(xPos, yPos),
                    EmissionRate           = 8,
                    Angle                  = new Range <float>(45, 135),
                    Life                   = 4,
                    Speed                  = 4,
                    RadialAcceleration     = 0,
                    TangentialAcceleration = 0,
                    BeginColor             = _beginColor,
                    EndColor               = endColor,
                    BeginSize              = 4,
                    EndSize                = 4,
                    EnableSizeTransition   = true,
                    EnableColorTransition  = true,
                };

                var emitter = _particleSystem.AddEmitter(emitterConfig);
                _particleEmitters.Add(emitter);
            }
        }
		public AnimatedPathGPUParticleEmitter(GameScreen scrn, Vector2 pos, VectorPath path, ParticleEmitterConfig cfg, float delay, float length) : base(scrn, pos, path, cfg)
		{
			animationLength = length;
			animationInitialDelay = delay;
		}
Пример #8
0
		protected GPUParticleEmitter(GameScreen scrn, ParticleEmitterConfig cfg) : base(scrn)
		{
			_config = cfg;
		}
		public PointGPUParticleEmitter(GameScreen scrn, Vector2 pos, ParticleEmitterConfig cfg) : base(scrn, cfg)
		{
			_position = pos;
		}
Пример #10
0
 public AnimatedPathGPUParticleEmitter(GameScreen scrn, FPoint pos, VectorPath path, ParticleEmitterConfig cfg, float delay, float length, int order) : base(scrn, pos, path, cfg, order)
 {
     animationLength       = length;
     animationInitialDelay = delay;
 }
Пример #11
0
        public AnimatedPathCPUParticleEmitter(GameScreen scrn, FPoint pos, VectorPath path, ParticleEmitterConfig cfg, float delay, float length, int order) : base(scrn, cfg, order)
        {
            vectorPath       = path;
            vectorPathCenter = path.Boundings.Center;

            Position = pos;

            animationLength       = length;
            animationInitialDelay = delay;
        }
Пример #12
0
        static ParticleEmitterConfig Load(XDocument xDoc, string rootDir)
        {
            var root = xDoc.Element("particleEmitterConfig");

            var config = new ParticleEmitterConfig
            {
                SourcePosition         = GetVectorElement(root, "sourcePosition"),
                SourcePositionVariance = GetVectorElement(root, "sourcePositionVariance"),
                Speed                      = GetFloatElement(root, "speed"),
                SpeedVariance              = GetFloatElement(root, "speedVariance"),
                ParticleLifespan           = GetFloatElement(root, "particleLifeSpan"),
                ParticleLifespanVariance   = GetFloatElement(root, "particleLifespanVariance"),
                Angle                      = GetFloatElement(root, "angle"),
                AngleVariance              = GetFloatElement(root, "angleVariance"),
                Gravity                    = GetVectorElement(root, "gravity"),
                RadialAcceleration         = GetFloatElement(root, "radialAcceleration"),
                RadialAccelVariance        = GetFloatElement(root, "radialAccelVariance"),
                TangentialAcceleration     = GetFloatElement(root, "tangentialAcceleration"),
                TangentialAccelVariance    = GetFloatElement(root, "tangentialAccelVariance"),
                StartColor                 = GetColorElement(root, "startColor"),
                StartColorVariance         = GetColorElement(root, "startColorVariance"),
                FinishColor                = GetColorElement(root, "finishColor"),
                FinishColorVariance        = GetColorElement(root, "finishColorVariance"),
                MaxParticles               = (uint)GetIntElement(root, "maxParticles"),
                StartParticleSize          = GetFloatElement(root, "startParticleSize"),
                StartParticleSizeVariance  = GetFloatElement(root, "startParticleSizeVariance"),
                FinishParticleSize         = GetFloatElement(root, "finishParticleSize"),
                FinishParticleSizeVariance = root.Element("finishParticleSizeVariance") != null?GetFloatElement(root, "finishParticleSizeVariance") : GetFloatElement(root, "FinishParticleSizeVariance"),
                                                 Duration                = GetFloatElement(root, "duration"),
                                                 EmitterType             = (ParticleEmitterType)GetIntElement(root, "emitterType"),
                                                 MaxRadius               = GetFloatElement(root, "maxRadius"),
                                                 MaxRadiusVariance       = GetFloatElement(root, "maxRadiusVariance"),
                                                 MinRadius               = GetFloatElement(root, "minRadius"),
                                                 MinRadiusVariance       = GetFloatElement(root, "minRadiusVariance"),
                                                 RotatePerSecond         = GetFloatElement(root, "rotatePerSecond"),
                                                 RotatePerSecondVariance = GetFloatElement(root, "rotatePerSecondVariance"),
                                                 BlendFuncSource         = GetBlendElement(root, "blendFuncSource"),
                                                 BlendFuncDestination    = GetBlendElement(root, "blendFuncDestination"),
                                                 RotationStart           = GetFloatElement(root, "rotationStart"),
                                                 RotationStartVariance   = GetFloatElement(root, "rotationStartVariance"),
                                                 RotationEnd             = GetFloatElement(root, "rotationEnd"),
                                                 RotationEndVariance     = GetFloatElement(root, "rotationEndVariance")
            };

            config.EmissionRate = config.MaxParticles / config.ParticleLifespan;
            if (float.IsInfinity(config.EmissionRate))
            {
                Debug.Error("---- particle system EmissionRate (MaxParticles / ParticleLifespace) is infinity. Resetting to 10000");
                config.EmissionRate = 10000;
            }

            var textureElement = root.Element("texture");
            var data           = textureElement.Attribute("data");

            // texture could be either a separate file or base64 encoded tiff
            if (data != null)
            {
                using (var memoryStream = new MemoryStream(Convert.FromBase64String((string)data), writable: false))
                {
                    using (var stream = new GZipStream(memoryStream, CompressionMode.Decompress))
                    {
                        using (var mem = new MemoryStream())
                        {
                            stream.CopyTo(mem);

                            //var bitmap = System.Drawing.Image.FromStream(mem) as System.Drawing.Bitmap;
                            //var colors = new Color[bitmap.Width * bitmap.Height];
                            //
                            //for (var x = 0; x < bitmap.Width; x++)
                            //{
                            //	for (var y = 0; y < bitmap.Height; y++)
                            //	{
                            //		var drawColor = bitmap.GetPixel(x, y);
                            //		colors[x + y * bitmap.Width] = new Color(drawColor.R, drawColor.G, drawColor.B, drawColor.A);
                            //	}
                            //}
                            //
                            //var texture = new Texture2D(Core.GraphicsDevice, bitmap.Width, bitmap.Height);
                            //texture.SetData(colors);
                            //config.Sprite = new Textures.Sprite(texture);
                        }
                    }
                }
            }
            else
            {
                var path = Path.Combine(rootDir, (string)textureElement.Attribute("name"));
                using (var stream = TitleContainer.OpenStream(path))
                {
                    var texture = Texture2D.FromStream(Core.GraphicsDevice, stream);
                    config.Sprite = new Textures.Sprite(texture);
                }
            }

            return(config);
        }
Пример #13
0
 public PointGPUParticleEmitter(GameScreen scrn, FPoint pos, ParticleEmitterConfig cfg, int order) : base(scrn, cfg, order)
 {
     _position = pos;
 }
Пример #14
0
 /// <summary>
 /// loads a ParticleEmitterConfig and creates a ParticleEmitter to display it
 /// </summary>
 void LoadParticleSystem()
 {
     // load up the config then add a ParticleEmitter
     _particleEmitterConfig = Entity.Scene.Content.LoadParticleEmitterConfig(_particleConfigs[_currentParticleSystem]);
     ResetEmitter();
 }
Пример #15
0
 /// <summary>
 /// loads a ParticleEmitterConfig and creates a ParticleEmitter to display it
 /// </summary>
 void loadParticleSystem()
 {
     // load up the config then add a ParticleEmitter
     _particleEmitterConfig = entity.scene.content.Load <ParticleEmitterConfig>(_particleConfigs[_currentParticleSystem]);
     resetEmitter();
 }