1 | using System; |
---|
2 | using Microsoft.Xna.Framework; |
---|
3 | |
---|
4 | namespace Jypeli.Effects |
---|
5 | { |
---|
6 | /// <summary> |
---|
7 | /// Järjestelmä liekeille |
---|
8 | /// </summary> |
---|
9 | public class Flame : ParticleSystem |
---|
10 | { |
---|
11 | private double addTime; |
---|
12 | |
---|
13 | /// <summary> |
---|
14 | /// Luo uuden liekin. |
---|
15 | /// </summary> |
---|
16 | /// <param name="image">Partikkelin kuva.</param> |
---|
17 | public Flame(Image image) |
---|
18 | : base(image, 100) |
---|
19 | { |
---|
20 | Angle = Angle.FromDegrees(90); |
---|
21 | BlendMode = BlendMode.Alpha; |
---|
22 | } |
---|
23 | |
---|
24 | /// <summary> |
---|
25 | /// Määritetään oletusarvot efektille |
---|
26 | /// </summary> |
---|
27 | protected override void InitializeParticles() |
---|
28 | { |
---|
29 | MinLifetime = 2.0; |
---|
30 | MaxLifetime = 2.2; |
---|
31 | |
---|
32 | MinScale = 70; |
---|
33 | MaxScale = 100; |
---|
34 | |
---|
35 | ScaleAmount = -2.0; |
---|
36 | AlphaAmount = 1.0; |
---|
37 | |
---|
38 | MinVelocity = 40; |
---|
39 | MaxVelocity = 70; |
---|
40 | |
---|
41 | MinAcceleration = 1; |
---|
42 | MaxAcceleration = 2; |
---|
43 | |
---|
44 | MinRotationSpeed = -MathHelper.PiOver4; |
---|
45 | MaxRotationSpeed = MathHelper.PiOver4; |
---|
46 | |
---|
47 | } |
---|
48 | |
---|
49 | /// <summary> |
---|
50 | /// Lasketaan liekin suunnalle satunnaisuutta |
---|
51 | /// </summary> |
---|
52 | /// <returns>Partikkelin suunta</returns> |
---|
53 | protected override Vector GiveRandomDirection() |
---|
54 | { |
---|
55 | return Vector.FromLengthAndAngle(1, Angle + Angle.FromDegrees(RandomGen.NextDouble(-5, 5))); |
---|
56 | } |
---|
57 | |
---|
58 | /// <summary> |
---|
59 | /// Päivitetään liekkiä |
---|
60 | /// </summary> |
---|
61 | /// <param name="time"></param> |
---|
62 | public override void Update(Time time) |
---|
63 | { |
---|
64 | double t = time.SinceLastUpdate.TotalSeconds; |
---|
65 | addTime += t; |
---|
66 | if (addTime > 0.05) |
---|
67 | { |
---|
68 | base.AddEffect(Position, 2); |
---|
69 | addTime = 0; |
---|
70 | } |
---|
71 | base.Update(time); |
---|
72 | } |
---|
73 | |
---|
74 | /// <summary> |
---|
75 | /// Alustetaan partikkeli |
---|
76 | /// </summary> |
---|
77 | /// <param name="p">Partikkeli joka alustetaan</param> |
---|
78 | /// <param name="position">Sijainti johon alustetaan</param> |
---|
79 | protected override void InitializeParticle(Particle p, Vector position) |
---|
80 | { |
---|
81 | base.InitializeParticle(p, position); |
---|
82 | if (!IgnoreWind) |
---|
83 | p.Acceleration = Game.Wind; |
---|
84 | } |
---|
85 | } |
---|
86 | } |
---|