source: 2014/27/AleksanteriV/Protokolla236/Protokolla236/Protokolla236/Protokolla236.cs @ 5204

Revision 5204, 22.3 KB checked in by mijoilmo, 7 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
9// apuva lista:
10
11public class Portti : PhysicsObject
12{
13    public int MistaVie { get; set; }
14    public int MihinVie { get; set; }
15    public string Vari { get; set; }
16
17    public Portti(double leveys, double korkeus)
18        : base(leveys, korkeus)
19    {
20
21    }
22
23}
24
25public class Protokolla236 : PhysicsGame
26{
27
28    Image tausta = LoadImage("taustakuvastarfield");
29
30    Image pelaajankuva = LoadImage("pelaaja1.0");
31
32    Image taso2 = LoadImage("taso2");
33    Image taso3 = LoadImage("taso3");
34    Image taso4 = LoadImage("taso4");
35    private Image[] tasoanim = LoadImages("taso1", "taso1.1", "taso1.2", "taso1.3", "taso1", "taso1", "taso1.3", "taso1", "taso1.1");
36    private Image[] liekkianim = LoadImages("liekki1.1", "liekki1.2");
37    private Image[] taso5anim = LoadImages("taso5.1", "taso5.2", "taso5.3", "taso5.4", "taso5.5", "taso5.6", "taso5.7");
38    private Image[] porttianim = LoadImages("portti01", "portti02", "portti03", "portti04", "portti03", "portti02");
39
40    Image Block021 = LoadImage("Block2.1");
41    Image BlockMusta = LoadImage("Blockmusta");
42    Image Blocklasi = LoadImage("Blocklasi");
43    Image Block121 = LoadImage("Block121");
44    Image Lasitausta = LoadImage("lasitausta");
45    Image isolasi1 = LoadImage("isolasi1");
46    Image isolasi2 = LoadImage("isolasi2");
47    Image isolasi3 = LoadImage("isolasi3");
48    Image isolasi4 = LoadImage("isolasi4");
49    Image isolasi5 = LoadImage("isolasi5");
50    Image isolasi6 = LoadImage("isolasi6");
51    Image isolasi7 = LoadImage("isolasi7");
52    Image isolasi8 = LoadImage("isolasi8");
53    private Image[] LabRat = LoadImages("Block1.1", "Block1.2", "Block1.3", "Block1.2");
54    private Image[] Block06anim = LoadImages("Block06", "Block061", "Block062", "Block063", "Block064", "Block063", "Block062", "Block063", "Block061");
55
56    private Image[] vihu1 = LoadImages("vihu01", "vihu02");
57    private Image[] vihu2 = LoadImages("vihu05", "vihu051", "vihu052", "vihu053", "vihu054");
58    private Image[] vihu3 = LoadImages("vihu031", "vihu032", "vihu033");
59    private Image[] vihu4 = LoadImages("vihu041", "vihu042", "vihu043", "vihu042");
60    Image sikioanim = LoadImage("sikio03");
61
62
63
64    private Image[] tasoliekkianim = LoadImages("taso23.1", "taso23.2", "taso23.3");
65
66    SoundEffect raketti = LoadSoundEffect("raketti");
67    List<Pelaaja> pelaajat = new List<Pelaaja>();
68    Timer MessageDisplaynAjastin;
69
70    SoundEffect laser = LoadSoundEffect("lasershot");
71    private Image[] ammusanim = LoadImages("ammus", "ammus");
72
73    private string[] soitin = { "nitrome - N.M.D", "nitrome - enemy 585 3", "nitrome - bullethead" };
74
75    SoundEffect rajahdysAani = LoadSoundEffect("the");
76    bool joMaalissa = false;
77
78    int K = RandomGen.NextInt(0, 2);
79    int nopeus = RandomGen.NextInt(3, 5);
80    int kenttaNro = 1;
81    private string mihinSpawnaaSeuraavaksi = "00FF00"; // ihan ekassa kentässä spawnaa tähän
82
83    public override void Begin()
84    {
85        MessageDisplay.Position += new Vector(Screen.Width / 2, 0);
86
87        MultiSelectWindow alkuValikko = new MultiSelectWindow("Pelin alkuvalikko",
88"yksinpeli tarina (1P)", "selviytyminen (2P):ei toimi", "Lopeta");
89        Add(alkuValikko);
90
91        alkuValikko.AddItemHandler(0, AloitaPeli);
92        alkuValikko.AddItemHandler(1, selviytyminen);
93        alkuValikko.AddItemHandler(2, Exit);
94        MediaPlayer.Play(soitin[K]);
95
96    }
97    void AloitaPeli()
98    {
99        ClearAll();
100        seuraavakentta();
101
102        MediaPlayer.IsRepeating = true;
103        MessageDisplay.Add("Protokolla:236");
104        MessageDisplay.Add("Tehtäväsi on päästä ulos piiritetyn avaruustukikohdan sisältä.");
105        MessageDisplay.Add("Kulje vihollis linjojen läpi äläkä jää turhaan odottamaan omaa tuhoasi!!!");
106        Keyboard.Listen(Key.F1, ButtonState.Pressed, Begin, null);
107        Keyboard.Listen(Key.Escape, ButtonState.Pressed, Exit, null);
108    }
109
110    void selviytyminen()
111    {
112        MediaPlayer.Play(soitin[2]);
113        kenttaNro = 5;
114        AloitaPeli();
115    }
116
117    void luokentta(string kenttakuva)
118    {
119        ColorTileMap ruudut = ColorTileMap.FromLevelAsset(kenttakuva);
120
121        Pelaaja pelaaja1 = luoPelaaja(50, 50);
122        LuoElamaLaskuri(pelaaja1, Screen.Left + 150, Screen.Top - 20, Color.Red);
123        pelaaja1.Image = LoadImage("pelaaja1.0");
124
125        //Pelaaja pelaaja2 = luoPelaaja(50, 50);
126        //LuoElamaLaskuri(pelaaja2, Screen.Right - 150, Screen.Top - 20, Color.Blue);
127        //pelaaja2.Image = LoadImage("pelaaja2.0");
128
129
130        ruudut.SetTileMethod(Color.FromHexCode("00FF00"), AsetaPelaajanPaikka, "00FF00", pelaaja1);
131        //ruudut.SetTileMethod(Color.FromHexCode("00FFC5"), LuoPelaaja2);    6DFF54
132        ruudut.SetTileMethod(Color.FromHexCode("6DFF54"), Luomaali);
133        ruudut.SetTileMethod(Color.FromHexCode("000000"), LuoTaso, new Animation(tasoanim));
134        ruudut.SetTileMethod(Color.FromHexCode("FFFF00"), LuoTaso, (Animation)taso3);
135        ruudut.SetTileMethod(Color.FromHexCode("54FFEB"), LuoTaso, (Animation)taso4);
136        ruudut.SetTileMethod(Color.FromHexCode("FF0087"), LuoTaso, new Animation(taso5anim));
137        ruudut.SetTileMethod(Color.FromHexCode("0000FF"), LuoTaso, new Animation(tasoliekkianim));
138        ruudut.SetTileMethod(Color.FromHexCode("D9FF93"), LuoTaso, (Animation)Blocklasi);
139        ruudut.SetTileMethod(Color.FromHexCode("FF42C0"), LuoTausta, new Animation(LabRat));
140        ruudut.SetTileMethod(Color.FromHexCode("B7FF9E"), LuoTausta, new Animation(Block06anim));
141        ruudut.SetTileMethod(Color.FromHexCode("42B9FF"), LuoTausta, (Animation)BlockMusta);
142        ruudut.SetTileMethod(Color.FromHexCode("00FF90"), LuoTausta, (Animation)Block021);
143        ruudut.SetTileMethod(Color.FromHexCode("478DFF"), LuoTausta, (Animation)Block121);
144        ruudut.SetTileMethod(Color.FromHexCode("FFDB4C"), LuoTausta, (Animation)Lasitausta);
145        ruudut.SetTileMethod(Color.FromHexCode("A72BFF"), LuoTausta, (Animation)isolasi1);
146        ruudut.SetTileMethod(Color.FromHexCode("A73AFF"), LuoTausta, (Animation)isolasi2);
147        ruudut.SetTileMethod(Color.FromHexCode("A75BFF"), LuoTausta, (Animation)isolasi3);
148        ruudut.SetTileMethod(Color.FromHexCode("A746FF"), LuoTausta, (Animation)isolasi4);
149        ruudut.SetTileMethod(Color.FromHexCode("A778FF"), LuoTausta, (Animation)isolasi5);
150        ruudut.SetTileMethod(Color.FromHexCode("A797FF"), LuoTausta, (Animation)isolasi6);
151        ruudut.SetTileMethod(Color.FromHexCode("A788FF"), LuoTausta, (Animation)isolasi7);
152        ruudut.SetTileMethod(Color.FromHexCode("A7BAFF"), LuoTausta, (Animation)isolasi8);
153        ruudut.SetTileMethod(Color.FromHexCode("FF0000"), LuoVihu, new Animation(vihu2));
154        ruudut.SetTileMethod(Color.FromHexCode("FF5700"), LuoVihu, new Animation(vihu3));
155        ruudut.SetTileMethod(Color.FromHexCode("FF5711"), LuoVihu, new Animation(vihu4));
156
157        ruudut.SetTileMethod(Color.FromHexCode("A860FF"), LuoPortti, 1, 2, "000102"); // kentta1 --> kentta2
158        ruudut.SetTileMethod(Color.FromHexCode("BD87FF"), LuoPortti, 2, 1, "000201"); // kentta2 --> kentta1
159        ruudut.SetTileMethod(Color.FromHexCode("FFA8AC"), LuoPortti, 2, 3, "000203"); // kentta2 --> kentta3
160        ruudut.SetTileMethod(Color.FromHexCode("6DFF81"), LuoPortti, 3, 2, "000302"); // kentta3 --> kentta2
161        ruudut.SetTileMethod(Color.FromHexCode("35FFA7"), LuoPortti, 3, 4, "000304"); // kentta3 --> kentta4
162        ruudut.SetTileMethod(Color.FromHexCode("548DFF"), LuoPortti, 4, 3, "000403"); // kentta4 --> kentta3
163        ruudut.SetTileMethod(Color.FromHexCode("4C70FF"), LuoPortti, 4, 5, "000405"); // kentta4 --> kentta5
164        ruudut.SetTileMethod(Color.FromHexCode("AF87FF"), LuoPortti, 4, 5, "B00405"); // kentta4 --> kentta5
165        ruudut.SetTileMethod(Color.FromHexCode("FF9BAC"), LuoPortti, 5, 4, "B00504"); // kentta5 --> kentta4
166        ruudut.SetTileMethod(Color.FromHexCode("9A02FF"), LuoPortti, 5, 4, "000504"); // kentta5 --> kentta4
167        ruudut.SetTileMethod(Color.FromHexCode("FFCE93"), LuoPortti, 5, 6, "000506"); // kentta5 --> kentta6
168        ruudut.SetTileMethod(Color.FromHexCode("FF4989"), LuoPortti, 6, 5, "000605"); // kentta6 --> kentta5
169        ruudut.SetTileMethod(Color.FromHexCode("79FF3F"), LuoPortti, 6, 1, "000601"); // kentta6 --> kentta1
170        ruudut.SetTileMethod(Color.FromHexCode("35FFDA"), LuoPortti, 1, 6, "000106"); // kentta1 --> kentta6
171        ruudut.SetTileMethod(Color.FromHexCode("FF8797"), LuoPortti, 4, 7, "000407"); // kentta4 --> kentta7
172        ruudut.SetTileMethod(Color.FromHexCode("FF8793"), LuoPortti, 7, 4, "000704"); // kentta7 --> kentta4
173
174        ruudut.SetTileMethod(Color.FromHexCode("000102"), AsetaPelaajanPaikka, "000102", pelaaja1);
175        ruudut.SetTileMethod(Color.FromHexCode("000201"), AsetaPelaajanPaikka, "000201", pelaaja1);
176        ruudut.SetTileMethod(Color.FromHexCode("000203"), AsetaPelaajanPaikka, "000203", pelaaja1);
177        ruudut.SetTileMethod(Color.FromHexCode("000302"), AsetaPelaajanPaikka, "000302", pelaaja1);
178        ruudut.SetTileMethod(Color.FromHexCode("000304"), AsetaPelaajanPaikka, "000304", pelaaja1);
179        ruudut.SetTileMethod(Color.FromHexCode("000403"), AsetaPelaajanPaikka, "000403", pelaaja1);
180        ruudut.SetTileMethod(Color.FromHexCode("000405"), AsetaPelaajanPaikka, "000405", pelaaja1);
181        ruudut.SetTileMethod(Color.FromHexCode("000504"), AsetaPelaajanPaikka, "000504", pelaaja1);
182        ruudut.SetTileMethod(Color.FromHexCode("000506"), AsetaPelaajanPaikka, "000506", pelaaja1);
183        ruudut.SetTileMethod(Color.FromHexCode("000605"), AsetaPelaajanPaikka, "000605", pelaaja1);
184        ruudut.SetTileMethod(Color.FromHexCode("000601"), AsetaPelaajanPaikka, "000601", pelaaja1);
185        ruudut.SetTileMethod(Color.FromHexCode("000106"), AsetaPelaajanPaikka, "000106", pelaaja1);
186        ruudut.SetTileMethod(Color.FromHexCode("000407"), AsetaPelaajanPaikka, "000407", pelaaja1);
187        ruudut.SetTileMethod(Color.FromHexCode("000704"), AsetaPelaajanPaikka, "000704", pelaaja1);
188        ruudut.SetTileMethod(Color.FromHexCode("B00405"), AsetaPelaajanPaikka, "B00405", pelaaja1);
189        ruudut.SetTileMethod(Color.FromHexCode("B00504"), AsetaPelaajanPaikka, "B00504", pelaaja1);
190
191        ruudut.Execute(50, 50);
192
193        /* taustakuva */
194        GameObject tausta1 = new GameObject(Level.Width, Level.Height);
195        tausta1.Image = tausta;
196        Add(tausta1, -3);
197        Layers[-3].RelativeTransition = new Vector(0.2, 0.2);
198
199
200        //Gravity = new Vector(0.0, -150.0);
201        Level.CreateBorders(0.5, true);
202        LisaaNappaimet(pelaajat);
203        Camera.Follow(pelaajat.ToArray());
204    }
205
206    void AsetaPelaajanPaikka(Vector paikka, double leveys, double korkeus, String mihinSpawnaa, Pelaaja pelaaja)
207    {
208        if (mihinSpawnaa == this.mihinSpawnaaSeuraavaksi) pelaaja.Position = paikka;
209    }
210
211    void Luomaali(Vector paikka, double leveys, double korkeus)
212    {
213        PhysicsObject maali = new PhysicsObject(leveys, korkeus);
214        maali.MakeStatic();
215        maali.Position = paikka;
216        maali.IsVisible = false;
217
218        AddCollisionHandler(maali, "pelaaja", maaliintultiin);
219
220        Add(maali);
221
222    }
223
224    void maaliintultiin(PhysicsObject obj, PhysicsObject toinen)
225    {
226        if (joMaalissa) { return; }
227        joMaalissa = true;
228        MessageDisplay.Add("Hyvä!");
229        MessageDisplay.Add("Pääsit pois aluksesta. Ehjänä... Ja...");
230        MessageDisplay.Add("valmiina kostoon!");
231
232    }
233
234    void LuoPortti(Vector paikka, double leveys, double korkeus, int mistaVie, int mihinVie, String variHexJohonPelaajaSpawnaa)
235    {
236        Portti portti = new Portti(leveys, korkeus);
237        portti.MakeStatic();
238        portti.Position = paikka;
239        //portti.Tag = "portti";
240        portti.MistaVie = mistaVie;
241        portti.MihinVie = mihinVie;
242        portti.Vari = variHexJohonPelaajaSpawnaa;
243        Add(portti);
244        portti.Animation = new Animation(porttianim);
245        portti.Animation.Start();
246        portti.Animation.FPS = RandomGen.NextDouble(3.0, 7.0);
247    }
248
249    void seuraavakentta()
250    {
251        ClearAll();
252        pelaajat.Clear();
253
254        if (kenttaNro == 1) luokentta("Kentta1");
255        else if (kenttaNro == 2) luokentta("Kentta2");
256        else if (kenttaNro == 3) luokentta("Kentta3");
257        else if (kenttaNro == 4) luokentta("Kentta4");
258        else if (kenttaNro == 5) luokentta("Kentta5");
259        else if (kenttaNro == 6) luokentta("Kentta6");
260        else if (kenttaNro == 7) luokentta("Kentta7");
261
262    }
263
264
265
266    void TormattiinPorttiin(Pelaaja pelaaja, Portti portti)
267    {
268        kenttaNro = portti.MihinVie;
269        this.mihinSpawnaaSeuraavaksi = portti.Vari;
270        seuraavakentta();
271    }
272
273    void LuoTaso(Vector paikka, double leveys, double korkeus, Animation kuva)
274    {
275        MikonPhysicsObject taso = new MikonPhysicsObject(this, leveys, korkeus);
276        taso.MakeStatic();
277        taso.Position = paikka;
278        taso.Tag = "taso";
279        Add(taso);
280        taso.Animation = kuva;
281        taso.Animation.Start();
282        taso.Animation.FPS = nopeus;
283    }
284
285    void LuoTausta(Vector paikka, double leveys, double korkeus, Animation kuva)
286    {
287        GameObject Block = new GameObject(50, 50);
288        Block.Position = paikka;
289        Add(Block, -2);
290        Block.Animation = kuva;
291        Block.Animation.Start();
292        Block.Animation.FPS = nopeus;
293    }
294
295
296    void LuoElamaLaskuri(Pelaaja pelaaja, double x, double y, Color vari)
297    {
298        ProgressBar elamaPalkki = new ProgressBar(200, 10);
299        elamaPalkki.X = 0;
300        elamaPalkki.BarColor = vari;
301        elamaPalkki.Y = y;
302        elamaPalkki.BindTo(pelaaja.ElamaLaskuri);
303        elamaPalkki.BorderColor = Color.White;
304        Add(elamaPalkki);
305    }
306
307    void PelaajaOsuu(PhysicsObject pel, PhysicsObject kohde, string tyyppi)
308    {
309        if (!(pel is Pelaaja)) return;
310        Pelaaja pelaaja = (Pelaaja)pel;
311
312        switch (tyyppi)
313        {
314            case "sikio":
315                pelaaja.ElamaLaskuri.Value -= 1;
316                break;
317            case "vihu":
318                pelaaja.ElamaLaskuri.Value -= 2;
319                break;
320            case "taso":
321                double maxvel = 0;
322                if (Math.Abs(pelaaja.Velocity.X) > Math.Abs(pelaaja.Velocity.Y)) { maxvel = Math.Round(pelaaja.Velocity.X); } else { maxvel = Math.Round(pelaaja.Velocity.Y); }
323                int arvo = (int)Math.Abs(Math.Round(maxvel / 90)) - 4;
324
325                if (arvo > 0)
326                {
327                    pelaaja.ElamaLaskuri.Value -= arvo;
328                }
329                break;
330        }
331
332
333    }
334
335
336    void ElamaLoppui()
337    {
338        kenttaNro = 1;
339        mihinSpawnaaSeuraavaksi = "00FF00";
340
341        Kuolit();
342        pelaajat.Clear();
343
344        Timer.SingleShot(5.0, seuraavakentta);
345    }
346
347    void Kuolit()
348    {
349        Explosion rajahdys = new Explosion(100);
350        rajahdys.Position = pelaajat[0].Position;
351        rajahdys.Sound = rajahdysAani;
352        Add(rajahdys);
353        pelaajat[0].Destroy();
354
355
356    }
357
358
359    void ElamaLoppuiSurvivalissa()
360    {
361        foreach (var item in pelaajat)
362        {
363            if (!item.IsDestroyed)
364                item.Destroy();
365        }
366        pelaajat.Clear();
367        seuraavakentta();
368
369
370    }
371
372
373    Pelaaja alustaPelaaja()
374    {
375        Pelaaja pelaaja = new Pelaaja(50, 50);
376        if (kenttaNro == 5)
377            pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppuiSurvivalissa(); };
378        else pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppui(); };
379        pelaaja.CanRotate = false;
380        Camera.StayInLevel = true;
381        pelaaja.Shape = Shape.FromImage(pelaajankuva);
382        pelaaja.Tag = "pelaaja";
383        pelaaja.Restitution = 0.1;
384        return pelaaja;
385    }
386
387    Pelaaja luoPelaaja(double leveys, double korkeus)
388    {
389        Pelaaja pelaaja = alustaPelaaja();
390        Add(pelaaja);
391
392        AddCollisionHandler<Pelaaja, Portti>(pelaaja, TormattiinPorttiin);
393        AddCollisionHandler(pelaaja, "vihu", delegate(Pelaaja p, PhysicsObject vihu) { PelaajaOsuu(p, vihu, "vihu"); });
394        AddCollisionHandler(pelaaja, "sikio", delegate(Pelaaja p, PhysicsObject sikio) { PelaajaOsuu(p, sikio, "sikio"); });
395        AddCollisionHandler(pelaaja, "taso", delegate(Pelaaja p, PhysicsObject taso) { PelaajaOsuu(p, taso, "taso"); });
396
397        AssaultRifle pelaajanAse = new AssaultRifle(30, 10);
398        pelaajanAse.IsVisible = false;
399        pelaajanAse.Angle = Angle.RightAngle;
400        pelaajanAse.AttackSound = laser;
401        pelaajanAse.InfiniteAmmo = true;
402        pelaajanAse.Power.DefaultValue = 200;
403        pelaajanAse.FireRate = 8;
404        pelaajanAse.ProjectileCollision = AmmusOsui;
405        pelaaja.Add(pelaajanAse);
406        pelaaja.Ase = pelaajanAse;
407
408        GameObject liekki = new GameObject(50, 50);
409        liekki.Animation = new Animation(liekkianim);
410        liekki.IsVisible = false;
411        liekki.Animation.Start();
412        pelaaja.Add(liekki);
413        liekki.Y = -25;
414        pelaaja.Liekki = liekki;
415
416        pelaajat.Add(pelaaja);
417        return pelaaja;
418    }
419
420
421
422    private void LisaaNappaimet(List<Pelaaja> pelaajat)
423    {
424        Keyboard.Listen(Key.Left, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaajat[0]);
425        Keyboard.Listen(Key.Right, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaajat[0]);
426        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, 800.0, pelaajat[0]);
427        Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaajat[0].Ase);
428
429        //-----------------------------------------------------------------
430
431        Keyboard.Listen(Key.Up, ButtonState.Down, liekkianimaatio, null, pelaajat[0].Liekki, true);
432        Keyboard.Listen(Key.Up, ButtonState.Released, liekkianimaatio, null, pelaajat[0].Liekki, false);
433
434        /* Ei vielä toimi kaksinpeli
435        //-2-2-2-2-2-2-2--22-2-2-2-2-22-2-22-2-22-22-2-22-22--22-22-2-2-2-2-2-2-22-22-2----------
436        Keyboard.Listen(Key.A, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaajat[1]);
437        Keyboard.Listen(Key.D, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaajat[1]);
438        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, 900.0, pelaajat[1]);
439        Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaajat[1].Ase);
440
441        //-----------------------------------------------------------------
442        Keyboard.Listen(Key.W, ButtonState.Down, liekkianimaatio, null, pelaajat[1].Liekki, true);
443        Keyboard.Listen(Key.W, ButtonState.Released, liekkianimaatio, null, pelaajat[1].Liekki, false);
444         * */
445
446    }
447
448    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
449    {
450    }
451
452    void AmmuAseella(AssaultRifle ase)
453    {
454        PhysicsObject ammus = ase.Shoot();
455        if (ammus != null)
456        {
457            ammus.Angle = ase.AbsoluteAngle - Angle.RightAngle;
458            ammus.Size *= 3;
459
460            ammus.Animation = new Animation(ammusanim);
461            ammus.Animation.Start();
462            ammus.Animation.FPS = 3;
463        }
464    }
465
466    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
467    {
468        ammus.Destroy();
469        switch(kohde.Tag.ToString()){
470            case "vihu":case "sikio":
471                kohde.Destroy();
472            break;
473            case "taso":
474                ((MikonPhysicsObject)kohde).Break(0,2,2);
475            break;
476        }
477    }
478
479    void liekkianimaatio(GameObject liekki, bool totuus)
480    {
481        liekki.IsVisible = totuus;
482        if (totuus)
483        {
484
485            if (!raketti.IsPlaying)
486            {
487                raketti.Play();
488            }
489        }
490        else
491        {
492            raketti.Stop();
493        }
494    }
495
496    void kaannaPelaajaa(double kulmanopeus, PhysicsObject pelaaja)
497    {
498        pelaaja.Angle += Angle.FromDegrees(kulmanopeus);
499    }
500    void LiikutaPelaajaa(double nopeus, PhysicsObject pelaaja1)
501    {
502        pelaaja1.Push(Vector.FromLengthAndAngle(nopeus, pelaaja1.Angle + Angle.RightAngle));
503    }
504
505    void LuoVihu(Vector paikka, double leveys, double korkeus, Animation kuva)
506    {
507        PhysicsObject vihu = new PhysicsObject(50, 50);
508        vihu.Shape = Shape.Circle;
509        vihu.Animation = kuva;
510        vihu.Position = paikka;
511        vihu.Tag = "vihu";
512        vihu.AngularDamping = 0.1;
513        vihu.IgnoresGravity = true;
514        Add(vihu, 1);
515
516        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50);
517        satunnaisAivot.ChangeMovementSeconds = 5;
518        vihu.Brain = satunnaisAivot;
519        vihu.Animation.Start();
520        vihu.Animation.FPS = 4;
521
522        AddCollisionHandler(vihu, "vihu", luovihuosuma);
523    }
524
525    void luovihuosuma(PhysicsObject vihu, PhysicsObject kohde)
526    {
527        if (kohde.Tag.ToString() == "vihu") luosikio(vihu.Position, 50, 50, new Animation(sikioanim));
528    }
529
530    void luosikio(Vector paikka, double leveys, double korkeus, Animation kuva)
531    {
532        PhysicsObject sikio = new PhysicsObject(35, 35);
533        sikio.Shape = Shape.Circle;
534        sikio.Animation = kuva;
535        sikio.Position = paikka;
536        sikio.Tag = "sikio";
537        sikio.AngularDamping = 0.1;
538        sikio.IgnoresGravity = true;
539
540        Add(sikio, 1);
541
542        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50);
543        satunnaisAivot.ChangeMovementSeconds = 5;
544        sikio.Brain = satunnaisAivot;
545        sikio.Animation.Start();
546        sikio.Animation.FPS = 4;
547    }
548
549
550}
551
552public class Pelaaja : PhysicsObject
553{
554    AssaultRifle ase;
555    GameObject liekki;
556    DoubleMeter elamaLaskuri;
557    public AssaultRifle Ase { get { if (ase != null) return ase; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { ase = value; } }
558    public GameObject Liekki { get { if (liekki != null) return liekki; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { liekki = value; } }
559    public DoubleMeter ElamaLaskuri { get { return elamaLaskuri; } }
560    public Pelaaja(double leveys, double korkeus)
561        : base(leveys, korkeus)
562    {
563        elamaLaskuri = new DoubleMeter(25, 0, 25);
564
565    }
566
567
568
569}
Note: See TracBrowser for help on using the repository browser.