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

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