source: 2012/23/JimB/FPS/FPS/FPS/FPS/FPS.cs @ 3011

Revision 3011, 20.7 KB checked in by jijoback, 7 years ago (diff)

pieniä muutoksia tekstuureihin ja korjattu bugi että peliä ei voinut aloittaa uudestaan johtuen siitä että peli yritti lisätä pelihahmojen värikirjastoa mutta se oli jo olemassa.

RevLine 
[2844]1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8/// <summary>
9/// Pelaajan luokka -> Pelihahmon asetuksia voi lisätä tänne.
10/// </summary>
11class PeliUkko : PhysicsObject
12{
13    public IntMeter Elamat; //Antaa PeliUkko luokalle mittarin nimellä elmät.
14    public Explosion ViimeisinRajahdys = null; //Estää monen räjähdyksen tulemisen samaan aikaan bugin takia.
15    public bool aseValmiina = true; //->Ei supersarjatulta.
16    public bool naattiValmiina = true; //->Ei naattispämmiä
17    public PeliUkko(double leveys, double korkeus) //double = desimaaliluku
18        : base(leveys, korkeus) //ottaa PeliUkon koon desimaaleina
19    {
20        Elamat = new IntMeter(50, 0, 100); //Default HP, Min HP, Max HP
21    }
22}
23public class FPS : PhysicsGame
24{
25
26    PeliUkko pelaaja1, pelaaja2, pelaaja3, pelaaja4; //määrittää pelaajat attribuuteiksi jotta niitä voi käyttää kaikissa aliohjelmissa
27    double ampumisnopeus = 450; //<-
28    ExplosionSystem NaattiPoks; //räjähdyksen partikkelit
29    IntMeter Pelaajat = new IntMeter(4); //Hengissä olevien pelaajien lukumäärä.
30    ExplosionSystem veri; //veripartikkelit
[2898]31    Dictionary<Color, Label> PlayerX = new Dictionary<Color, Label>();
[2844]32    bool onkoPeliFullS = false; //fullscreen, 0 false, 1 true.
[3011]33
34
[2844]35    void ResetPelaajat() //resetoi pelaajien määrän neljään uuden pelin aloituksessa.
36    {
37        Pelaajat = new IntMeter(4);
38    }
39
[3011]40
[2844]41    /// <summary>
42    /// ylikirjoittaa oletus  PhysicsGame:n Begin metodin
43    /// </summary>
44    public override void Begin()
45    {
46        NaattiPoks = new ExplosionSystem(LoadImage("naattishard"), 1500); //määritetään räjähdyksen partikkelikuva ja niiden maximi määrä
47        Add(NaattiPoks); //lisätään räjähdys peliin (ei näkyviin, mutta niin että se on olemassa)
[2897]48        if (onkoPeliFullS == false)
49        {
50            SetWindowSize(1024, 768, false); //false=ei Full, true = full
51        }
[2898]52
[3011]53        PlayerX.Remove(Color.Blue);
54        PlayerX.Remove(Color.Yellow);
55        PlayerX.Remove(Color.Red);
56        PlayerX.Remove(Color.Purple);
[2898]57
[3011]58        addcolorlib();
[2844]59        LuoKentta(); //kutsutaan kentänluonti
60        Veri(); //kutsutaan veripartikkelit
[2888]61
62        MediaPlayer.Play(RandomGen.SelectOne<string>("music\\M1","music\\M2", "music\\M3", "music\\M4", "music\\M5", "music\\M6", "music\\M7", "music\\M8"));
63        MediaPlayer.Volume = 0.5;
64
[2898]65        MessageDisplay.Add("    F1 - Näytä Ohjaimet"); //lisätään viestilaatikkoon ohje.
[2844]66        Keyboard.Listen(Key.F1, ButtonState.Pressed, Ohjeet, "Näytä ohjaimet"); //Kutsutaan Ohjeet
67        Keyboard.Listen(Key.F11, ButtonState.Pressed, Fullscreen,null);
68        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
69    }
[3011]70    void addcolorlib()
71    {
72        PlayerX.Add(Color.Blue, new Label());
73        PlayerX.Add(Color.Yellow, new Label());
74        PlayerX.Add(Color.Red, new Label());
75        PlayerX.Add(Color.Purple, new Label());
76     }
77    //void removecolorlib()
78    //{
79    //    PlayerX.Remo(Color.Blue, new Label());
80    //    PlayerX.Add(Color.Yellow, new Label());
81    //    PlayerX.Add(Color.Red, new Label());
82    //    PlayerX.Add(Color.Purple, new Label());
83    //}
[2888]84
[2844]85    void Fullscreen()
86    {
87        if (onkoPeliFullS) // jos on koko ruutu
88        {
89            SetWindowSize(1024, 768, false); onkoPeliFullS = false;
[2898]90            Camera.ZoomToLevel();
91            UpdateAllHP();
[2844]92            return;
93        }
[2858]94        int w = Microsoft.Xna.Framework.Graphics.GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;
95        int h = Microsoft.Xna.Framework.Graphics.GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height;
96        SetWindowSize(w, h, true); onkoPeliFullS = true;
[2898]97        Camera.ZoomToLevel();
98        UpdateAllHP();
[2844]99    }
[2898]100    void LuoHPNaytot()
101    {
102        LuoHPNaytto(Screen.Left + 10, Screen.Top - 10, pelaaja1.Elamat, Color.Blue);
103        LuoHPNaytto(Screen.Right - 10, Screen.Top - 10, pelaaja2.Elamat, Color.Yellow);
104        LuoHPNaytto(Screen.Right - 10, Screen.Bottom + 10, pelaaja3.Elamat, Color.Red);
105        LuoHPNaytto(Screen.Left + 10, Screen.Bottom + 10, pelaaja4.Elamat, Color.Purple);
106
107    }
108    void UpdateAllHP()
109    {
110        UpdateHP(Screen.Left + 10 , Screen.Top - 10, Color.Blue);
111        UpdateHP(Screen.Right - 10, Screen.Top - 10, Color.Yellow);
112        UpdateHP(Screen.Right - 10, Screen.Bottom + 10, Color.Red);
113        UpdateHP(Screen.Left + 10, Screen.Bottom + 10, Color.Purple);
114
115    }
[2844]116    void Ohjeet()
117    {
118        MessageDisplay.Add("Pelaaja 1 - WASD - Q ampuminen - E Kranaatti");
119        MessageDisplay.Add("Pelaaja 2 - Nuolet - Numpad0 ampuminen - CTRL Kranaatti");
120        MessageDisplay.Add("Pelaaja 3 - TFGH - R ampuminen - Y Kranaatti");
121        MessageDisplay.Add("Pelaaja 4 - IJKL - U ampuminen - O Kranaatti");
[2898]122        MessageDisplay.Add("F11 -> Fullscreen/Windowed");
[2844]123    }
124    void LuoKentta()
125    {
126        TileMap ruudut = TileMap.FromLevelAsset("level"); //ladataan kenttä level.txt tiedostosta.
127        ruudut.SetTileMethod('=', LuoPalikka); //säädetään mitä mikäkin merkki tekstissä on pelissä
128        ruudut.SetTileMethod('s', LuoPalikka); //                                                 |
129        ruudut.SetTileMethod('1', LuoPelaaja1);//                                                 |
130        ruudut.SetTileMethod('2', LuoPelaaja2);//                                                 |
131        ruudut.SetTileMethod('3', LuoPelaaja3);//                                                 |
132        ruudut.SetTileMethod('4', LuoPelaaja4);//                                                 V
133        ruudut.Execute(25, 25); //Kutsutaan ruudut 25x25 kokoisina.
134
135        Level.Background.Image = LoadImage("bg"); //Määritetään taustakuva.
136        Camera.ZoomToLevel();
[2898]137        LuoHPNaytot();
[2844]138    }
139    void LuoPalikka(Vector paikka, double leveys, double korkeus)
140    {
141        PhysicsObject palikka = PhysicsObject.CreateStaticObject(leveys, korkeus); //staattinen objekti->ei liiku.
142        palikka.Position = paikka;
143        palikka.Image = LoadImage("seinaTekstuuri");
144        palikka.Tag = "Seinä";
145        palikka.Restitution = 0; //kimmoisuus 0
146        palikka.Shape = Shape.Rectangle;
147        palikka.Color = Color.White;
148        Add(palikka);
149    }
150    void LuoPelaaja1(Vector paikka, double leveys, double korkeus)
151    {
152
153        pelaaja1 = LuoPelaaja(paikka);
154        pelaaja1.Image = LoadImage("Pelaaja1");
155        pelaaja1.CollisionIgnoreGroup = 1; //omat luodit eivät osu -> tämän pelaajan luodit ovat collisonignoregroup 1:ssä myös + kranaatit.
[2898]156        //LuoHPNaytto(Level.Left - 125, Level.Top + 100, pelaaja1.Elamat, Color.Blue);
[2844]157
158        //Kontrollit:
159        Keyboard.Listen(Key.A, ButtonState.Down, Liike, null, pelaaja1, new Vector(-200, 0));
160        Keyboard.Listen(Key.A, ButtonState.Released, Liike, null, pelaaja1, new Vector(0, 0));
161        Keyboard.Listen(Key.D, ButtonState.Down, Liike, null, pelaaja1, new Vector(200, 0));
162        Keyboard.Listen(Key.D, ButtonState.Released, Liike, null, pelaaja1, new Vector(0, 0));
163        Keyboard.Listen(Key.S, ButtonState.Down, Liike, null, pelaaja1, new Vector(0, -200));
164        Keyboard.Listen(Key.S, ButtonState.Released, Liike, null, pelaaja1, new Vector(0, 0));
165        Keyboard.Listen(Key.W, ButtonState.Down, Liike, null, pelaaja1, new Vector(0, 200));
166        Keyboard.Listen(Key.W, ButtonState.Released, Liike, null, pelaaja1, new Vector(0, 0));
167        Keyboard.Listen(Key.Q, ButtonState.Down, Ammu, null, pelaaja1);
168        Keyboard.Listen(Key.E, ButtonState.Down, Heita, null, pelaaja1);
169    }
170    void LuoPelaaja2(Vector paikka, double leveys, double korkeus)
171    {
172
173        pelaaja2 = LuoPelaaja(paikka);
174        pelaaja2.Image = LoadImage("Pelaaja2");
175        pelaaja2.CollisionIgnoreGroup = 2;
[2898]176        //LuoHPNaytto(Level.Right + 125, Level.Top + 100, pelaaja2.Elamat, Color.Yellow);
[2844]177
178
179        Keyboard.Listen(Key.Left, ButtonState.Down, Liike, null, pelaaja2, new Vector(-200, 0));
180        Keyboard.Listen(Key.Left, ButtonState.Released, Liike, null, pelaaja2, new Vector(0, 0));
181        Keyboard.Listen(Key.Right, ButtonState.Down, Liike, null, pelaaja2, new Vector(200, 0));
182        Keyboard.Listen(Key.Right, ButtonState.Released, Liike, null, pelaaja2, new Vector(0, 0));
183        Keyboard.Listen(Key.Down, ButtonState.Down, Liike, null, pelaaja2, new Vector(0, -200));
184        Keyboard.Listen(Key.Down, ButtonState.Released, Liike, null, pelaaja2, new Vector(0, 0));
185        Keyboard.Listen(Key.Up, ButtonState.Down, Liike, null, pelaaja2, new Vector(0, 200));
186        Keyboard.Listen(Key.Up, ButtonState.Released, Liike, null, pelaaja2, new Vector(0, 0));
187        Keyboard.Listen(Key.NumPad0, ButtonState.Down, Ammu, null, pelaaja2);
188        Keyboard.Listen(Key.RightControl, ButtonState.Down, Heita, null, pelaaja2);
189    }
190    void LuoPelaaja3(Vector paikka, double leveys, double korkeus)
191    {
192
193        pelaaja3 = LuoPelaaja(paikka);
194        pelaaja3.Image = LoadImage("Pelaaja3");
195        pelaaja3.CollisionIgnoreGroup = 3;
[2898]196        //LuoHPNaytto(Level.Right + 125, Level.Bottom - 100, pelaaja3.Elamat, Color.Red);
[2844]197
198
199        Keyboard.Listen(Key.F, ButtonState.Down, Liike, null, pelaaja3, new Vector(-200, 0));
200        Keyboard.Listen(Key.F, ButtonState.Released, Liike, null, pelaaja3, new Vector(0, 0));
201        Keyboard.Listen(Key.H, ButtonState.Down, Liike, null, pelaaja3, new Vector(200, 0));
202        Keyboard.Listen(Key.H, ButtonState.Released, Liike, null, pelaaja3, new Vector(0, 0));
203        Keyboard.Listen(Key.G, ButtonState.Down, Liike, null, pelaaja3, new Vector(0, -200));
204        Keyboard.Listen(Key.G, ButtonState.Released, Liike, null, pelaaja3, new Vector(0, 0));
205        Keyboard.Listen(Key.T, ButtonState.Down, Liike, null, pelaaja3, new Vector(0, 200));
206        Keyboard.Listen(Key.T, ButtonState.Released, Liike, null, pelaaja3, new Vector(0, 0));
207        Keyboard.Listen(Key.R, ButtonState.Down, Ammu, null, pelaaja3);
208        Keyboard.Listen(Key.Y, ButtonState.Down, Heita, null, pelaaja3);
209    }
210    void LuoPelaaja4(Vector paikka, double leveys, double korkeus)
211    {
212
213        pelaaja4 = LuoPelaaja(paikka);
214        pelaaja4.Image = LoadImage("Pelaaja4");
215        pelaaja4.CollisionIgnoreGroup = 4;
[2898]216        //LuoHPNaytto(Level.Left - 125, Level.Bottom - 100, pelaaja4.Elamat, Color.Purple);
[2844]217
218
219
220
221        Keyboard.Listen(Key.J, ButtonState.Down, Liike, null, pelaaja4, new Vector(-200, 0));
222        Keyboard.Listen(Key.J, ButtonState.Released, Liike, null, pelaaja4, new Vector(0, 0));
223        Keyboard.Listen(Key.L, ButtonState.Down, Liike, null, pelaaja4, new Vector(200, 0));
224        Keyboard.Listen(Key.L, ButtonState.Released, Liike, null, pelaaja4, new Vector(0, 0));
225        Keyboard.Listen(Key.K, ButtonState.Down, Liike, null, pelaaja4, new Vector(0, -200));
226        Keyboard.Listen(Key.K, ButtonState.Released, Liike, null, pelaaja4, new Vector(0, 0));
227        Keyboard.Listen(Key.I, ButtonState.Down, Liike, null, pelaaja4, new Vector(0, 200));
228        Keyboard.Listen(Key.I, ButtonState.Released, Liike, null, pelaaja4, new Vector(0, 0));
229        Keyboard.Listen(Key.U, ButtonState.Down, Ammu, null, pelaaja4);
230        Keyboard.Listen(Key.O, ButtonState.Down, Heita, null, pelaaja4);
231    }
232    PeliUkko LuoPelaaja(Vector paikka)
233    {
234        PeliUkko pelaaja = new PeliUkko(18, 18);
235        pelaaja.Restitution = 0;
236        pelaaja.AngularDamping = Double.Epsilon; //pelaaja ei pyöri törmätessään kulmiin, 0 ei toimi, joten Double.Epsilon on pienin mahdollinen luku.
237        pelaaja.Position = paikka; //Vector paikka -> katsoo ketä pelaajaa luodaan ja pistää sen sen pelaajan sijaintiin level.txt:ssä.
238        pelaaja.Shape = Shape.Circle; //pelaaja on pallo tekstuurin alla :P
239        Add(pelaaja);
240        AddCollisionHandler<PeliUkko, PhysicsObject>(pelaaja, "bullet", Osuma); //jos pelaajaan osuu luoti, kutsutaan osuma, joka vähentää pelaajan HP.
241
242        return pelaaja; //palautetaan luotu pelaaja LuoPelaajaX:lle
243
244    }
245    void KukaKuoli(PeliUkko ukko)
246    {
247        int PelaajanNumero = 1337; //noh, niin :D
248        Pelaajat.Value -= 1; //vähennetään yksi pelaajien lukumäärästä kun joku kuolee. Tämä siksi että peli tietää katsoa kuka on viimeinen hengissä ja ilmoittaa voitosta.
249        if (ukko == pelaaja1)
250        {
251            MessageDisplay.Add("Pelaaja 1 kuoli!"); //Jos ukko (tässä tapauksessa kuolija -> määritetty kuolintapahtumassa) on pelaaja 1, Se ilmoitetaan.
252        }
253        else if (ukko == pelaaja2)
254        {
255            MessageDisplay.Add("Pelaaja 2 kuoli!");
256        }
257        else if (ukko == pelaaja3)
258        {
259            MessageDisplay.Add("Pelaaja 3 kuoli!");
260        }
261        else if (ukko == pelaaja4)
262        {
263            MessageDisplay.Add("Pelaaja 4 kuoli!");
264        }
265        else MessageDisplay.Add("WTF?"); //älkää kysykö ;)
266
267        //jos pelaajia on 1 tai vähemmän...
268        if (Pelaajat.Value <= 1)
269        {
270            if (!pelaaja1.IsDestroyed) PelaajanNumero = 1;  //tarkistetaa onko pelaaja "EI" tuhottu->
271            else if (!pelaaja2.IsDestroyed) PelaajanNumero = 2; //else tarkistetaan onko se pelaaja 2.
272            else if (!pelaaja3.IsDestroyed) PelaajanNumero = 3;
273            else if (!pelaaja4.IsDestroyed) PelaajanNumero = 4;
274            Label Voitto = new Label("Pelaaja" + PelaajanNumero + "Voittaa!"); //teksti keskelle ruutua. "Pelaaja" + Sen pelaajan numero joka ei ollut tuhottu + "Voittaa!"
275            Voitto.TextColor = Color.Crimson;
276            Add(Voitto); //lisätään se viellä näytölle.
277            Timer.SingleShot(2.5, delegate { UusiPeli(); }); //ajastin ennenkuin promptataan uuden pelin alkua. delegate -> saadaan ns. aliohjelma ilman aliohjelmaa, yhdelle riville.
278
279        }
280    }
281    void UusiPeli()
282    {
283        MultiSelectWindow UusiPeli = new MultiSelectWindow("Pelataanko uusi peli?", "Kyllä", "Ei");
284        UusiPeli.ItemSelected += PainettiinValikonNappia; //mitä painettiin? Lisätään muuttujaan monesko nappi. 1 nappi = 0. 2 nappi on 1.
285        Add(UusiPeli);
286    }
287    void PainettiinValikonNappia(int valinta)
288    {
289        switch (valinta)
290        {
291            case 0: //Jos muuttuja oli 0, eli ensimmäinen nappi, aloitetaan uusi peli
292                ClearAll(); //puhdistetaan "melkein kaikki
293                ResetPelaajat(); //nollataan pelaajat takaisin neljään, koska muuten heitä olisi enään 1
294                Begin(); //aloitetaan peli
295                break;
296            case 1: //poistutaan jos toinen nappi.
297                Exit();
298                break;
299        }
300    }
301    void LuoHPNaytto(double x, double y, IntMeter sidottavaMittari, Color taustavari)
302    {
[2898]303        Label hp = PlayerX[taustavari];
[2844]304        hp.Color = taustavari;
305        hp.BindTo(sidottavaMittari);
306        hp.Position = new Vector(x, y);
307        Add(hp);
308    }
[2898]309    void UpdateHP(double x, double y, Color taustavari)
310    {
311        Label hp = PlayerX[taustavari];
312        hp.Position = new Vector (x,y);
313    }
[2844]314    void Osuma(PeliUkko tormaaja, PhysicsObject ammus)
315    {
316        tormaaja.Elamat.Value -= 3; //kun tormaaja (pelaaja) osuu luotiin, vähennetään 3hp.
317        if (tormaaja.Elamat.Value <= 0)
318        {
319            tormaaja.Destroy(); //jos hp 0 tai pienempi, tuhotaan pelaaja
320            KukaKuoli(tormaaja); //ja tarkistetaan kuka kuoli +ilmoitetaan siitä
321        }
322        veri.AddEffect(tormaaja.Position, 15); //osumasta lentää myös verta, pelaajan kohdalta.
323        ammus.Destroy(); //tuhotaan panos. (ei hylsyjä ;___;)
324    }
325    void Veri()
326    {
327        veri = new ExplosionSystem(LoadImage("blood"), 500); //luodaan veri "räjähdys" ja ladataan kuva, säädetään maksimi määrä partikkeleita(verta)
328        veri.MaxScale = 1.5;
329        veri.MaxLifetime = 0.4; //ei veri lennä liian kauas.
330        veri.MaxVelocity = 0.8; //eikä liian nopeaa ettei se ehdi liian kauas.
331        Add(veri); //lisätään se.
332
333    }
334    void Ammu(PeliUkko pelaaja)
335    {
[2849]336        if (pelaaja.IsDestroyed) return; //Ei kuolleet saa ampua!
[2844]337        if (pelaaja.aseValmiina) //jos aseella ei ole cd menossa
338        {
339            PhysicsObject bullet = new PhysicsObject(LoadImage("bullet"));
340            Add(bullet);
341            bullet.Tag = "bullet";
342            bullet.Restitution = 0; //eipä kimpoile luoti, bugien varalta tämä tässä, ei mitään järkevää syytä ottaa poiskaan.
343            AddCollisionHandler(bullet, "Seinä", CollisionHandler.DestroyObject); //luoti katoaa maagisesti seinään osuessaan.
344            bullet.Position = pelaaja.Position;
345            bullet.Angle = pelaaja.Angle; //luoti lähtee pelaajan katsomaaan suuntaan.
346            bullet.CollisionIgnoreGroup = pelaaja.CollisionIgnoreGroup; //pistetään luoti samaan collision ignoreen kuin sen ampunut pelaaja, ettei ammuta itseään.
347            Vector suunta = Vector.FromLengthAndAngle(ampumisnopeus, pelaaja.Angle + Angle.RightAngle); //käännellään luotia viellä että sen tekstuurikin on oikenpäin.
348            bullet.Hit(suunta); //tökkäistään luoti liikkeelle.
349            SoundEffect pistolshot = LoadSoundEffect("pistol1"); //mahtava ääni!!
350            pistolshot.Play(); //aivan uskomaton ;D
351            pelaaja.aseValmiina = false; //pistetään cd käyntiin
352            Timer.SingleShot(0.4, delegate { pelaaja.aseValmiina = true; }); //poistetaan cd
353        }
354    }
355    void Heita(PeliUkko pelaaja)
356    {
[2849]357        if (pelaaja.IsDestroyed) return;
[2844]358        if (pelaaja.naattiValmiina) //jos ei ole naatti cd active.
359        {
360            PhysicsObject naatti = new PhysicsObject(LoadImage("naatti"));
361            Add(naatti);
362            naatti.Tag = "naatti";
363            naatti.Restitution = 0.8; //naatti saa kimpoilla vähän
364            naatti.Position = pelaaja.Position;
365            naatti.Angle = pelaaja.Angle;
366            naatti.CollisionIgnoreGroup = pelaaja.CollisionIgnoreGroup;
367            Vector suunta = Vector.FromLengthAndAngle(ampumisnopeus, pelaaja.Angle + Angle.RightAngle);
368            naatti.Hit(suunta);
[2888]369            SoundEffect naattiheitto = LoadSoundEffect("Naattiheitto");
370            naattiheitto.Play();
[2844]371            pelaaja.naattiValmiina = false;
372            Timer.SingleShot(1.5, delegate { KranaattiRajahti(naatti.X, naatti.Y, 375); naatti.Destroy(); }); //räjähdys<-aika heitosta
373            Timer.SingleShot(8, delegate { pelaaja.naattiValmiina = true; });
374        }
375
376    }
377    void KranaattiRajahti(double x, double y, int numberOfParticles)
378    {
379        NaattiPoks.X = x; //pistetään räjähdysefetki naatin sijaintiin
380        NaattiPoks.Y = y; 
381        NaattiPoks.MinScale = 1; //partikkeleiden min/max koot
382        NaattiPoks.MaxScale = 10;
383        NaattiPoks.AddEffect(x, y, numberOfParticles);
384        Explosion e = new Explosion(65); //pakko käyttää myös tätä koska ExplosionSystemistä ei saa paineaaltoa.
385        Add(e);
386        e.Position = new Vector(x, y);
387
388        //IPhysicsObject = Kohde johon paineaalto osuu. vektori suuntaa ei tarvita missään, mutta se on silti pakollinen. sitten kutsutaan shockhit näillä arvoilla.
389        e.ShockwaveReachesObject += delegate(IPhysicsObject kohde, Vector suunta) { ShockHit(kohde, suunta, e); }; 
390    }
391    void ShockHit(IPhysicsObject kohde, Vector suunta, Explosion rajahdys)
392    {
393        if (!(kohde is PeliUkko)) return; //jos paineaalto osuu johonkin muuhun kuin pelaajaan, poistutaan.
394        PeliUkko ukko = kohde as PeliUkko; //jos kohde oli pelaajaluokkaa, jatketaan.
395        if (ukko.ViimeisinRajahdys == rajahdys) return; //tarkistetaan että tämä paineealto ei ole osunut ukkoon juuri äsken. Peli bugasi niin että paineaalto osu monta kertaa.
396
397        double etaisyys = Vector.Distance(ukko.Position, rajahdys.Position); //katsotaan kuinka kaukana pelaaja on räjähdyksen keskipisteestä. Pistetään tämä desimaalilukuna muutujaan
398        ukko.Elamat.Value -= (int)Math.Floor(1500 / etaisyys); //pyöristetään etäisyys kokonaislukuihin, int ei ota desimaaleja. Base dmg räjähdyksestä 1500. se jaetaan etäisyydellä.
399        if (ukko.Elamat.Value <= 0)
400        {
401            ukko.Destroy();
402            KukaKuoli(ukko);
403        }
404        ukko.ViimeisinRajahdys = rajahdys; //pistetään viimeisin räjähdys olemaan juuri tämä räjähdys (paineaalto)
405    }
406    void Liike(PeliUkko pelaaja, Vector nopeus)
407    {
408        pelaaja.Velocity = nopeus; //nopeus=tässä käytetään osoittamaan pelaajan liikkumissuuntaa, joten pelaajan tekstuuri kääntyy liikesuuntaan.
409        if (nopeus.Magnitude != 0) //jos pelaaja ei liiku
410        {
411            pelaaja.Angle = nopeus.Angle - Angle.RightAngle; //ei käännetä pelaajaa takaisin oletussuuntaan.
412        }
413    }
414}
Note: See TracBrowser for help on using the repository browser.