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

Revision 3011, 20.7 KB checked in by jijoback, 8 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.

Line 
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
31    Dictionary<Color, Label> PlayerX = new Dictionary<Color, Label>();
32    bool onkoPeliFullS = false; //fullscreen, 0 false, 1 true.
33
34
35    void ResetPelaajat() //resetoi pelaajien määrän neljään uuden pelin aloituksessa.
36    {
37        Pelaajat = new IntMeter(4);
38    }
39
40
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)
48        if (onkoPeliFullS == false)
49        {
50            SetWindowSize(1024, 768, false); //false=ei Full, true = full
51        }
52
53        PlayerX.Remove(Color.Blue);
54        PlayerX.Remove(Color.Yellow);
55        PlayerX.Remove(Color.Red);
56        PlayerX.Remove(Color.Purple);
57
58        addcolorlib();
59        LuoKentta(); //kutsutaan kentänluonti
60        Veri(); //kutsutaan veripartikkelit
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
65        MessageDisplay.Add("    F1 - Näytä Ohjaimet"); //lisätään viestilaatikkoon ohje.
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    }
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    //}
84
85    void Fullscreen()
86    {
87        if (onkoPeliFullS) // jos on koko ruutu
88        {
89            SetWindowSize(1024, 768, false); onkoPeliFullS = false;
90            Camera.ZoomToLevel();
91            UpdateAllHP();
92            return;
93        }
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;
97        Camera.ZoomToLevel();
98        UpdateAllHP();
99    }
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    }
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");
122        MessageDisplay.Add("F11 -> Fullscreen/Windowed");
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();
137        LuoHPNaytot();
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.
156        //LuoHPNaytto(Level.Left - 125, Level.Top + 100, pelaaja1.Elamat, Color.Blue);
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;
176        //LuoHPNaytto(Level.Right + 125, Level.Top + 100, pelaaja2.Elamat, Color.Yellow);
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;
196        //LuoHPNaytto(Level.Right + 125, Level.Bottom - 100, pelaaja3.Elamat, Color.Red);
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;
216        //LuoHPNaytto(Level.Left - 125, Level.Bottom - 100, pelaaja4.Elamat, Color.Purple);
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    {
303        Label hp = PlayerX[taustavari];
304        hp.Color = taustavari;
305        hp.BindTo(sidottavaMittari);
306        hp.Position = new Vector(x, y);
307        Add(hp);
308    }
309    void UpdateHP(double x, double y, Color taustavari)
310    {
311        Label hp = PlayerX[taustavari];
312        hp.Position = new Vector (x,y);
313    }
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    {
336        if (pelaaja.IsDestroyed) return; //Ei kuolleet saa ampua!
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    {
357        if (pelaaja.IsDestroyed) return;
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);
369            SoundEffect naattiheitto = LoadSoundEffect("Naattiheitto");
370            naattiheitto.Play();
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.