internal ParticleEmitterConfig(ParticleEmitterConfigBuilder b, TextureRegion2D[] texArray, float size, float length) { Texture = texArray[b.TextureIndex]; TextureBounds = Texture.Bounds; TextureCenter = Texture.Center(); TextureSize = TextureBounds.Width; SpawnRate = b.SpawnRate * length; SpawnDelay = 1f / b.SpawnRate; ParticleLifetimeMin = b.ParticleLifetimeMin; ParticleLifetimeMax = b.ParticleLifetimeMax; ParticleRespawnTime = b.ParticleLifetimeMax; ParticleLifetimeIsRandom = FloatMath.FloatInequals(ParticleLifetimeMin, ParticleLifetimeMax); ParticleSpawnAngleMin = b.ParticleSpawnAngleMin; ParticleSpawnAngleMax = b.ParticleSpawnAngleMax; ParticleSpawnAngleIsRandom = FloatMath.FloatInequals(ParticleSpawnAngleMin, ParticleSpawnAngleMax); ParticleSpawnAngleIsTotal = FloatMath.FloatInequals(ParticleSpawnAngleMin, ParticleSpawnAngleMax) && FloatMath.EpsilonEquals(FloatMath.NormalizeAngle(ParticleSpawnAngleMin), FloatMath.NormalizeAngle(ParticleSpawnAngleMax)); if (!ParticleSpawnAngleIsRandom) { FixedParticleSpawnAngle = vectorOne.Rotate(ParticleSpawnAngleMin); } ParticleVelocityMin = b.ParticleVelocityMin; ParticleVelocityMax = b.ParticleVelocityMax; ParticleVelocityIsRandom = FloatMath.FloatInequals(ParticleVelocityMin, ParticleVelocityMax); ParticleAlphaInitial = b.ParticleAlphaInitial; ParticleAlphaFinal = b.ParticleAlphaFinal; ParticleSizeInitialMin = b.ParticleSizeInitialMin * size; ParticleSizeInitialMax = b.ParticleSizeInitialMax * size; ParticleSizeInitialIsRandom = FloatMath.FloatInequals(ParticleSizeInitialMin, ParticleSizeInitialMax); ParticleSizeFinalMin = b.ParticleSizeFinalMin * size; ParticleSizeFinalMax = b.ParticleSizeFinalMax * size; ParticleSizeFinalIsRandom = FloatMath.FloatInequals(ParticleSizeFinalMin, ParticleSizeFinalMax); ColorInitial = b.ColorInitial; ColorFinal = b.ColorFinal; ColorIsChanging = (ColorInitial != ColorFinal); }
public static ParticleEmitterConfigBuilder LoadFromXConfig(XConfigFile xcfg) { var builder = new ParticleEmitterConfigBuilder(); builder.TextureIndex = xcfg.GetInt("TextureIndex"); builder.SpawnRate = xcfg.GetInt("SpawnRate"); if (xcfg.Contains("ParticleLifetime")) { builder.ParticleLifetime = xcfg.GetFloat("ParticleLifetime"); } if (xcfg.Contains("ParticleLifetimeMin")) { builder.ParticleLifetimeMin = xcfg.GetFloat("ParticleLifetimeMin"); } if (xcfg.Contains("ParticleLifetimeMax")) { builder.ParticleLifetimeMax = xcfg.GetFloat("ParticleLifetimeMax"); } if (xcfg.Contains("ParticleSpawnAngle")) { builder.ParticleSpawnAngle = xcfg.GetFloat("ParticleSpawnAngle"); } if (xcfg.Contains("ParticleSpawnAngleMin")) { builder.ParticleSpawnAngleMin = xcfg.GetFloat("ParticleSpawnAngleMin"); } if (xcfg.Contains("ParticleSpawnAngleMax")) { builder.ParticleSpawnAngleMax = xcfg.GetFloat("ParticleSpawnAngleMax"); } if (xcfg.Contains("ParticleVelocity")) { builder.ParticleVelocity = xcfg.GetFloat("ParticleVelocity"); } if (xcfg.Contains("ParticleVelocityMin")) { builder.ParticleVelocityMin = xcfg.GetFloat("ParticleVelocityMin"); } if (xcfg.Contains("ParticleVelocityMax")) { builder.ParticleVelocityMax = xcfg.GetFloat("ParticleVelocityMax"); } if (xcfg.Contains("ParticleAlpha")) { builder.ParticleAlpha = xcfg.GetFloat("ParticleAlpha"); } if (xcfg.Contains("ParticleAlphaInitial")) { builder.ParticleAlphaInitial = xcfg.GetFloat("ParticleAlphaInitial"); } if (xcfg.Contains("ParticleAlphaFinal")) { builder.ParticleAlphaFinal = xcfg.GetFloat("ParticleAlphaFinal"); } if (xcfg.Contains("ParticleSize")) { builder.ParticleSize = xcfg.GetFloat("ParticleSize"); } if (xcfg.Contains("ParticleSizeInitial")) { builder.ParticleSizeInitial = xcfg.GetFloat("ParticleSizeInitial"); } if (xcfg.Contains("ParticleSizeInitialMin")) { builder.ParticleSizeInitialMin = xcfg.GetFloat("ParticleSizeInitialMin"); } if (xcfg.Contains("ParticleSizeInitialMax")) { builder.ParticleSizeInitialMax = xcfg.GetFloat("ParticleSizeInitialMax"); } if (xcfg.Contains("ParticleSizeFinal")) { builder.ParticleSizeFinal = xcfg.GetFloat("ParticleSizeFinal"); } if (xcfg.Contains("ParticleSizeFinalMin")) { builder.ParticleSizeFinalMin = xcfg.GetFloat("ParticleSizeFinalMin"); } if (xcfg.Contains("ParticleSizeFinalMax")) { builder.ParticleSizeFinalMax = xcfg.GetFloat("ParticleSizeFinalMax"); } if (xcfg.Contains("Color")) { builder.Color = xcfg.GetKnownColor("Color"); } if (xcfg.Contains("ColorInitial")) { builder.ColorInitial = xcfg.GetKnownColor("ColorInitial"); } if (xcfg.Contains("ColorFinal")) { builder.ColorFinal = xcfg.GetKnownColor("ColorFinal"); } return(builder); }
internal ParticleEmitterConfig(ParticleEmitterConfigBuilder b) { Texture = b.Texture; TextureBounds = Texture.Bounds; TextureCenter = Texture.Center(); TextureSize = TextureBounds.Width; SpawnRate = b.SpawnRate; SpawnDelay = 1f / b.SpawnRate; ParticleLifetimeMin = b.ParticleLifetimeMin; ParticleLifetimeMax = b.ParticleLifetimeMax; ParticleRespawnTime = b.ParticleLifetimeMax; ParticleLifetimeIsRandom = FloatMath.FloatInequals(ParticleLifetimeMin, ParticleLifetimeMax); ParticleSpawnAngleMin = b.ParticleSpawnAngleMin; ParticleSpawnAngleMax = b.ParticleSpawnAngleMax; ParticleSpawnAngleIsRandom = FloatMath.FloatInequals(ParticleSpawnAngleMin, ParticleSpawnAngleMax); ParticleSpawnAngleIsTotal = FloatMath.FloatInequals(ParticleSpawnAngleMin, ParticleSpawnAngleMax) && FloatMath.EpsilonEquals(FloatMath.NormalizeAngle(ParticleSpawnAngleMin), FloatMath.NormalizeAngle(ParticleSpawnAngleMax)); if (!ParticleSpawnAngleIsRandom) FixedParticleSpawnAngle = vectorOne.Rotate(ParticleSpawnAngleMin); ParticleVelocityMin = b.ParticleVelocityMin; ParticleVelocityMax = b.ParticleVelocityMax; ParticleVelocityIsRandom = FloatMath.FloatInequals(ParticleVelocityMin, ParticleVelocityMax); ParticleAlphaInitial = b.ParticleAlphaInitial; ParticleAlphaFinal = b.ParticleAlphaFinal; ParticleSizeInitialMin = b.ParticleSizeInitialMin; ParticleSizeInitialMax = b.ParticleSizeInitialMax; ParticleSizeInitialIsRandom = FloatMath.FloatInequals(ParticleSizeInitialMin, ParticleSizeInitialMax); ParticleSizeFinalMin = b.ParticleSizeFinalMin; ParticleSizeFinalMax = b.ParticleSizeFinalMax; ParticleSizeFinalIsRandom = FloatMath.FloatInequals(ParticleSizeFinalMin, ParticleSizeFinalMax); ColorInitial = b.ColorInitial; ColorFinal = b.ColorFinal; ColorIsChanging = (ColorInitial != ColorFinal); }