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

Revision 5287, 22.4 KB checked in by mijoilmo, 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
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                ((MikonPhysicsObject)kohde).Break(0, 2, 2);
320                break;
321            case "taso":
322                double maxvel = 0;
323                if (Math.Abs(pelaaja.Velocity.X) > Math.Abs(pelaaja.Velocity.Y)) { maxvel = Math.Round(pelaaja.Velocity.X); } else { maxvel = Math.Round(pelaaja.Velocity.Y); }
324                int arvo = (int)Math.Abs(Math.Round(maxvel / 90)) - 4;
325
326                if (arvo > 0)
327                {
328                    pelaaja.ElamaLaskuri.Value -= arvo;
329                }
330                ((MikonPhysicsObject)kohde).Break(0, 2, 2);
331                break;
332        }
333
334
335    }
336
337
338    void ElamaLoppui()
339    {
340        kenttaNro = 1;
341        mihinSpawnaaSeuraavaksi = "00FF00";
342
343        Kuolit();
344        pelaajat.Clear();
345
346        Timer.SingleShot(5.0, seuraavakentta);
347    }
348
349    void Kuolit()
350    {
351        Explosion rajahdys = new Explosion(100);
352        rajahdys.Position = pelaajat[0].Position;
353        rajahdys.Sound = rajahdysAani;
354        Add(rajahdys);
355        pelaajat[0].Destroy();
356
357
358    }
359
360
361    void ElamaLoppuiSurvivalissa()
362    {
363        foreach (var item in pelaajat)
364        {
365            if (!item.IsDestroyed)
366                item.Destroy();
367        }
368        pelaajat.Clear();
369        seuraavakentta();
370
371
372    }
373
374
375    Pelaaja alustaPelaaja()
376    {
377        Pelaaja pelaaja = new Pelaaja(50, 50);
378        if (kenttaNro == 5)
379            pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppuiSurvivalissa(); };
380        else pelaaja.ElamaLaskuri.LowerLimit += delegate { ElamaLoppui(); };
381        pelaaja.CanRotate = false;
382        Camera.StayInLevel = true;
383        pelaaja.Shape = Shape.FromImage(pelaajankuva);
384        pelaaja.Tag = "pelaaja";
385        pelaaja.Restitution = 0.1;
386        return pelaaja;
387    }
388
389    Pelaaja luoPelaaja(double leveys, double korkeus)
390    {
391        Pelaaja pelaaja = alustaPelaaja();
392        Add(pelaaja);
393
394        AddCollisionHandler<Pelaaja, Portti>(pelaaja, TormattiinPorttiin);
395        AddCollisionHandler(pelaaja, "vihu", delegate(Pelaaja p, PhysicsObject vihu) { PelaajaOsuu(p, vihu, "vihu"); });
396        AddCollisionHandler(pelaaja, "sikio", delegate(Pelaaja p, PhysicsObject sikio) { PelaajaOsuu(p, sikio, "sikio"); });
397        AddCollisionHandler(pelaaja, "taso", delegate(Pelaaja p, PhysicsObject taso) { PelaajaOsuu(p, taso, "taso"); });
398
399        AssaultRifle pelaajanAse = new AssaultRifle(30, 10);
400        pelaajanAse.IsVisible = false;
401        pelaajanAse.Angle = Angle.RightAngle;
402        pelaajanAse.AttackSound = laser;
403        pelaajanAse.InfiniteAmmo = true;
404        pelaajanAse.Power.DefaultValue = 200;
405        pelaajanAse.FireRate = 199;
406        pelaajanAse.ProjectileCollision = AmmusOsui;
407        pelaaja.Add(pelaajanAse);
408        pelaaja.Ase = pelaajanAse;
409
410        GameObject liekki = new GameObject(50, 50);
411        liekki.Animation = new Animation(liekkianim);
412        liekki.IsVisible = false;
413        liekki.Animation.Start();
414        pelaaja.Add(liekki);
415        liekki.Y = -25;
416        pelaaja.Liekki = liekki;
417
418        pelaajat.Add(pelaaja);
419        return pelaaja;
420    }
421
422
423
424    private void LisaaNappaimet(List<Pelaaja> pelaajat)
425    {
426        Keyboard.Listen(Key.Left, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaajat[0]);
427        Keyboard.Listen(Key.Right, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaajat[0]);
428        Keyboard.Listen(Key.Up, ButtonState.Down, LiikutaPelaajaa, null, 800.0, pelaajat[0]);
429        Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaajat[0].Ase);
430
431        //-----------------------------------------------------------------
432
433        Keyboard.Listen(Key.Up, ButtonState.Down, liekkianimaatio, null, pelaajat[0].Liekki, true);
434        Keyboard.Listen(Key.Up, ButtonState.Released, liekkianimaatio, null, pelaajat[0].Liekki, false);
435
436        /* Ei vielä toimi kaksinpeli
437        //-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----------
438        Keyboard.Listen(Key.A, ButtonState.Down, kaannaPelaajaa, null, 5.0, pelaajat[1]);
439        Keyboard.Listen(Key.D, ButtonState.Down, kaannaPelaajaa, null, -5.0, pelaajat[1]);
440        Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, 900.0, pelaajat[1]);
441        Keyboard.Listen(Key.LeftControl, ButtonState.Down, AmmuAseella, null, pelaajat[1].Ase);
442
443        //-----------------------------------------------------------------
444        Keyboard.Listen(Key.W, ButtonState.Down, liekkianimaatio, null, pelaajat[1].Liekki, true);
445        Keyboard.Listen(Key.W, ButtonState.Released, liekkianimaatio, null, pelaajat[1].Liekki, false);
446         * */
447
448    }
449
450    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
451    {
452    }
453
454    void AmmuAseella(AssaultRifle ase)
455    {
456        PhysicsObject ammus = ase.Shoot();
457        if (ammus != null)
458        {
459            ammus.Angle = ase.AbsoluteAngle - Angle.RightAngle;
460            ammus.Size *= 3;
461
462            ammus.Animation = new Animation(ammusanim);
463            ammus.Animation.Start();
464            ammus.Animation.FPS = 3;
465        }
466    }
467
468    void AmmusOsui(PhysicsObject ammus, PhysicsObject kohde)
469    {
470        ammus.Destroy();
471        switch(kohde.Tag.ToString()){
472            case "vihu":case "sikio":
473                ((MikonPhysicsObject)kohde).Break(0,2,2);
474            break;
475            case "taso":
476                ((MikonPhysicsObject)kohde).Break(0,2,2);
477            break;
478        }
479    }
480
481    void liekkianimaatio(GameObject liekki, bool totuus)
482    {
483        liekki.IsVisible = totuus;
484        if (totuus)
485        {
486
487            if (!raketti.IsPlaying)
488            {
489                raketti.Play();
490            }
491        }
492        else
493        {
494            raketti.Stop();
495        }
496    }
497
498    void kaannaPelaajaa(double kulmanopeus, PhysicsObject pelaaja)
499    {
500        pelaaja.Angle += Angle.FromDegrees(kulmanopeus);
501    }
502    void LiikutaPelaajaa(double nopeus, PhysicsObject pelaaja1)
503    {
504        pelaaja1.Push(Vector.FromLengthAndAngle(nopeus, pelaaja1.Angle + Angle.RightAngle));
505    }
506
507    void LuoVihu(Vector paikka, double leveys, double korkeus, Animation kuva)
508    {
509        MikonPhysicsObject vihu = new MikonPhysicsObject(this, 50, 50);
510        vihu.Shape = Shape.Circle;
511        vihu.Animation = kuva;
512        vihu.Position = paikka;
513        vihu.Tag = "vihu";
514        vihu.AngularDamping = 0.1;
515        vihu.IgnoresGravity = true;
516        Add(vihu, 1);
517
518        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50);
519        satunnaisAivot.ChangeMovementSeconds = 5;
520        vihu.Brain = satunnaisAivot;
521        vihu.Animation.Start();
522        vihu.Animation.FPS = 4;
523
524        AddCollisionHandler(vihu, "vihu", luovihuosuma);
525    }
526
527    void luovihuosuma(PhysicsObject vihu, PhysicsObject kohde)
528    {
529        if (kohde.Tag.ToString() == "vihu") luosikio(vihu.Position, 50, 50, new Animation(sikioanim));
530    }
531
532    void luosikio(Vector paikka, double leveys, double korkeus, Animation kuva)
533    {
534        MikonPhysicsObject sikio = new MikonPhysicsObject(this,35, 35);
535        sikio.Shape = Shape.Circle;
536        sikio.Animation = kuva;
537        sikio.Position = paikka;
538        sikio.Tag = "sikio";
539        sikio.AngularDamping = 0.1;
540        sikio.IgnoresGravity = true;
541
542        Add(sikio, 1);
543
544        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50);
545        satunnaisAivot.ChangeMovementSeconds = 5;
546        sikio.Brain = satunnaisAivot;
547        sikio.Animation.Start();
548        sikio.Animation.FPS = 4;
549    }
550
551
552}
553
554public class Pelaaja : PhysicsObject
555{
556    AssaultRifle ase;
557    GameObject liekki;
558    DoubleMeter elamaLaskuri;
559    public AssaultRifle Ase { get { if (ase != null) return ase; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { ase = value; } }
560    public GameObject Liekki { get { if (liekki != null) return liekki; else throw new Exception("Alustus ei tapahtunut ajoissa!"); } set { liekki = value; } }
561    public DoubleMeter ElamaLaskuri { get { return elamaLaskuri; } }
562    public Pelaaja(double leveys, double korkeus)
563        : base(leveys, korkeus)
564    {
565        elamaLaskuri = new DoubleMeter(25, 0, 25);
566
567    }
568
569
570
571}
Note: See TracBrowser for help on using the repository browser.