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

Revision 5198, 24.4 KB checked in by mijoilmo, 8 years ago (diff)

tuhottavat palikat MikonPhysicsObject?

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