source: 2013/30/MiskaK/MW2(My Warfare 2)/Paranneltu Jypeli/Effects/Smoke.cs @ 4580

Revision 4580, 3.5 KB checked in by anlakane, 6 years ago (diff)

Talletus.

Line 
1using System;
2using Microsoft.Xna.Framework;
3
4namespace Jypeli.Effects
5{
6    /// <summary>
7    /// Savuefekti.
8    /// </summary>
9    public class Smoke : ParticleSystem
10    {
11        private double addTime;
12        private double width;
13
14        /// <summary>
15        /// Savu, johon vaikuttaa tuuli
16        /// </summary>
17        public Smoke()
18            : base(Game.LoadImageFromResources("smoke"), 100)
19        {
20            this.Angle = Angle.FromDegrees(90);
21            this.width = 5;
22        }
23
24        /// <summary>
25        /// Savu, johon vaikuttaa tuuli ja jonka tekstuuria ja leveyttä voi vaihtaa.
26        /// </summary>
27        /// <param name="particleImage">Partikkelin kuva</param>
28        /// <param name="width">Savun leveys</param>
29        public Smoke(Image particleImage, double width)
30            : base(particleImage, (int)width*4)
31        {
32            this.Angle = Angle.FromDegrees(90);
33            this.width = width;
34        }
35
36        /// <summary>
37        /// Savu, johon vaikuttaa tuuli ja jonka tekstuuria ja leveyttä voi vaihtaa.
38        /// </summary>
39        /// <param name="particleImage">Partikkelin kuva</param>
40        /// <param name="width">Savun leveys</param>
41        public Smoke(Image particleImage, double width, Angle smokeAngle)
42            : base(particleImage, (int)width * 4)
43        {
44            this.Angle = smokeAngle;
45            this.width = width;
46        }
47
48
49        /// <summary>
50        /// Määritetään oletusarvot efektille
51        /// </summary>
52        protected override void InitializeParticles()
53        {
54            MinLifetime = 4.0;
55            MaxLifetime = 4.2;
56           
57            MinScale = 70;
58            MaxScale = 100;
59
60            ScaleAmount = 1;
61
62            AlphaAmount = 0.3;
63
64            MinVelocity = 40;
65            MaxVelocity = 60;
66
67            MinAcceleration = 1;
68            MaxAcceleration = 1;
69
70            MinRotationSpeed = -MathHelper.PiOver4;
71            MaxRotationSpeed = MathHelper.PiOver4;
72
73        }
74
75        /// <summary>
76        /// Lasketaan savun suunnalle satunnaisuutta
77        /// </summary>
78        /// <returns>Partikkelin suunta</returns>
79        protected override Vector GiveRandomDirection()
80        {
81            return Vector.FromLengthAndAngle(1, Angle + Angle.FromDegrees(RandomGen.NextDouble(-5, 5)));
82        }
83
84        /// <summary>
85        /// Päivitetään savua
86        /// </summary>
87        /// <param name="time"></param>
88        public override void Update(Time time)
89        {
90            double t = time.SinceLastUpdate.TotalSeconds;
91            addTime += t;
92            if (addTime > 0.1)
93            {
94                for (int i = 0; i < (int)Math.Ceiling(width/50); i++)
95                {
96                    base.AddEffect(RandomGen.NextDouble(Position.X - width / 2, Position.X + width / 2), Position.Y, 2);
97                }           
98                addTime = 0;
99            }
100            base.Update(time);
101        }
102
103        /// <summary>
104        /// Alustetaan partikkeli
105        /// </summary>
106        /// <param name="p">Partikkeli joka alustetaan</param>
107        /// <param name="position">Sijainti johon alustetaan</param>
108        protected override void InitializeParticle(Particle p, Vector position)
109        {
110            base.InitializeParticle(p, position);
111
112            if(!IgnoreWind)
113            p.Acceleration = Game.Wind;
114           
115        }
116    }
117}
Note: See TracBrowser for help on using the repository browser.