source: 2016/24/EemeliK/Nettipelijuttupelihymynaama/Nettipelijuttupelihymynaama/Nettipelijuttupelihymynaama/Nettipelijuttupelihymynaama.cs @ 7419

Revision 7419, 31.3 KB checked in by taeekotr, 3 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[Serializable]
10class Paketti
11{
12    public double X;
13    public double Y;
14    public double VX;
15    public double VY;
16    public double nopeus;
17    public string paikka;
18}
19
20[Serializable]
21class AmmusPaketti
22{
23    public double X;
24    public double Y;
25    public double VX;
26    public double VY;
27    public string paikka;
28    public string tag;
29}
30
31[Serializable]
32class KranaattiPaketti
33{
34    public double X;
35    public double Y;
36    public double VX;
37    public double VY;
38    public string paikka;
39}
40
41[Serializable]
42class KuoliPaketti
43{
44}
45
46
47class Pelaaja : PlatformCharacter
48{
49    public double nopeus;
50
51
52    public Pelaaja(double leveys, double korkeus)
53        : base(leveys, korkeus)
54    {
55    }
56}
57
58public class Nettipelijuttupelihymynaama : PhysicsGame
59{
60    IntMeter rahet;
61
62    NetworkConnection yhteys;
63    GameObject cursor;
64    GameObject asecursor;
65    GameObject E;
66    PhysicsObject KauppaanMeno;
67    Timer KauppaAjastin;
68    PlatformCharacter kauppaseta;
69    PhysicsObject Asekauppa;
70    PhysicsObject poiskaupastapalikka;
71    Timer PoiskaupastaAjastin;
72    Timer Mikatappovaline;
73
74    const double nopeus = 250;
75    const double hyppyNopeus = 750;
76    const int RUUDUN_KOKO = 40;
77
78    double hahmonopeus = 0;
79
80    Label Asekuvat;
81
82    Pelaaja pelaaja;
83    bool onAse = false;
84    bool onKauppaE = false;
85    bool KaupastaPois = false;
86    bool onAk = false;
87    bool saaAmpua = true;
88    bool kranaattiKadessa = false;
89    int valittuase = -1;
90
91    string nykyinenPaikka = "";
92
93    Image pelaajanKuva = LoadImage("Idle");
94    Image kauppeseta = LoadImage("Kauppaseta");
95    Image Aajii = LoadImage("Aajii");
96    Image viisidollaria = LoadImage("5Dollars");
97    Image pistoolikuva = LoadImage("pistooli");
98    Image aseKursorinKuva = LoadImage("cursori");
99    Image Tiiliseinakuva = LoadImage("bricks");
100    Image kursorinKuva = LoadImage("Windows_Cursor");
101    Image alkuTausta = LoadImage("Tausta1");
102    Image ammusKuva = LoadImage("Bullet");
103    Image satadollariakuva = LoadImage("satadollaria");
104    Image Ekuva = LoadImage("e");
105    Image kauppaTausta = LoadImage("Kauppe");
106    Image kranaattikuva = LoadImage("kranaatti");
107    Image Akkuva = LoadImage("Ak");
108
109    SoundEffect maaliAani = LoadSoundEffect("maali");
110    Dictionary<Guid, Pelaaja> muutPelaajat = new Dictionary<Guid, Pelaaja>();
111
112    List<Guid> kuolleet = new List<Guid>();
113
114    Vector ruudunKoko = new Vector(1920, 1037);
115
116    DoubleMeter elamaLaskuri;
117    private Animation ukkelinKavely;
118
119    public override void Begin()
120    {
121        elamaLaskuri = new DoubleMeter(20, 0, 20);
122        elamaLaskuri.LowerLimit += ElamaLoppui;
123
124        Camera.ZoomFactor = 1.2;
125        Camera.StayInLevel = true;
126        LuoKentta("kentta1");
127        LisaaNappaimet();
128        LuoKursori();
129        LuoTausta();
130        LuoRahaLaskuri();
131
132        KaynnistaKauppaAjastin();
133
134        yhteys = new NetworkConnection("Tasoloikka22");
135        yhteys.OnMessageReceive += UusiViesti;
136        yhteys.OnConnect += UusiPelaaja;
137        yhteys.OnDisconnect += PoistaPelaaja;
138        if (!yhteys.Connect("130.234.183.17", 3074))
139        {
140            MessageWindow mw = new MessageWindow("Yhdistäminen epäonnistui");
141            mw.Closed += delegate { Exit(); };
142            Add(mw);
143            return;
144        }
145        Exiting += yhteys.Close;
146
147        MikaTappovaline();
148
149        Window.Width = 800;
150        Window.Height = 600;
151
152        //IsFullSlcreen = true;
153        IsMouseVisible = false;
154
155        LuoElamaLaskuri();
156
157        Camera.Follow(pelaaja);
158
159
160    }
161
162    protected override void Update(Time time)
163    {
164        foreach (var pari in muutPelaajat)
165        {
166            if (pari.Value.nopeus != 0.0)
167                pari.Value.Walk(pari.Value.nopeus);
168        }
169        base.Update(time);
170    }
171    /*   void LuoKauppa()
172       {
173
174           TileMap kauppa = TileMap.FromLevelAsset("kauppa");
175           kauppa.SetTileMethod('#', LisaaTaso);
176           kauppa.SetTileMethod('K', LisaaKauppaanMeno);
177           kauppa.SetTileMethod('*', LisaaViisiDollaria);
178           kauppa.SetTileMethod('N', LisaaPelaaja);
179           kauppa.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
180           Level.CreateBorders();
181           Level.Background.CreateGradient(Color.White, Color.SkyBlue);
182       }*/
183       
184    void KaynnistaKauppaAjastin()
185    {
186        KauppaAjastin = new Timer();
187        KauppaAjastin.Interval = 0.1;
188        KauppaAjastin.Timeout += KauppaEPois;
189        KauppaAjastin.Start();
190    }
191    void MikaTappovaline()
192    {
193        Mikatappovaline = new Timer();
194        Mikatappovaline.Interval = 0.1;
195        Mikatappovaline.Timeout += Tappovalinekuva;
196        Mikatappovaline.Start();
197    }
198    void Tappovalinekuva()
199    {
200            Asekuvat.IsVisible = onAse || onAk || kranaattiKadessa;
201       
202
203        if (valittuase == 0 && onAse)
204        {
205            Asekuvat.Image = pistoolikuva;
206        }
207        if (valittuase == 1 && onAk)
208        {
209            Asekuvat.Image = Akkuva;
210        }
211       
212        if (valittuase == 2 && kranaattiKadessa)
213        {
214            Asekuvat.Image = kranaattikuva;
215        }
216    }
217    void LuoRahaLaskuri()
218    {
219        rahet = new IntMeter(300);
220
221        PiirraRahaLaskuri();
222    }
223    void LuoAseKursori()
224    {
225        cursor.Destroy();
226
227        asecursor = new GameObject(15, 15);
228        asecursor.Image = aseKursorinKuva;
229        Mouse.ListenMovement(0.0, KuunteleAseLiiketta, null);
230        Add(asecursor);
231    }
232    void LuoTausta()
233    {
234        GameObject alkutausta = new GameObject(ruudunKoko.X, ruudunKoko.Y / 2); //Screen.Width, Screen.Height/2
235        alkutausta.Image = alkuTausta;
236        Add(alkutausta, -3);
237        Layers[-3].RelativeTransition = new Vector(0.5, 0.0);
238    }
239    void KuunteleAseLiiketta(AnalogState hiirenTila)
240    {
241        asecursor.X = Mouse.PositionOnWorld.X;
242        asecursor.Y = Mouse.PositionOnWorld.Y;
243
244        Vector hiirenLiike = hiirenTila.MouseMovement;
245    }
246    void LuoKursori()
247    {
248        if (onAse != true)
249        {
250            cursor = new GameObject(10, 15);
251            cursor.Image = kursorinKuva;
252            Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
253            Add(cursor);
254        }
255        else
256        {
257            LuoAseKursori();
258        }
259    }
260    void KuunteleLiiketta(AnalogState hiirenTila)
261    {
262        cursor.X = Mouse.PositionOnWorld.X;
263        cursor.Y = Mouse.PositionOnWorld.Y;
264
265        Vector hiirenLiike = hiirenTila.MouseMovement;
266    }
267    void PoisKaupasta(Vector paikka, double leveys, double korkeus)
268    {
269        poiskaupastapalikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
270        poiskaupastapalikka.Position = paikka;
271        poiskaupastapalikka.Color = Color.Black;
272        poiskaupastapalikka.Tag = "poiskaupastapalikka";
273        Add(poiskaupastapalikka);
274
275        E = new GameObject(20, 20);
276        E.Image = Ekuva;
277        E.X = poiskaupastapalikka.X;
278        E.Y = poiskaupastapalikka.Y + 150;
279        Add(E);
280    }
281    void LuoElamaLaskuri()
282    {
283
284        ProgressBar elamaPalkki = new ProgressBar(150, 20);
285        elamaPalkki.X = -Window.Width / 2 + 150;
286        elamaPalkki.Y = Window.Height / 2 - 20;
287        elamaPalkki.BarColor = Color.Red;
288        elamaPalkki.BindTo(elamaLaskuri);
289        Add(elamaPalkki);
290    }
291    void ElamaLoppui()
292    {
293        pelaaja.Destroy();
294
295        yhteys.SendObject(new KuoliPaketti());
296    }
297
298    void UusiViesti(Guid id, string viesti)
299    {
300        if (kuolleet.Contains(id))
301        {
302            return;
303        }
304
305        if (!muutPelaajat.ContainsKey(id))
306        {
307            muutPelaajat.Add(id, LuoPelaaja());
308        }
309
310        try
311        {
312            Paketti paketti = yhteys.DeserializeFromString<Paketti>(viesti);
313            muutPelaajat[id].Position = new Vector(paketti.X, paketti.Y);
314            muutPelaajat[id].Velocity = new Vector(paketti.VX, paketti.VY);
315            muutPelaajat[id].nopeus = paketti.nopeus;
316
317
318            if (paketti.paikka == nykyinenPaikka)
319            {
320                muutPelaajat[id].IsVisible = true;
321                muutPelaajat[id].IgnoresCollisionResponse = false;
322            }
323            else
324            {
325                muutPelaajat[id].IsVisible = false;
326                muutPelaajat[id].IgnoresCollisionResponse = true;
327            }
328
329
330            return;
331        }
332        catch (Exception)
333        {
334
335        }
336
337        try
338        {
339            AmmusPaketti paketti = yhteys.DeserializeFromString<AmmusPaketti>(viesti);
340            if (paketti.paikka == nykyinenPaikka)
341            {
342                LuoAmmus(new Vector(paketti.X, paketti.Y), new Vector(paketti.VX, paketti.VY), paketti.tag);
343            }
344            return;
345        }
346        catch (Exception)
347        {
348
349        }
350        try
351        {
352            KranaattiPaketti kranupaketti = yhteys.DeserializeFromString<KranaattiPaketti>(viesti);
353            if (kranupaketti.paikka == nykyinenPaikka)
354            {
355                HeitaKranaatti(new Vector(kranupaketti.X, kranupaketti.Y), new Vector(kranupaketti.VX, kranupaketti.VY), muutPelaajat[id]);
356            }
357            return;
358        }
359        catch (Exception)
360        {
361
362        }
363
364        try
365        {
366            KuoliPaketti paketti = yhteys.DeserializeFromString<KuoliPaketti>(viesti);
367            muutPelaajat[id].Destroy();
368            muutPelaajat.Remove(id);
369            kuolleet.Add(id);
370            return;
371        }
372        catch (Exception)
373        {
374
375        }
376
377        if (viesti.Length > 0)
378        {
379            MessageDisplay.Add(viesti);
380            TulkitseKomento(id, viesti);
381        }
382    }
383    void UusiPelaaja(Guid id)
384    {
385        MessageDisplay.Add("Uusi pelaaja yhdisti peliin.");
386        muutPelaajat.Add(id, LuoPelaaja());
387    }
388
389    void PoistaPelaaja(Guid id)
390    {
391        if (muutPelaajat.ContainsKey(id))
392        {
393            MessageDisplay.Add("Pelaaja poistui pelistä.");
394            muutPelaajat[id].Destroy();
395            muutPelaajat.Remove(id);
396        }
397    }
398    void LuoKentta(String nimi)
399    {
400        nykyinenPaikka = nimi;
401
402        TileMap kentta = TileMap.FromLevelAsset(nimi);
403        kentta.SetTileMethod('#', LisaaTaso);
404        kentta.SetTileMethod('K', LisaaKauppaanMeno);
405        kentta.SetTileMethod('*', LisaaViisiDollaria);
406        kentta.SetTileMethod('N', LisaaPelaaja);
407        kentta.SetTileMethod('S', LuoKauppaSeta);
408        kentta.SetTileMethod('P', PoisKaupasta);
409        kentta.SetTileMethod('A', LuoAsekauppa);
410        kentta.SetTileMethod('B', LuoTiiliseina);
411        //kentta.SetTileMethod('N', Pelasta);
412        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
413        Level.CreateBorders();
414        Gravity = new Vector(0, -1000);
415
416        Asekuvat = new Label(50, 50);
417        Vector res = new Vector(0, 250);//Camera.WorldToScreen(pos);
418        Asekuvat.X = res.X;//Window.Left + 350;
419        Asekuvat.Y = res.Y;
420        //Pistoolikuva.X = Window.Left + 300;
421        //Pistoolikuva.Y = Window.Top;
422        Add(Asekuvat);
423        Asekuvat.IsVisible = false;
424
425        if (nimi == "kauppa")
426        {
427            nykyinenPaikka = "kauppa" + RandomGen.NextInt(0, 99999);
428
429            LuoKauppaTausta();
430
431            PoiskaupastaAjastin = new Timer();
432            PoiskaupastaAjastin.Interval = 0.1;
433            PoiskaupastaAjastin.Timeout += EKaupastaPois;
434            PoiskaupastaAjastin.Start();
435        }
436        else
437        {
438            Level.Background.CreateGradient(Color.White, Color.SkyBlue);
439
440            KauppaAjastin = new Timer();
441            KauppaAjastin.Interval = 0.1;
442            KauppaAjastin.Timeout += KauppaEPois;
443            KauppaAjastin.Start();
444
445            /*
446            yhteys = new NetworkConnection("Tasoloikka22");
447            yhteys.OnMessageReceive += UusiViesti;
448            yhteys.OnConnect += UusiPelaaja;
449            yhteys.OnDisconnect += PoistaPelaaja;
450            if (!yhteys.Connect("130.234.162.86", 3074))
451            {
452                MessageWindow mw = new MessageWindow("Yhdistäminen epäonnistui");
453                mw.Closed += delegate { Exit(); };
454                Add(mw);
455                return;
456            }
457            Exiting += yhteys.Close;
458
459            Timer pakettiajastin = new Timer();
460            pakettiajastin.Interval = 0.05;
461            pakettiajastin.Timeout += PaivitaPaketti;
462            pakettiajastin.Start();
463            */
464        }
465    }
466    void LuoTiiliseina(Vector paikka, double leveys, double korkeus)
467    {
468        PhysicsObject Tiiliseina = PhysicsObject.CreateStaticObject(leveys, korkeus);
469        Tiiliseina.Position = paikka;
470        Tiiliseina.Color = Color.Black;
471        Tiiliseina.Image = Tiiliseinakuva;
472        Tiiliseina.Tag = "tiiliseina";
473        Add(Tiiliseina);
474    }
475    void LuoAsekauppa(Vector paikka, double leveys, double korkeus)
476    {
477        Asekauppa = PhysicsObject.CreateStaticObject(leveys, korkeus);
478        Asekauppa.Position = paikka;
479        Asekauppa.Color = Color.Black;
480        Asekauppa.Tag = "asekauppa";
481        Add(Asekauppa);
482    }
483    void EKaupastaPois()
484    {
485        if (Vector.Distance(pelaaja.Position, poiskaupastapalikka.Position) < 100)
486        {
487            KaupastaPois = true;
488            E.IsVisible = true;
489        }
490        else
491        {
492            KaupastaPois = false;
493            E.IsVisible = false;
494        }
495    }
496    void PoisKaupasta()
497    {
498        muutPelaajat.Clear();
499        ClearAll();
500        LuoKentta("kentta1");
501        LisaaNappaimet();
502        LuoTausta();
503        LuoKursori();
504        LuoElamaLaskuri();
505        MikaTappovaline();
506        PiirraRahaLaskuri();
507        //LuoKauppaTausta();
508        Camera.Follow(pelaaja);
509        Camera.ZoomFactor = 1.2;
510        Camera.StayInLevel = true;
511    }
512    void LuoKauppaSeta(Vector paikka, double leveys, double korkeus)
513    {
514        kauppaseta = new PlatformCharacter(75, 100);
515        kauppaseta.Position = paikka;
516        kauppaseta.Image = kauppeseta;
517        kauppaseta.Tag = "kauppesete";
518        Add(kauppaseta);
519
520        RandomMoverBrain tasoAivot = new RandomMoverBrain();
521        tasoAivot.Speed = 500;
522        kauppaseta.Brain = tasoAivot;
523    }
524    void Pelasta(Vector paikka, double leveys, double korkeus)
525    {
526        Add(pelaaja);
527        pelaaja.Position = paikka;
528    }
529
530    void LisaaKauppaanMeno(Vector paikka, double leveys, double korkeus)
531    {
532        KauppaanMeno = PhysicsObject.CreateStaticObject(leveys, korkeus);
533        KauppaanMeno.Position = paikka;
534        KauppaanMeno.Color = Color.Black;
535        KauppaanMeno.Tag = "Kauppaanmeno";
536        Add(KauppaanMeno);
537
538        E = new GameObject(20, 20);
539        E.Image = Ekuva;
540        E.X = KauppaanMeno.X;
541        E.Y = KauppaanMeno.Y + 150;
542        Add(E);
543    }
544
545    void KauppaEPois()
546    {
547        if (Vector.Distance(pelaaja.Position, KauppaanMeno.Position) < 100)
548        {
549            onKauppaE = true;
550            E.IsVisible = true;
551        }
552        else
553        {
554            onKauppaE = false;
555            E.IsVisible = false;
556        }
557    }
558    void LisaaTaso(Vector paikka, double leveys, double korkeus)
559    {
560        PhysicsObject taso = PhysicsObject.CreateStaticObject(leveys, korkeus);
561        taso.Position = paikka;
562        taso.Color = Color.Green;
563        taso.Tag = "taso";
564        Add(taso);
565    }
566
567    void LisaaViisiDollaria(Vector paikka, double leveys, double korkeus)
568    {
569        PhysicsObject fivedollars = PhysicsObject.CreateStaticObject(60, 30);
570        fivedollars.IgnoresCollisionResponse = true;
571        fivedollars.Position = paikka;
572        fivedollars.Image = viisidollaria;
573        fivedollars.Tag = "5dollars";
574        Add(fivedollars);
575    }
576
577    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
578    {
579        pelaaja = pelaaja == null ? LuoPelaaja() : KopioiPelaaja(pelaaja);
580        pelaaja.Position = paikka;
581    }
582    Pelaaja KopioiPelaaja(Pelaaja vanha)
583    {
584        Pelaaja uusi = LuoPelaaja();
585        uusi.nopeus = vanha.nopeus;
586        return uusi;
587    }
588    void MeneAseKauppaan(PhysicsObject hahmo, PhysicsObject asekauppa)
589    {
590        MultiSelectWindow valikko = new MultiSelectWindow("Yo! u wanna buy a gun?!",
591"Ase (300$)", "Ak (400$)", "Kranaatti (400$)");
592        valikko.ItemSelected += OstaAse;
593       Add(valikko);
594
595    }
596    void OstaAse(int valinta)
597    {
598        switch (valinta)
599        {
600            case 0:
601                if (rahet >= 300)
602                {
603                    onAse = true;
604                    rahet.Value -= 300;
605                    valittuase = 0;
606                    LuoAseKursori();
607                }
608                break;
609            case 1:
610                if (rahet >= 400)
611                {
612                    onAk = true;
613                    valittuase = 1;
614                    rahet.Value -= 400;
615                }
616                break;
617            case 2:
618                if (rahet >= 400)
619                {
620                    kranaattiKadessa = true;
621                    valittuase = 2;
622                    rahet.Value -= 400;
623                }
624                break;
625        }
626    }
627    Pelaaja LuoPelaaja()
628    {
629        ukkelinKavely = LoadAnimation("ukkeli");
630
631        Pelaaja pelaaja = new Pelaaja(75, 100);
632        pelaaja.Mass = 4.0;
633        pelaaja.Tag = "pelaaja";
634        pelaaja.Image = pelaajanKuva;
635        AddCollisionHandler(pelaaja, "5dollars", TormaaViiteenDollariin);
636        AddCollisionHandler(pelaaja, "satadollaria", TormaaSataanDollareihin);
637        AddCollisionHandler(pelaaja, "asekauppa", MeneAseKauppaan);
638        //pelaaja.Animation = new Animation(ukkelinKavely);
639        pelaaja.AnimWalk = new Animation(ukkelinKavely);
640        pelaaja.AnimIdle = new Animation(pelaajanKuva);
641        Add(pelaaja);
642
643        return pelaaja;
644    }
645    void TormaaSataanDollareihin(PhysicsObject hahmo, PhysicsObject satadollaria)
646    {
647        rahet.Value += 100;
648        satadollaria.Destroy();
649    }
650    void LisaaNappaimet()
651    {
652        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
653        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
654
655        //Keyboard.Listen(Key.Left, ButtonState.Pressed, Liikuta, "Liikkuu vasemmalle", pelaaja, -nopeus);
656        //Keyboard.Listen(Key.Right, ButtonState.Pressed, Liikuta, "Liikkuu vasemmalle", pelaaja, nopeus);
657
658        Keyboard.Listen(Key.Left, ButtonState.Down, Liikuta3, "Liikkuu vasemmalle", pelaaja, -nopeus);
659        Keyboard.Listen(Key.Right, ButtonState.Down, Liikuta3, "Liikkuu vasemmalle", pelaaja, nopeus);
660
661        //Keyboard.Listen(Key.Left, ButtonState.Pressed, Liikuta2, "Liikkuu vasemmalle", pelaaja, -nopeus);
662        //Keyboard.Listen(Key.Right, ButtonState.Pressed, Liikuta2, "Liikkuu vasemmalle", pelaaja, nopeus);
663
664        Keyboard.Listen(Key.Left, ButtonState.Released, Liikuta3, "Liikkuu vasemmalle", pelaaja, 0.0);
665        Keyboard.Listen(Key.Right, ButtonState.Released, Liikuta3, "Liikkuu vasemmalle", pelaaja, 0.0);
666
667        Keyboard.Listen(Key.Up, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
668        Keyboard.Listen(Key.D1, ButtonState.Pressed, valitsease, "ASDASD", pelaaja, 0);
669        Keyboard.Listen(Key.D2, ButtonState.Pressed, valitsease, "ASDASD hyppää", pelaaja, 1);
670        Keyboard.Listen(Key.D3, ButtonState.Pressed, valitsease, "ASDASD hyppää", pelaaja, 2);
671
672        Keyboard.Listen(Key.E, ButtonState.Pressed, ENapit, "Rakennuksiin meno");
673
674        Keyboard.Listen(Key.T, ButtonState.Pressed, LahetaViesti, "Helou");
675
676        Mouse.Listen(MouseButton.Left, ButtonState.Down, Ammu, "oaisd", pelaaja);
677
678        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
679
680        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta3, "Pelaaja liikkuu vasemmalle", pelaaja, -nopeus);
681        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta3, "Pelaaja liikkuu oikealle", pelaaja, nopeus);
682        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja, hyppyNopeus);
683
684        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
685    }
686    void ENapit()
687    {
688        if (onKauppaE == true)
689        {
690            Menekauppaan();
691            onKauppaE = false;
692        }
693        else if (KaupastaPois == true)
694        {
695            PoisKaupasta();
696        }
697    }
698    void Menekauppaan()
699    {
700        pelaaja.Destroy();
701        muutPelaajat.Clear();
702        ClearAll();
703        LuoKentta("kauppa");
704        LisaaNappaimet();
705        LuoKursori();
706        MikaTappovaline();
707        LuoElamaLaskuri();
708        PiirraRahaLaskuri();
709        //LuoKauppaTausta();
710        Camera.Follow(pelaaja);
711        Camera.ZoomFactor = 1.2;
712        Camera.StayInLevel = true;
713
714    }
715    void valitsease(Pelaaja pelaaja, int Ase)
716    {
717        valittuase = Ase;
718        saaAmpua = true;
719        Tappovalinekuva();
720    }
721    void PiirraRahaLaskuri()
722    {
723        Label rahanaytto = new Label();
724        //Vector pos = pelaaja.Position + new Vector(250, 250);
725        Vector res = new Vector(250, 250);//Camera.WorldToScreen(pos);
726        rahanaytto.X = res.X;//Window.Left + 350;
727        rahanaytto.Y = res.Y;//Window.Top + 250;
728        rahanaytto.TextColor = Color.Black;
729        rahanaytto.Color = Color.White;
730        rahanaytto.IntFormatString = "Rahet: {0:D1}";
731        Add(rahanaytto);
732
733        rahanaytto.BindTo(rahet);
734        Add(rahanaytto);
735    }
736    void LuoKauppaTausta()
737    {
738        Level.Width -= 1400;
739
740        GameObject kauppatausta = new GameObject(ruudunKoko.X / 2, ruudunKoko.Y / 4); //Screen.Width, Screen.Height/2
741        kauppatausta.Image = kauppaTausta;
742        kauppatausta.Y = -Window.Height / 4;
743        Add(kauppatausta, -3);
744        Layers[-3].RelativeTransition = new Vector(0.5, 0.0);
745
746        PhysicsObject oikeaReuna = Level.CreateRightBorder();
747        //oikeaReuna.X = Window.Right - 300;
748        oikeaReuna.IsVisible = false;
749
750        PhysicsObject vasenReuna = Level.CreateLeftBorder();
751        //vasenReuna.X = Window.Left - 1600;
752        vasenReuna.IsVisible = false;
753
754        Level.Background.Color = new Color(249, 178, 52);
755
756    }
757    void Ammu(PlatformCharacter pelaaja)
758    {
759        if (onAse && !pelaaja.IsDestroyed && saaAmpua && valittuase == 0)
760        {
761            saaAmpua = false;
762            Timer.SingleShot(1.0, delegate { saaAmpua = true; });
763
764            Vector suunta = (Mouse.PositionOnWorld - pelaaja.Position).Normalize();
765            Vector nopeus = suunta * 400;
766            Vector paikka = pelaaja.Position + suunta * RUUDUN_KOKO;
767            LuoOmaAmmus(paikka, nopeus, "ase");
768
769            AmmusPaketti paketti = new AmmusPaketti();
770            paketti.X = paikka.X;
771            paketti.Y = paikka.Y;
772            paketti.VX = nopeus.X;
773            paketti.VY = nopeus.Y;
774            paketti.tag = "ase";
775            paketti.paikka = nykyinenPaikka;
776            yhteys.SendObject(paketti);
777        }
778        if (onAk && !pelaaja.IsDestroyed && saaAmpua && valittuase == 1)
779        {
780            saaAmpua = false;
781            Timer.SingleShot(0.1, delegate { saaAmpua = true; });
782
783            Vector suunta = (Mouse.PositionOnWorld - pelaaja.Position).Normalize();
784            Vector nopeus = suunta * 400;
785            Vector paikka = pelaaja.Position + suunta * RUUDUN_KOKO;
786            LuoOmaAmmus(paikka, nopeus, "ak");
787
788            AmmusPaketti paketti = new AmmusPaketti();
789            paketti.X = paikka.X;
790            paketti.Y = paikka.Y;
791            paketti.VX = nopeus.X;
792            paketti.VY = nopeus.Y;
793            paketti.tag = "ak";
794            paketti.paikka = nykyinenPaikka;
795            yhteys.SendObject(paketti);
796        }
797        if (kranaattiKadessa && !pelaaja.IsDestroyed && saaAmpua && valittuase == 2)
798        {
799            saaAmpua = false;
800            Timer.SingleShot(10.0, delegate { saaAmpua = true; });
801
802
803            Vector suunta = (Mouse.PositionOnWorld - pelaaja.Position).Normalize();
804            Vector nopeus = suunta * 400;
805            Vector paikka = pelaaja.Position + suunta * RUUDUN_KOKO;
806            HeitaKranaatti(paikka, nopeus, pelaaja);
807
808            KranaattiPaketti kranupaketti = new KranaattiPaketti();
809            kranupaketti.X = paikka.X;
810            kranupaketti.Y = paikka.Y;
811            kranupaketti.VX = nopeus.X;
812            kranupaketti.VY = nopeus.Y;
813            kranupaketti.paikka = nykyinenPaikka;
814            yhteys.SendObject(kranupaketti);
815        }
816    }
817    void HeitaKranaatti(Vector paikka, Vector nopeus, PlatformCharacter heittaja)
818    {
819        Grenade kranu = new Grenade(4.0);
820        kranu.Position = paikka;
821        kranu.Velocity = nopeus;
822        heittaja.Throw(kranu, Angle.FromDegrees(30), 10000);
823    }
824    void LuoAmmus(Vector paikka, Vector nopeus, string tag)
825    {
826        PhysicsObject Ammus = new PhysicsObject(10, 10);
827        Ammus.Position = paikka;
828        //Ammus.X = pelaaja.X + 50;
829        //Ammus.Y = pelaaja.Y;
830        Ammus.Velocity = nopeus;
831        Ammus.IgnoresGravity = true;
832        Ammus.Image = ammusKuva;
833        Ammus.Tag = tag;
834        Ammus.LifetimeLeft = TimeSpan.FromSeconds(3);
835        Ammus.IgnoresCollisionResponse = true;
836        //Ammus.IgnoresCollisionWith(pelaaja);
837        Add(Ammus);
838
839        AddCollisionHandler(Ammus, "pelaaja", AmmusOsuuPelaajaan);
840
841        AddCollisionHandler(Ammus, "taso", AmmusOsuu);
842    }
843    void AmmusOsuuSetaan(PhysicsObject Ammus, PhysicsObject kohde)
844    {
845        Ammus.Destroy();
846
847        SetaRahet(12500, 12500);
848        SetaRahet(-12500, -12500);
849        SetaRahet(0, 1250);
850        SetaRahet(10000, 12500);
851
852        kauppaseta.Destroy();
853    }
854    void SetaRahet(double x, double y)
855    {
856        PhysicsObject satadollaria = new PhysicsObject(60, 30);
857        //fivedollars.IgnoresCollisionResponse = true;
858        satadollaria.Y = kauppaseta.Y + 10;
859        satadollaria.X = kauppaseta.X + 10;
860        satadollaria.Image = satadollariakuva;
861        satadollaria.Tag = "satadollaria";
862        Add(satadollaria);
863        satadollaria.Push(new Vector(x, y));
864    }
865    void LuoOmaAmmus(Vector paikka, Vector nopeus, string tag)
866    {
867        PhysicsObject Ammus = new PhysicsObject(10, 10);
868        Ammus.Position = paikka;
869        //Ammus.X = pelaaja.X + 50;
870        //Ammus.Y = pelaaja.Y;
871        Ammus.Velocity = nopeus;
872        Ammus.IgnoresGravity = true;
873        Ammus.Image = ammusKuva;
874        Ammus.Tag = tag;
875        Ammus.LifetimeLeft = TimeSpan.FromSeconds(3);
876        Ammus.IgnoresCollisionResponse = true;
877        //Ammus.IgnoresCollisionWith(pelaaja);
878        Add(Ammus);
879
880        Vector suunta = (Mouse.PositionOnWorld - Ammus.AbsolutePosition).Normalize();
881        Ammus.Angle = suunta.Angle;
882
883        //AddCollisionHandler(Ammus, "pelaaja", AmmusOsuuPelaajaan);
884        AddCollisionHandler(Ammus, "kauppesete", AmmusOsuuSetaan);
885        AddCollisionHandler(Ammus, "taso", AmmusOsuu);
886    }
887
888    void AmmusOsuu(PhysicsObject Ammus, PhysicsObject kohde)
889    {
890        Ammus.Destroy();
891    }
892
893    void AmmusOsuuPelaajaan(PhysicsObject Ammus, PhysicsObject kohde)
894    {
895        //if (kohde is Pelaaja)
896        if (kohde == pelaaja)
897        {
898            int damage = 1;
899
900            if (Ammus.Tag.ToString() == "ase") damage = 5;
901
902            elamaLaskuri.Value -= damage;
903        }
904    }
905
906    void LahetaViesti()
907    {
908        InputWindow kysymysIkkuna = new InputWindow("Lähetä Viesti");
909        kysymysIkkuna.TextEntered += ProcessInput;
910        Add(kysymysIkkuna);
911    }
912    void ProcessInput(InputWindow ikkuna)
913    {
914        string vastaus = ikkuna.InputBox.Text;
915        if (vastaus != "console")
916        {
917            MessageDisplay.Add(vastaus);
918            yhteys.SendMessage(vastaus);
919        }
920        else
921        {
922            LahetaConsoleViesti();
923        }
924    }
925    void LahetaConsoleViesti()
926    {
927        InputWindow ConsoleIkkuna = new InputWindow("CMD");
928        ConsoleIkkuna.TextEntered += CmdProcessInput;
929        Add(ConsoleIkkuna);
930    }
931    void CmdProcessInput(InputWindow ikkuna)
932    {
933        TulkitseKomento(yhteys.guid, ikkuna.InputBox.Text);
934        //yhteys.SendMessage(ikkuna.InputBox.Text);
935    }
936
937    Pelaaja HaePelaaja(Guid id)
938    {
939        if (muutPelaajat.ContainsKey(id))
940        {
941            return muutPelaajat[id];
942        }
943        return pelaaja;
944    }
945
946    void TulkitseKomento(Guid id, string vastaus)
947    {
948        char[] delimiterChars = { ' ' };
949        string[] komento = vastaus.Split(delimiterChars);
950        if (vastaus == "A-j")
951        {
952            LuoAj(id);
953        }
954        if (vastaus == "AjSkin")
955        {
956            LuoAjSkin(id);
957        }
958        if (vastaus == "Ase")
959        {
960            LuoAseKursori();
961            onAse = true;
962            valittuase = 0;
963            Tappovalinekuva();
964        }
965        if (vastaus == "Ak")
966        {
967            LuoAseKursori();
968            onAk = true;
969            valittuase = 1;
970            Tappovalinekuva();
971        }
972        if (vastaus == "kranu")
973        {
974            LuoAseKursori();
975            kranaattiKadessa = true;
976            valittuase = 2;
977            Tappovalinekuva();
978        }
979        if (vastaus == "VisibleCursor")
980        {
981            IsMouseVisible = true;
982        }
983        if (vastaus == "UnVisibleCursor")
984        {
985            IsMouseVisible = false;
986        }
987        if (komento[0] == "Gravity")
988        {
989            if (komento.Length >= 3)
990            {
991                double x, y;
992                try
993                {
994                    x = double.Parse(komento[1]);
995                    y = double.Parse(komento[2]);
996                    Gravitymuutos(x, y);
997                }
998                catch (Exception e)
999                {
1000                    // ei onnistu
1001                }
1002            }
1003        }
1004    }
1005    void LuoAjSkin(Guid id)
1006    {
1007        HaePelaaja(id).Image = Aajii;
1008    }
1009    void Gravitymuutos(double x, double y)
1010    {
1011        Gravity = new Vector(x, y);
1012    }
1013
1014    void LuoAj(Guid id)
1015    {
1016        Pelaaja pelaaja = HaePelaaja(id);
1017
1018        PhysicsObject Aj = new PhysicsObject(50, 50);
1019        Aj.Position = pelaaja.Position;
1020        Aj.Image = Aajii;
1021        Add(Aj);
1022    }
1023
1024    void Liikuta3(Pelaaja hahmo, double nopeus)
1025    {
1026        hahmo.Walk(nopeus);
1027        hahmonopeus = nopeus;
1028        PaivitaPaketti();
1029    }
1030
1031    void PaivitaPaketti()
1032    {
1033        Paketti paketti = new Paketti();
1034        paketti.X = pelaaja.X;
1035        paketti.Y = pelaaja.Y;
1036        paketti.VX = pelaaja.Velocity.X;
1037        paketti.VY = pelaaja.Velocity.Y;
1038        paketti.nopeus = hahmonopeus;
1039        paketti.paikka = nykyinenPaikka;
1040
1041        yhteys.SendObject(paketti);
1042    }
1043    void Hyppaa(Pelaaja hahmo, double nopeus)
1044    {
1045        hahmo.Jump(nopeus);
1046    }
1047
1048    void TormaaViiteenDollariin(PhysicsObject hahmo, PhysicsObject fivedollars)
1049    {
1050        MessageDisplay.Add("Yo! U got some money!");
1051        fivedollars.Destroy();
1052    }
1053}
Note: See TracBrowser for help on using the repository browser.