public PathCPUParticleEmitter(GameScreen scrn, Vector2 pos, VectorPath path, ParticleEmitterConfig cfg) : base(scrn, cfg) { vectorPath = path; vectorPathCenter = path.Boundings.Center; Position = pos; }
/// <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); } }
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; }
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; }
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; }
protected GPUParticleEmitter(GameScreen scrn, ParticleEmitterConfig cfg) : base(scrn) { _config = cfg; }
public PointGPUParticleEmitter(GameScreen scrn, Vector2 pos, ParticleEmitterConfig cfg) : base(scrn, cfg) { _position = pos; }
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; }
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; }
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); }
public PointGPUParticleEmitter(GameScreen scrn, FPoint pos, ParticleEmitterConfig cfg, int order) : base(scrn, cfg, order) { _position = pos; }
/// <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(); }
/// <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(); }