source: 2014/24/EelisK/War_in_the_sky/War_in_the_sky/War_in_the_sky/War_in_the_sky.cs @ 4963

Revision 4963, 12.0 KB checked in by eetakoiv, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class War_in_the_sky : PhysicsGame
10{
11    public static War_in_the_sky Peli;
12    public Lentokone lentokone;
13    public Image pahiskoneenKuva;
14    public Image pahiskoneenKuvaPeilattu;
15    public Image pahiskoneenKuvaKaannettyPystysuunnassa;
16    public Image pahiskoneenKuvaPeilattuKaannettyPystysuunnassa;
17
18    public List<Pahiskone> pahiksetKentalla = new List<Pahiskone>();
19    int round = 1;
20
21    Image lentokoneenKuva;
22    Image lentokoneenKuvaKäännetty;
23    Image[] pilviKuvat = LoadImages("03", "13", "cloud", "fluffy_cloud", "footer-clouds");
24    const double lentokoneenMaxNopeus = 300;
25    const double lentokoneenKiihdytysNopeus = 250;
26    const double lentokoneenKaantymisNopeus = 3.0;
27    ExplosionSystem ammusSavu = new ExplosionSystem(LoadImage("smoke"), 500);
28    //private Animation ukkelinKavely;
29
30    //alkuvalikko
31    //vastustajien ampuminen ja level up
32    //roundit
33    //oman aluksen kehittäminen
34    //HUD
35
36    public override void Begin()
37    {
38
39
40
41
42
43
44        Level.Size = Screen.Size;
45        GameObject taustakuva = new GameObject(Level.Width, Level.Height);
46        taustakuva.Image = LoadImage("Taustakuva alkuun");
47        Add(taustakuva);
48        Level.AmbientLight = 0.0;
49        KirkastaRuutua(0.1, 1.0);
50        //ukkelinKavely = LoadAnimation("Lentsikka");
51        Timer.SingleShot(4, delegate { PimennaRuutua(0.1); });
52        Timer.SingleShot(5.5, delegate
53        {
54            PaaValikko(taustakuva);
55        });
56
57    }
58
59    /// <summary>
60    /// Pimennetään ruutua pikku hiljaa.
61    /// Oletusnopeus 0.01.
62    /// </summary>
63    public void PimennaRuutua(double nopeus)
64    {
65        Timer ajastin = new Timer();
66        ajastin.Interval = 0.1;
67        ajastin.Timeout += delegate
68        {
69            Level.AmbientLight -= nopeus;
70            if (Level.AmbientLight <= 0.0)
71            {
72                ajastin.Stop();
73                ajastin.Reset();
74            }
75        };
76        ajastin.Start();
77    }
78
79    /// <summary>
80    /// Kirkastetaan ruutua pikku hiljaa.
81    /// </summary>
82    public void KirkastaRuutua(double nopeus, double tavoite)
83    {
84        Timer ajastin = new Timer();
85        ajastin.Interval = 0.1;
86        ajastin.Timeout += delegate
87        {
88            //if (Level.AmbientLight > 0.1) return;
89            Level.AmbientLight += nopeus;
90            if (Level.AmbientLight > tavoite)
91            {
92                ajastin.Stop();
93                ajastin.Reset();
94            }
95        };
96        ajastin.Start();
97    }
98
99    void PaaValikko(GameObject taustakuva)
100    {
101        taustakuva.Destroy();
102        Level.Background.Color = Color.Black;
103        KirkastaRuutua(0.2, 1.0);
104        MultiSelectWindow alkuValikko = new MultiSelectWindow("War In The Sky",
105        "Start Game", "Info", "End Game");
106        Add(alkuValikko);
107        alkuValikko.ActiveColor = Color.Transparent;
108        alkuValikko.SetButtonColor(Color.Transparent);
109        alkuValikko.SelectionColor = Color.Brown;
110        alkuValikko.DefaultCancel = 2;
111
112        GameObject valikkoTausta = new GameObject(340, 400);
113        valikkoTausta.Image = LoadImage("Alku valikko");
114        Add(valikkoTausta);
115        Mouse.IsCursorVisible = false;
116        alkuValikko.AddItemHandler(0, delegate { AlustaPeli(); valikkoTausta.Destroy(); });
117        //alkuValikko.AddItemHandler(1, d);
118        alkuValikko.AddItemHandler(1, Exit);
119
120
121    }
122
123    void AlustaPeli()
124    {
125        Peli = this;
126        // TODO: Kirjoita ohjelmakoodisi tähän
127        AssaultRifle lentokone1Ase;
128        lentokone1Ase = new AssaultRifle(30, 30);
129        lentokone1Ase.Ammo.Value = 200;
130        lentokone1Ase.ProjectileCollision = AmmusOsui;
131        lentokone1Ase.Power.DefaultValue = 300;
132        lentokone1Ase.FireRate = 5;
133
134        lentokone = new Lentokone(70 * 2, 22.4 * 2, lentokone1Ase, 200);
135        //lentokone.CollisionIgnoreGroup = 1;
136        Add(lentokone);
137        lentokone.Mass = 0.5;
138        lentokone.LinearDamping = 0.99;
139        lentokone.Shape = Shape.Rectangle;
140        lentokoneenKuva = LoadImage("sotakone hyvis");
141        lentokoneenKuvaKäännetty = Image.Mirror(lentokoneenKuva);
142        lentokone.Image = lentokoneenKuvaKäännetty;
143        //lentokone.Size = new Vector(150.0, 150.0);
144        Camera.Follow(lentokone);
145        Camera.StayInLevel = true;
146
147        lentokone.Add(lentokone1Ase);
148        lentokone1Ase.IsVisible = false;
149
150        AloitaRound();
151
152        Add(ammusSavu);
153        ammusSavu.MaxVelocity = 7;
154        ammusSavu.MaxScale = 10;
155        ammusSavu.BlendMode = BlendMode.Alpha;
156
157        Level.Size = new Vector(4096, 4096);
158        Surface vasenReuna = Surface.CreateLeft(Level);
159        Surface alaReuna = Surface.CreateBottom(Level, 30, 80, 40, 10);
160        alaReuna.Position = new Vector(alaReuna.X, alaReuna.Y + alaReuna.Height);
161        Add(alaReuna, 3);
162        alaReuna.Tag = "reuna";
163        Surface oikeaReuna = Surface.CreateRight(Level);
164        Surface ylaReuna = Surface.CreateTop(Level);
165        Add(vasenReuna);
166        Add(oikeaReuna);
167        Add(ylaReuna);
168        // Level.CreateBorders(false);
169        GameObject taustakuva = new GameObject(Level.Width, Level.Height);
170        taustakuva.Image = LoadImage("Clear-sky-1363594685_18");
171        Add(taustakuva, -3);
172        Gravity = new Vector(0, -400);
173
174        Timer ajastin = new Timer();
175        ajastin.Interval = 5.5;
176        ajastin.Timeout += delegate { LuoPilvi(RandomGen.NextVector(Level.Left, Level.Bottom, Level.Right, Level.Top)); };
177        ajastin.Start();
178
179        AsetaOhjaimet();
180        for (int i = 0; i < 10; i++)
181        {
182            LuoPilvi(RandomGen.NextVector(Level.Left, Level.Bottom, Level.Right, Level.Top));
183        }
184
185    }
186
187    void AsetaOhjaimet()
188    {
189        Keyboard.Listen(Key.Right, ButtonState.Down, delegate
190        {
191            MuutaNopeutta(new Vector(1, 1));
192            lentokone.Image = lentokoneenKuvaKäännetty;
193            lentokone.ase.Angle = Angle.FromDegrees(0); ;
194        }, null);
195        Keyboard.Listen(Key.Left, ButtonState.Down, delegate
196        {
197            MuutaNopeutta(new Vector(-1, -1));
198            lentokone.Image = lentokoneenKuva;
199            lentokone.ase.Angle = Angle.FromDegrees(180);
200        }, null);
201        Keyboard.Listen(Key.Left, ButtonState.Released, PalautaPainovoima, null);
202        Keyboard.Listen(Key.Right, ButtonState.Released, PalautaPainovoima, null);
203        Keyboard.Listen(Key.Up, ButtonState.Down, MuutaKulmaa, null, new Vector(100.0, lentokoneenKaantymisNopeus));
204        Keyboard.Listen(Key.Down, ButtonState.Down, MuutaKulmaa, null, new Vector(100.0, -lentokoneenKaantymisNopeus));
205        Keyboard.Listen(Key.Space, ButtonState.Down, AmmuAseella, "ammu", lentokone);
206        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
207        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
208        Keyboard.Listen(Key.K, ButtonState.Pressed, delegate { MessageDisplay.Add(lentokone.Angle.Degrees.ToString()); }, null);
209        Keyboard.Listen(Key.Delete, ButtonState.Pressed, lentokone.Tuhoutui, null);
210    }
211
212    void MuutaNopeutta(Vector suunta)
213    {
214        if (lentokone.Velocity.X > lentokoneenMaxNopeus || lentokone.Velocity.X < -lentokoneenMaxNopeus)
215            return;
216
217        //lentokone.Push(suunta);
218        lentokone.Push(Vector.ComponentProduct(Vector.FromLengthAndAngle(lentokoneenKiihdytysNopeus, lentokone.Angle), suunta));
219        lentokone.IgnoresGravity = true;
220    }
221
222    void MuutaKulmaa(Vector suunta)
223    {
224        lentokone.Angle += suunta.Angle;
225    }
226
227    void PalautaPainovoima()
228    {
229        lentokone.IgnoresGravity = false;
230    }
231
232    void LuoPilvi(Vector paikka)
233    {
234        GameObject taustaPilvet = new GameObject(pilviKuvat[RandomGen.NextInt(pilviKuvat.Length - 1)]);
235        //taustaPilvet.Image = pilviKuva;
236        taustaPilvet.Size = new Vector(600.0, 400.0);
237        taustaPilvet.Position = paikka;
238        Add(taustaPilvet, 2);
239        Layers[-3].RelativeTransition = new Vector(0.3, 0.3);
240
241        taustaPilvet.MoveTo(new Vector(Level.Right + 400, taustaPilvet.Y), RandomGen.NextDouble(20, 50), delegate { taustaPilvet.Destroy(); });
242    }
243
244    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
245    {
246        if (kohde is Pahiskone)
247        {
248            Pahiskone kone = kohde as Pahiskone;
249            kone.ElamaLaskuri.Value -= 10;
250        }
251        else
252        {
253            ammus.Destroy();
254        }
255    }
256
257    void AmmuAseella(Lentokone lentokone)
258    {
259        PhysicsObject ammus = lentokone.ase.Shoot();
260        if (ammus == null) return;
261
262        ammus.Size = new Vector(25.0, 5.0);
263        ammus.Image = null;
264        ammus.Color = Color.DarkOrange;
265
266        ammus.MaximumLifetime = TimeSpan.FromSeconds(0.7);
267        ammus.Destroying += delegate
268        {
269            ammusSavu.AddEffect(ammus.Position, 50);
270            Explosion es = new Explosion(100);
271            es.IsVisible = false;
272            es.Position = ammus.Position;
273            es.Sound = null;
274            es.Force = 0;
275            es.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector shokki)
276            {
277                Pahiskone p = kohde as Pahiskone;
278                if (p != null)
279                    p.ElamaLaskuri.Value -= 30;
280
281            };
282            Add(es);
283        };
284
285    }
286
287    public void RoundPaattyi()
288    {
289        Timer.SingleShot(5, AloitaRound);
290    }
291
292    public void AloitaRound()
293    {
294        pahiksetKentalla.Clear();
295
296        round++;
297        const int KONEITA_ALUSSA = 2;
298
299        int koneitaRoundilla = KONEITA_ALUSSA + round / 5;
300        int ampumisProsentti = round * 2;
301        if (ampumisProsentti > 100) ampumisProsentti = 100;
302
303        for (int i = 0; i < koneitaRoundilla; i++)
304        {
305            LuoPahis(RandomGen.NextDouble(Level.Left, Level.Right), RandomGen.NextDouble(Level.Bottom, Level.Top), ampumisProsentti);
306        }
307
308        lentokone.Elamat.Value += lentokone.Elamat.MaxValue / 2;
309    }
310
311    void LuoPahis(double X, double Y, int ampumisProsentti)
312    {
313        Pahiskone pahiskone = new Pahiskone(79 * 2, 35.4 * 2, 100);
314        AddCollisionHandler<Pahiskone, PhysicsObject>(pahiskone, "reuna", delegate(Pahiskone tormaaja, PhysicsObject kohde) { tormaaja.OsuuAlareunaan(); });
315        pahiskone.Shape = Shape.Rectangle;
316        pahiskone.Position = new Vector(X, Y);
317        Add(pahiskone);
318        pahiksetKentalla.Add(pahiskone);
319        pahiskoneenKuva = LoadImage("PAHIS KONE 2");
320        pahiskoneenKuvaPeilattu = Image.Mirror(pahiskoneenKuva);
321        pahiskoneenKuvaKaannettyPystysuunnassa = Image.Flip(pahiskoneenKuva);
322        pahiskoneenKuvaPeilattuKaannettyPystysuunnassa = Image.Flip(pahiskoneenKuvaPeilattu);
323
324        FollowerBrain seuraajanAivot = new FollowerBrain(lentokone);
325        seuraajanAivot.Speed = 200;
326        seuraajanAivot.DistanceClose = 600;
327        seuraajanAivot.TurnWhileMoving = true;
328        seuraajanAivot.TargetClose += delegate() { VihuAmpuuLentokonetta(pahiskone, lentokone); };
329        pahiskone.Brain = seuraajanAivot;
330        pahiskone.Aivot = seuraajanAivot;
331        pahiskone.IgnoresCollisionResponse = true;
332        pahiskone.AmpumisProsentti = ampumisProsentti;
333    }
334
335    public void VihuAmpuuLentokonetta(Pahiskone pahis, Lentokone pelaaja)
336    {
337        const int AMPUMIS_RAJA = 99;
338
339        int ammutaanko = RandomGen.NextInt(pahis.AmpumisProsentti, 101);
340
341        if (ammutaanko > AMPUMIS_RAJA)
342        {
343            PhysicsObject p = pahis.Ase.Shoot();
344            if (p != null)
345                p.IgnoresCollisionResponse = true;
346        }
347    }
348
349    public void VihunAmmusOsuu(PhysicsObject ammus, PhysicsObject kohde)
350    {
351        Lentokone kone = kohde as Lentokone;
352
353        if (kone != null)
354            kone.Elamat.Value -= 5;
355    }
356}
Note: See TracBrowser for help on using the repository browser.