public virtual void ApplyEffectors(ref Effectors playerStatusEffect) { foreach (SkillArtifacts castEffect in onArtifactStart) { playerStatusEffect.effects[(int)castEffect.effect].ApplyEffect(caster, castEffect.severity, castEffect.time); } }
public Rockets() { Name = "Rockets"; MaxNumberOfParticles = 10; // The RocketEffector will add child particle systems. Children = new ParticleSystemCollection(); Parameters.AddUniform <float>(ParticleParameterNames.Lifetime).DefaultValue = 2; Effectors.Add(new StreamEmitter { DefaultEmissionRate = 2, }); Parameters.AddVarying <Vector3>(ParticleParameterNames.Position); Effectors.Add(new StartPositionEffector { Parameter = ParticleParameterNames.Position, Distribution = new BoxDistribution { MinValue = new Vector3(-5, 0, -5), MaxValue = new Vector3(5, 0, 0) }, }); Parameters.AddVarying <Vector3>(ParticleParameterNames.Direction); Effectors.Add(new StartDirectionEffector { Parameter = ParticleParameterNames.Direction, Distribution = new DirectionDistribution { Deviation = 0.5f, Direction = Vector3.UnitY }, }); Parameters.AddVarying <float>(ParticleParameterNames.LinearSpeed); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.LinearSpeed, Distribution = new UniformDistributionF(2, 6), }); Effectors.Add(new LinearVelocityEffector()); Parameters.AddUniform <Vector3>(ParticleParameterNames.LinearAcceleration).DefaultValue = new Vector3(0, -2f, 0); Effectors.Add(new LinearAccelerationEffector()); Parameters.AddUniform <float>(ParticleParameterNames.Alpha).DefaultValue = 0; // The RocketEffector creates and controls nested particle systems for the rocket trails // and explosions. Effectors.Add(new RocketEffector()); ParticleSystemValidator.Validate(this); }
private RocketExplosion(ContentManager contentManager) { Children = new ParticleSystemCollection { new RocketExplosionSmoke(contentManager), new RocketExplosionCore(contentManager), }; // This EmitterVelocity parameter can be used by all child particle systems. Parameters.AddUniform <Vector3F>(ParticleParameterNames.EmitterVelocity); // The ParticleSystemRecycler recycles this instance into the resource pool when all // particles are dead. Effectors.Add(new ParticleSystemRecycler { ResourcePool = Pool, }); ParticleSystemValidator.Validate(this); ParticleSystemValidator.Validate(Children[0]); ParticleSystemValidator.Validate(Children[1]); }
protected virtual void CloneCore(ParticleSystem source) { Name = source.Name; Enabled = source.Enabled; MaxNumberOfParticles = source.MaxNumberOfParticles; InitialDelay = source.InitialDelay; PreloadDuration = source.PreloadDuration; PreloadDeltaTime = source.PreloadDeltaTime; TimeScaling = source.TimeScaling; EnableMultithreading = source.EnableMultithreading; ReferenceFrame = source.ReferenceFrame; // Cloning the particle parameter collection is tricky because the parameters are generics. // We use an internal method of the parameter to do the job. foreach (var parameter in source.Parameters) { ((IParticleParameterInternal)parameter).AddCopyToCollection(Parameters); } foreach (var effector in source.Effectors) { Effectors.Add(effector.Clone()); } if (source.Children != null) { Children = new ParticleSystemCollection(); foreach (var particleSystem in source.Children) { Children.Add(particleSystem.Clone()); } } Pose = source.Pose; Shape = source.Shape.Clone(); }
private RocketTrail(ContentManager contentManager) { MaxNumberOfParticles = 200; Parameters.AddVarying <float>(ParticleParameterNames.Lifetime); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.Lifetime, Distribution = new UniformDistributionF(1, 2), }); Parameters.AddUniform <float>(ParticleParameterNames.EmissionRate); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.EmissionRate, DefaultValue = 60, }); Effectors.Add(new StreamEmitter { EmissionRateParameter = ParticleParameterNames.EmissionRate, }); Parameters.AddVarying <Vector3F>(ParticleParameterNames.Position); Effectors.Add(new StartPositionEffector { Parameter = ParticleParameterNames.Position, }); Parameters.AddVarying <Vector3F>(ParticleParameterNames.Direction); Effectors.Add(new StartDirectionEffector { Parameter = ParticleParameterNames.Direction, Distribution = new DirectionDistribution { Deviation = ConstantsF.Pi, Direction = Vector3F.UnitY }, }); Parameters.AddVarying <float>(ParticleParameterNames.LinearSpeed); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.LinearSpeed, Distribution = new UniformDistributionF(0.1f, 0.3f), }); // The StartVelocityBiasEffector adds a velocity to new particles. We use this to add // the rocket velocity (stored in the parameter "EmitterVelocity") to the start velocities // of the particles. Parameters.AddUniform <Vector3F>(ParticleParameterNames.EmitterVelocity); Effectors.Add(new StartVelocityBiasEffector { Strength = 0.1f }); Effectors.Add(new LinearVelocityEffector()); Parameters.AddVarying <float>(ParticleParameterNames.Angle); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.Angle, Distribution = new UniformDistributionF(-ConstantsF.Pi, ConstantsF.Pi), }); Parameters.AddVarying <float>(ParticleParameterNames.AngularSpeed); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.AngularSpeed, Distribution = new UniformDistributionF(-1, 1), }); Effectors.Add(new AngularVelocityEffector()); Parameters.AddVarying <float>("StartSize"); Effectors.Add(new StartValueEffector <float> { Parameter = "StartSize", Distribution = new UniformDistributionF(0.2f, 0.5f), }); Parameters.AddVarying <float>("EndSize"); Effectors.Add(new StartValueEffector <float> { Parameter = "EndSize", Distribution = new UniformDistributionF(0.5f, 1f), }); Parameters.AddVarying <float>(ParticleParameterNames.Size); Effectors.Add(new SingleLerpEffector { ValueParameter = ParticleParameterNames.Size, StartParameter = "StartSize", EndParameter = "EndSize", }); Parameters.AddVarying <Vector3F>(ParticleParameterNames.Color); Effectors.Add(new StartValueEffector <Vector3F> { Parameter = ParticleParameterNames.Color, Distribution = new LineSegmentDistribution { Start = new Vector3F(0.5f, 0.4f, 0.25f), End = new Vector3F(0.7f, 0.6f, 0.5f) }, }); Parameters.AddVarying <float>(ParticleParameterNames.Alpha); Effectors.Add(new FuncEffector <float, float> { InputParameter = ParticleParameterNames.NormalizedAge, OutputParameter = ParticleParameterNames.Alpha, Func = age => 6.7f * age * (1 - age) * (1 - age), }); Parameters.AddUniform <Texture2D>(ParticleParameterNames.Texture).DefaultValue = contentManager.Load <Texture2D>("Particles/Smoke"); // Draw behind explosion. Parameters.AddUniform <int>(ParticleParameterNames.DrawOrder).DefaultValue = -100; // The ParticleSystemRecycler recycles this instance into the specified resource // pool when all particles are dead. Effectors.Add(new ParticleSystemRecycler { ResourcePool = Pool, // Set a minimum life-time to avoid that the particle system is recycled too early. // (The rocket trail might need a few frames before particles are created.) MinRuntime = TimeSpan.FromSeconds(0.05f), }); ParticleSystemValidator.Validate(this); }
public RocketExplosionSmoke(ContentManager contentManager) { MaxNumberOfParticles = 200; Parameters.AddVarying <float>(ParticleParameterNames.Lifetime); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.Lifetime, Distribution = new UniformDistributionF(2, 4), }); // 30 particles are created instantly, and then no more particles. Effectors.Add(new StreamEmitter { DefaultEmissionRate = 30 * 60, EmissionLimit = 30, }); Parameters.AddVarying <Vector3>(ParticleParameterNames.Position); Effectors.Add(new StartPositionEffector()); Parameters.AddVarying <Vector3>(ParticleParameterNames.Direction); Effectors.Add(new StartDirectionEffector { Parameter = ParticleParameterNames.Direction, Distribution = new DirectionDistribution { Deviation = ConstantsF.TwoPi, Direction = Vector3.UnitY }, }); Parameters.AddVarying <float>(ParticleParameterNames.LinearSpeed); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.LinearSpeed, Distribution = new UniformDistributionF(1, 6), }); // The StartVelocityBiasEffector adds a velocity to new particles. We use this to add // the rocket velocity (stored in the parameter "EmitterVelocity") to the start velocities // of the particles. Effectors.Add(new StartVelocityBiasEffector { BiasVelocityParameter = ParticleParameterNames.EmitterVelocity, Strength = 1 }); Effectors.Add(new LinearVelocityEffector()); Parameters.AddUniform <Vector3>(ParticleParameterNames.LinearAcceleration).DefaultValue = new Vector3(0, -2.0f, 0); Effectors.Add(new LinearAccelerationEffector()); Parameters.AddUniform <float>(ParticleParameterNames.Damping).DefaultValue = 2.0f; Effectors.Add(new SingleDampingEffector()); Parameters.AddVarying <float>(ParticleParameterNames.Angle); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.Angle, Distribution = new UniformDistributionF(-ConstantsF.Pi, ConstantsF.Pi), }); Parameters.AddVarying <float>(ParticleParameterNames.AngularSpeed); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.AngularSpeed, Distribution = new UniformDistributionF(-1, 1), }); Effectors.Add(new AngularVelocityEffector()); Parameters.AddVarying <float>(ParticleParameterNames.Alpha); Effectors.Add(new FuncEffector <float, float> { InputParameter = ParticleParameterNames.NormalizedAge, OutputParameter = ParticleParameterNames.Alpha, Func = age => 6.7f * age * (1 - age) * (1 - age), }); Parameters.AddVarying <float>("StartSize"); Effectors.Add(new StartValueEffector <float> { Parameter = "StartSize", Distribution = new UniformDistributionF(1, 3), }); Parameters.AddVarying <float>("EndSize"); Effectors.Add(new StartValueEffector <float> { Parameter = "EndSize", Distribution = new UniformDistributionF(5, 10), }); Parameters.AddVarying <float>(ParticleParameterNames.Size); Effectors.Add(new SingleLerpEffector { ValueParameter = ParticleParameterNames.Size, StartParameter = "StartSize", EndParameter = "EndSize", }); Parameters.AddVarying <Vector3>(ParticleParameterNames.Color); Effectors.Add(new StartValueEffector <Vector3> { Parameter = ParticleParameterNames.Color, Distribution = new LineSegmentDistribution { Start = new Vector3(0.8f, 0.8f, 0.8f), End = new Vector3(1, 1, 1) }, }); Parameters.AddUniform <Texture2D>(ParticleParameterNames.Texture).DefaultValue = contentManager.Load <Texture2D>("Particles/Smoke"); }
public RocketExplosionCore(ContentManager contentManager) { MaxNumberOfParticles = 200; Parameters.AddUniform <float>(ParticleParameterNames.Lifetime).DefaultValue = 1; Effectors.Add(new StreamEmitter { DefaultEmissionRate = 20 * 60, EmissionLimit = 20, }); Parameters.AddVarying <Vector3>(ParticleParameterNames.Position); Effectors.Add(new StartPositionEffector()); Parameters.AddVarying <Vector3>(ParticleParameterNames.Direction); Effectors.Add(new StartDirectionEffector { Parameter = ParticleParameterNames.Direction, Distribution = new DirectionDistribution { Deviation = ConstantsF.TwoPi, Direction = Vector3.UnitY }, }); Parameters.AddVarying <float>(ParticleParameterNames.LinearSpeed); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.LinearSpeed, Distribution = new UniformDistributionF(0.5f, 2), }); // The StartVelocityBiasEffector adds a velocity to new particles. We use this to add // the rocket velocity (stored in the parameter "EmitterVelocity") to the start velocities // of the particles. Effectors.Add(new StartVelocityBiasEffector { Strength = 1 }); Effectors.Add(new LinearVelocityEffector()); Parameters.AddVarying <float>(ParticleParameterNames.Angle); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.Angle, Distribution = new UniformDistributionF(-ConstantsF.Pi, ConstantsF.Pi), }); Parameters.AddVarying <float>(ParticleParameterNames.AngularSpeed); Effectors.Add(new StartValueEffector <float> { Parameter = ParticleParameterNames.AngularSpeed, Distribution = new UniformDistributionF(-1, 1), }); Effectors.Add(new AngularVelocityEffector()); Parameters.AddVarying <float>("TargetAlpha"); Effectors.Add(new StartValueEffector <float> { Parameter = "TargetAlpha", Distribution = new UniformDistributionF(0.3f, 0.5f), }); Parameters.AddVarying <float>(ParticleParameterNames.Alpha); Effectors.Add(new SingleFadeEffector { ValueParameter = ParticleParameterNames.Alpha, TargetValueParameter = "TargetAlpha", FadeInStart = 0f, FadeInEnd = 0.3f, FadeOutStart = 0.3f, FadeOutEnd = 1f, }); Parameters.AddUniform <float>("StartSize").DefaultValue = 3; Parameters.AddUniform <float>("EndSize").DefaultValue = 5; Parameters.AddVarying <float>(ParticleParameterNames.Size); Effectors.Add(new SingleLerpEffector { ValueParameter = ParticleParameterNames.Size, StartParameter = "StartSize", EndParameter = "EndSize", }); Parameters.AddVarying <Vector3>(ParticleParameterNames.Color); Effectors.Add(new StartValueEffector <Vector3> { Parameter = ParticleParameterNames.Color, Distribution = new LineSegmentDistribution { Start = new Vector3(0.5f), End = new Vector3(0.66f) }, }); Parameters.AddUniform <Texture2D>(ParticleParameterNames.Texture).DefaultValue = contentManager.Load <Texture2D>("Particles/Explosion"); Parameters.AddUniform <float>(ParticleParameterNames.BlendMode).DefaultValue = 0; // Draw on top of smoke. Parameters.AddUniform <int>(ParticleParameterNames.DrawOrder).DefaultValue = 100; }
public override void ApplyEffectors(ref Effectors playerStatusEffects) { throw new System.NotImplementedException(); }