source: 2015/24/EemeliK/Nettipelijuttupelihymynaama/Nettipelijuttupelihymynaama/Nettipelijuttupelihymynaama/Nettipelijuttupelihymynaama.cs @ 7401

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