source: 2013/30/MiskaK/MW2(My Warfare 2)/MW2(My Warfare 2)/MW2(My Warfare 2)/Helikopteri.cs @ 4647

Revision 4647, 5.1 KB checked in by anlakane, 6 years ago (diff)

Puuttuvan Helikopteri.cs:n lisäys versionhallintaan.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Jypeli;
6using Jypeli.Widgets;
7using Jypeli.Effects;
8
9/// <summary>
10/// Kopteri, joka nousee, laskeutuu, lentää paikasta toiseen ja voi tuhoutua.
11/// </summary>
12public class Helikopteri : Elava
13{
14    /// <summary>
15    /// Kopteri, josta puuttuu lavat.
16    /// </summary>
17    Image kopteriIlmanLapojaKuva = MW2_My_Warfare_2_.LoadImage("kopteri_ilmanlapoja");
18
19    /// <summary>
20    /// Irtonaiset kopterin lavat.
21    /// </summary>
22    Image kopterinLavatKuva = MW2_My_Warfare_2_.LoadImage("kopteri_lavat");
23
24    /// <summary>
25    /// Kopterin lentoanimaatio.
26    /// </summary>
27    Image[] kopteriIlmassa = MW2_My_Warfare_2_.LoadImages("kopteri_ilmassa1", "kopteri_ilmassa2", "kopteri_ilmassa3", "kopteri_ilmassa4");
28
29    public bool OnkoIlmassa { get; private set; }
30
31    private PhysicsObject KopterinLavat { get; set; }
32
33    private Timer NousuAjastin;
34    private Timer KasvuAjastin;
35    private Timer PienennysAjastin;
36
37    public ProgressBar ElamaMittari { get; private set; }
38
39    private const double LAPOJEN_MAX_PYORIMISNOPEUS = 20;
40    private const double KOPTERIN_KOON_MUUTOS_AIKA = 6;
41    private const double KOPTERIN_MINIMI_LEVEYS = 73;
42
43    public Helikopteri(double width, double height, double kesto, bool aloittaakoIlmasta)
44        : base(width, height, kesto)
45    {
46        KopterinLavat = new PhysicsObject(kopterinLavatKuva);
47        KopterinLavat.IgnoresCollisionResponse = true;
48        KopterinLavat.Position = new Vector(this.Position.X, this.Size.Y / 4);
49        KopterinLavat.AngularDamping = 1.00;
50        KopterinLavat.Shape = Shape.FromImage(kopterinLavatKuva);
51        this.Mass = 10000;
52        this.LinearDamping = 0.90;
53        this.AngularDamping = 0.90;
54        this.MakeStatic();
55        this.Image = kopteriIlmanLapojaKuva;
56        this.Add(KopterinLavat);
57        this.OnkoIlmassa = false;
58        NousuAjastin = new Timer();
59        KasvuAjastin = new Timer();
60        PienennysAjastin = new Timer();
61
62        Elamat = new DoubleMeter(50.0);
63        Elamat.MinValue = 0;
64        Elamat.MaxValue = 50;
65        Elamat.LowerLimit += delegate
66        {
67            KopteriTuhoutui();
68        };
69
70        ElamaMittari = new ProgressBar(150, 10);
71        ElamaMittari.BindTo(this.Elamat);
72        ElamaMittari.BarColor = Color.Blue;
73        ElamaMittari.BorderColor = Color.White;
74        Add(ElamaMittari);
75
76        IsUpdated = true;
77
78        if (aloittaakoIlmasta)
79        {
80            this.KopterinLavat.AngularVelocity = 20;
81            this.OnkoIlmassa = true;
82        }
83    }
84
85    /// <summary>
86    /// Nostetaan kopteri ilmaan.
87    /// </summary>
88    public void NouseIlmaan()
89    {
90        this.KopterinLavat.AngularDamping = 1.0;
91        NousuAjastin.Interval = 1.0;
92        NousuAjastin.Timeout += delegate
93        {
94            this.KopterinLavat.AngularVelocity = NousuAjastin.SecondCounter.Value;
95
96            if (this.KopterinLavat.AngularVelocity >= LAPOJEN_MAX_PYORIMISNOPEUS)
97            {
98                NousuAjastin.Stop();
99                NousuAjastin.Reset();
100                NostaKopteria();
101                return;
102            }
103        };
104        NousuAjastin.Start();
105    }
106
107    private void NostaKopteria()
108    {
109        KasvuAjastin.Interval = 0.05;
110        KasvuAjastin.Start();
111        KasvuAjastin.Timeout += delegate
112        {
113            if (KasvuAjastin.SecondCounter.Value >= KOPTERIN_KOON_MUUTOS_AIKA)
114            {
115                KasvuAjastin.Stop();
116                KasvuAjastin.Reset();
117                this.IgnoresCollisionResponse = true;
118                this.OnkoIlmassa = true;
119                return;
120            }
121
122            this.Size *= 1.005;
123            this.KopterinLavat.Size *= 1.005;
124        };
125
126    }
127
128    private void LaskeKopteria()
129    {
130        PienennysAjastin.Interval = 0.05;
131        PienennysAjastin.Start();
132        PienennysAjastin.Timeout += delegate
133        {
134            if (this.Size.X <= KOPTERIN_MINIMI_LEVEYS)
135            {
136                PienennysAjastin.Stop();
137                PienennysAjastin.Reset();
138                Laskeudu();
139                return;
140            }
141            this.Size /= 1.005;
142            this.KopterinLavat.Size /= 1.005;
143        };
144    }
145
146    public void AloitaLaskeutuminen()
147    {
148        LaskeKopteria();
149    }
150
151    private void Laskeudu()
152    {
153        this.OnkoIlmassa = false;
154        this.IgnoresCollisionResponse = false;
155        this.KopterinLavat.AngularDamping = 0.95;
156    }
157
158    private void KopteriTuhoutui()
159    {
160        Partikkelit.AddExplosionEffect(this.Position, 500);
161        this.Destroy();
162    }
163
164    public override void Update(Time time)
165    {
166        this.ElamaMittari.Position = new Vector(this.X, this.Y + this.Size.Y / 2 + 30);
167        KopterinLavat.Position = new Vector(this.Position.X, this.Size.Y / 4.3);
168        if (this.OnkoIlmassa)
169            this.KopterinLavat.AngularVelocity = LAPOJEN_MAX_PYORIMISNOPEUS;
170
171        base.Update(time);
172    }
173}
Note: See TracBrowser for help on using the repository browser.