source: 2016/24/JimiR/MultiFuse/MultiFuse/MultiFuse/MultiFuse.cs @ 7299

Revision 7299, 19.3 KB checked in by jijaolri, 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
9public class MultiFuse : PhysicsGame
10{
11
12
13
14    [Save]
15    int level = 5;
16    [Save]
17    string nimi;
18
19    DoubleMeter nopeus = new DoubleMeter(100, 100, 200);
20
21
22    PhysicsObject palikka;
23    PhysicsObject wiseguy;
24    PhysicsObject kauppias;
25    PhysicsObject pelaaja;
26    PhysicsObject teleporter;
27
28
29    DoubleMeter attacklvl = new DoubleMeter(1);
30    DoubleMeter healthlvl = new DoubleMeter(10, 0, 10);
31    DoubleMeter ranged = new DoubleMeter(1);
32    GameObject cursor;
33    Image alkuvalikonKuva = LoadImage("grass");
34    Image cursorinKuva = LoadImage("cursor");
35    Image puunKuva = LoadImage("tree");
36    Image miekanKuva = LoadImage("");
37    Image marketinKuva = LoadImage("lattia");
38    Image dungeoninlattia = LoadImage("dungeoninlattia");
39    Image fireballinKuva = LoadImage("fireball");
40    private Image[] destroyerinKavely = LoadImages("anim1", "anim2", "anim3", "anim4", "anim5");
41    private Image[] pelaajaWalk = LoadImages("walk1", "walk2", "walk3", "walk4", "walk5", "walk6", "walk4", "walk3", "walk2", "walk1", "walk7", "walk8", "walk9", "walk10", "walk11", "walk12", "walk11", "walk10", "walk9", "walk8", "walk7");
42
43    public override void Begin()
44    {
45
46        LuoAlkuValikko();
47        // TODO: Kirjoita ohjelmakoodisi tähän
48
49        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
50        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
51    }
52   
53    void AloitaPeli()
54    {
55        TileMap level = TileMap.FromLevelAsset("test");
56        level.SetTileMethod('#', LuoPalikka);
57        level.SetTileMethod('P', LuoPelaaja);
58        level.SetTileMethod('W', LuoWiseGuy);
59        level.SetTileMethod('T', LuoTeleporter);
60        level.Execute(50, 50);
61        IsMouseVisible = false;
62        IsFullScreen = true;
63        LuoCursor();
64    }
65
66    void Options()
67    {
68
69        //Healthit pelaaja = new Healthit(50, 50);
70        //pelaaja.Attack.Value = 2;
71
72    }
73
74    void LuoAlkuValikko()
75    {
76        MultiSelectWindow alkuValikko = new MultiSelectWindow("MultiFuse",
77"Start", "Options", "Quit");
78        Add(alkuValikko);
79        alkuValikko.AddItemHandler(0, KysyNimi);
80        alkuValikko.AddItemHandler(1, Options);
81        alkuValikko.AddItemHandler(2, Exit);
82        alkuValikko.Color = Color.Transparent;
83        Level.Background.Image = alkuvalikonKuva;
84        Level.Background.TileToLevel();
85        Camera.ZoomToLevel();
86    }
87
88    void LuoPuu(Vector paikka, double leveys, double korkeus)
89    {
90        PhysicsObject puu = PhysicsObject.CreateStaticObject(100, 100);
91        puu.Position = paikka; puu.Image = puunKuva;
92    }
93
94    void LuoPelaaja(Vector paikka, double leveys, double korkeus)
95    {
96        pelaaja = new PhysicsObject(50, 75);
97        pelaaja.Position = paikka;
98        pelaaja.CanRotate = false;
99        pelaaja.AngularDamping = 0.95;
100        pelaaja.LinearDamping = 0.7;
101        pelaaja.Animation = new Animation(pelaajaWalk);
102        Add(pelaaja);
103
104        Label nimilabel = new Label(nimi + " ");
105
106
107        PushButton juoksupainike = new PushButton("EsJuoksu");
108        Add(juoksupainike);
109        juoksupainike.Clicked += Juoksee;
110        juoksupainike.X = Screen.Right - 150;
111        juoksupainike.Y = Screen.Bottom + 800;
112
113        ProgressBar elamaPalkki = new ProgressBar(200, 40);
114        elamaPalkki.X = Screen.Right - 150;
115        elamaPalkki.Y = Screen.Top - 100;
116        elamaPalkki.BindTo(healthlvl);
117        Add(elamaPalkki);
118
119        LuoSkill(puunKuva, attacklvl, new Vector(Screen.Right - 200, Screen.Bottom + 750));
120        Label healthLabel = LuoSkill(puunKuva, null, new Vector(Screen.Right - 200, Screen.Bottom + 700));
121
122        Timer ajastin = new Timer();
123        ajastin.Interval = 0.01;
124        ajastin.Timeout += () =>
125        {
126            nimilabel.Position = Camera.WorldToScreen(pelaaja.Position + new Vector(0, 50));
127            healthLabel.Text = "" + healthlvl.MaxValue;
128        };
129        ajastin.Start();
130        Add(nimilabel);
131
132        //Keyboard.Listen(Key.A, ButtonState.Down, LiikutaPelaajaa, null, new Vector(-1000, 0));
133        //Keyboard.Listen(Key.D, ButtonState.Down, LiikutaPelaajaa, null, new Vector(1000, 0));
134        //Keyboard.Listen(Key.W, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, 1000));
135        //Keyboard.Listen(Key.S, ButtonState.Down, LiikutaPelaajaa, null, new Vector(0, -1000));
136
137        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, Lyo, "Lyö");
138        Mouse.Listen(MouseButton.Middle, ButtonState.Pressed, FireBall, "Ultimate");
139        Mouse.Listen(MouseButton.Right, ButtonState.Pressed, Liiku, "Liikkuu");
140        Keyboard.Listen(Key.Q, ButtonState.Pressed, Heal, "Healaa pelaajaa");
141
142        AddCollisionHandler(pelaaja, "wiseguy", Luowiseguyvalikko);
143        AddCollisionHandler(pelaaja, "kauppias", Luokauppa);
144        AddCollisionHandler(pelaaja, "teleporter", LuoTeleporttausvalikko);
145    }
146    void Juoksee()
147    {
148        if (nopeus.Value == nopeus.MinValue)
149        {
150            nopeus.Value = nopeus.MaxValue;
151        }
152        else
153        {
154            nopeus.Value = nopeus.MinValue;
155        }
156
157    }
158    void Liiku()
159    {
160        pelaaja.MoveTo(Mouse.PositionOnWorld, nopeus.Value, pelaaja.Animation.Stop);
161        pelaaja.Animation.Start();
162    }
163
164    void LuoPalikka(Vector paikka, double leveys, double korkeus)
165    {
166        palikka = PhysicsObject.CreateStaticObject(leveys, korkeus);
167        palikka.Position = paikka;
168        palikka.Color = Color.Black;
169        Add(palikka);
170
171    }
172
173
174    void KysyNimi()
175    {
176        InputWindow kysymysIkkuna = new InputWindow("This tale of");
177        kysymysIkkuna.TextEntered += ProcessInput;
178        Add(kysymysIkkuna);
179
180    }
181
182    void ProcessInput(InputWindow ikkuna)
183    {
184        string vastaus = ikkuna.InputBox.Text;
185        MessageDisplay.Add(vastaus);
186        nimi = vastaus;
187        AloitaPeli();
188    }
189
190    void LiikutaPelaajaa(Vector vektori)
191    {
192        pelaaja.Push(vektori);
193    }
194
195    void LuoWiseGuy(Vector paikka, double leveys, double korkeus)
196    {
197        wiseguy = new PhysicsObject(50, 50);
198        wiseguy.Position = paikka;
199        wiseguy.AngularDamping = 0.95;
200        wiseguy.LinearDamping = 0.7;
201        wiseguy.Tag = "wiseguy";
202        Add(wiseguy);
203    }
204
205    void LuoCursor()
206    {
207        cursor = new GameObject(15, 15);
208        cursor.Image = cursorinKuva;
209        //cursor.Position = Mouse.PositionOnScreen;
210        Mouse.ListenMovement(0.1, KuunteleLiiketta, null);
211        Add(cursor);
212    }
213
214    Label LuoSkill(Image kuva, DoubleMeter mittari, Vector Position)
215    {
216        Label label = new Label();
217        label.Image = kuva;
218        label.Size = new Vector(30, 30);
219        label.Position = Position;
220        Add(label);
221
222        Label numero = new Label();
223        if (mittari != null)
224        {
225            numero.BindTo(mittari);
226        }
227        numero.Position = Position + new Vector(60, 0);
228        numero.DoubleFormatString = "{0:0}";
229        Add(numero);
230        return numero;
231    }
232
233    void Luowiseguyvalikko(PhysicsObject tormaaja, PhysicsObject kohde)
234    {
235        wiseguyvalikko();
236    }
237
238    void KuunteleLiiketta(AnalogState hiirenTila)
239    {
240        cursor.X = Mouse.PositionOnWorld.X;
241        cursor.Y = Mouse.PositionOnWorld.Y;
242
243        pelaaja.Angle = (cursor.Position - pelaaja.Position).Angle;
244
245        Vector hiirenLiike = hiirenTila.MouseMovement;
246    }
247
248    void TeleportValikko()
249    {
250        MultiSelectWindow teleportvalikko = new MultiSelectWindow("Where do you want to teleport?",
251        "Markeplace", "asdasdasd", "Back");
252        teleportvalikko.AddItemHandler(0, MarketPlace);
253        teleportvalikko.AddItemHandler(1, TeleportValikko);
254        teleportvalikko.AddItemHandler(2, wiseguyvalikko);
255        Add(teleportvalikko);
256    }
257
258    void wiseguyvalikko()
259    {
260        MessageDisplay.Add("Bump!");
261        MultiSelectWindow wiseguyvalikko = new MultiSelectWindow("What do you want?",
262        "Have you got anything for me?", "Where can i teleport?", "See you again!");
263        Add(wiseguyvalikko);
264        wiseguyvalikko.AddItemHandler(0, AloitaPeli);
265        wiseguyvalikko.AddItemHandler(1, TeleportValikko);
266        wiseguyvalikko.AddItemHandler(2, Exit);
267    }
268
269    void MarketPlace()
270    {
271        ClearAll();
272        TileMap marketplace = TileMap.FromLevelAsset("marketplace");
273        marketplace.SetTileMethod('#', LuoPalikka);
274        marketplace.SetTileMethod('P', LuoPelaaja);
275        marketplace.SetTileMethod('W', LuoWiseGuy);
276        marketplace.SetTileMethod('T', LuoTeleporter);
277        marketplace.SetTileMethod('K', LuoKauppias);
278        marketplace.Execute(50, 50);
279        IsMouseVisible = false;
280        IsFullScreen = true;
281        LuoCursor();
282        Camera.ZoomToLevel();
283        Level.Background.Image = marketinKuva;
284        Level.Background.TileToLevel();
285        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
286        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
287    }
288
289    void LuoKauppias(Vector paikka, double leveys, double korkeus)
290    {
291        kauppias = PhysicsObject.CreateStaticObject(50, 50);
292        kauppias.Shape = Shape.Circle;
293        kauppias.Tag = "kauppias";
294        kauppias.Position = paikka;
295        Add(kauppias);
296    }
297
298    void Luokauppa(PhysicsObject tormaaja, PhysicsObject kohde)
299    {
300        MultiSelectWindow kauppavalikko = new MultiSelectWindow("S Market",
301       "Food", "arrow", "exit");
302        Add(kauppavalikko);
303    }
304
305    void LuoTeleporter(Vector paikka, double leveys, double korkeus)
306    {
307        teleporter = PhysicsObject.CreateStaticObject(100, 100);
308        teleporter.Position = paikka;
309        teleporter.Shape = Shape.Circle;
310        teleporter.Color = Color.Violet;
311        teleporter.Tag = "teleporter";
312        Add(teleporter);
313    }
314
315    void LuoTeleporttausvalikko(PhysicsObject tormaaja, PhysicsObject kohde)
316    {
317        MultiSelectWindow teleportaatioValikko = new MultiSelectWindow("Where would you like to go?",
318        "Dungeons", "Bosses", "TutorialPlace");
319        Add(teleportaatioValikko);
320
321        teleportaatioValikko.AddItemHandler(0, Dungeons);
322        teleportaatioValikko.AddItemHandler(1, Bosses);
323        teleportaatioValikko.AddItemHandler(2, TutorialPlace);
324    }
325
326    void Dungeons()
327
328    {
329        MultiSelectWindow dungeonsValikko = new MultiSelectWindow("Dungeons",
330        "Dungeon lvl 1-100", "Dungeon lvl 100-1000", "Dungeon lvl 1000-10000");
331        Add(dungeonsValikko);
332        dungeonsValikko.AddItemHandler(0, Dungeon1);
333        dungeonsValikko.AddItemHandler(1, Dungeon2);
334        dungeonsValikko.AddItemHandler(2, Dungeon3);
335    }
336    void Bosses()
337
338    {
339        MultiSelectWindow bossesValikko = new MultiSelectWindow("Dungeons",
340        "Bosses lvl 1-100", "Bosses lvl 100-1000", "Bosses lvl 1000-10000");
341        Add(bossesValikko);
342        bossesValikko.AddItemHandler(0, Bosses1);
343        bossesValikko.AddItemHandler(1, Bosses2);
344        bossesValikko.AddItemHandler(2, Bosses3);
345    }
346    void TutorialPlace()
347
348    {
349        ClearAll();
350        AloitaPeli();
351    }
352
353    void Dungeon1()
354    {
355        ClearAll();
356        TileMap dungeon1 = TileMap.FromLevelAsset("dungeon1");
357        dungeon1.SetTileMethod('#', LuoPalikka);
358        dungeon1.SetTileMethod('P', LuoPelaaja);
359        dungeon1.SetTileMethod('W', LuoWiseGuy);
360        dungeon1.SetTileMethod('S', LuoSkeleton);
361        dungeon1.SetTileMethod('T', LuoTeleporter);
362        dungeon1.SetTileMethod('K', LuoKauppias);
363        dungeon1.Execute(50, 50);
364        IsMouseVisible = false;
365        IsFullScreen = true;
366        LuoCursor();
367        Camera.ZoomToLevel();
368        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
369        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
370    }
371    void Dungeon2()
372    {
373        ClearAll();
374        TileMap dungeon2 = TileMap.FromLevelAsset("marketplace");
375        dungeon2.SetTileMethod('#', LuoPalikka);
376        dungeon2.SetTileMethod('P', LuoPelaaja);
377        dungeon2.SetTileMethod('W', LuoWiseGuy);
378        dungeon2.SetTileMethod('T', LuoTeleporter);
379        dungeon2.SetTileMethod('K', LuoKauppias);
380        dungeon2.Execute(50, 50);
381        IsMouseVisible = false;
382        IsFullScreen = true;
383        LuoCursor();
384        Camera.ZoomToLevel();
385        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
386        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
387    }
388    void Dungeon3()
389    {
390        ClearAll();
391        TileMap dungeon3 = TileMap.FromLevelAsset("marketplace");
392        dungeon3.SetTileMethod('#', LuoPalikka);
393        dungeon3.SetTileMethod('P', LuoPelaaja);
394        dungeon3.SetTileMethod('W', LuoWiseGuy);
395        dungeon3.SetTileMethod('T', LuoTeleporter);
396        dungeon3.SetTileMethod('K', LuoKauppias);
397        dungeon3.Execute(50, 50);
398        IsMouseVisible = false;
399        IsFullScreen = true;
400        LuoCursor();
401        Camera.ZoomToLevel();
402        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
403        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
404    }
405
406    void Bosses1()
407    {
408        ClearAll();
409        TileMap bosses1 = TileMap.FromLevelAsset("bosses1");
410        bosses1.SetTileMethod('#', LuoPalikka);
411        bosses1.SetTileMethod('P', LuoPelaaja);
412        bosses1.SetTileMethod('W', LuoWiseGuy);
413        bosses1.SetTileMethod('S', LuoSkeleton);
414        bosses1.SetTileMethod('T', LuoTeleporter);
415        bosses1.SetTileMethod('K', LuoKauppias);
416        bosses1.SetTileMethod('B', LuoDestroyer);
417        bosses1.Execute(50, 50);
418        IsMouseVisible = false;
419        IsFullScreen = true;
420        Level.Background.Image = dungeoninlattia;
421        Level.Background.FitToLevel();
422        LuoCursor();
423        Camera.ZoomToLevel();
424        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
425        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
426    }
427    void Bosses2()
428    {
429
430    }
431    void Bosses3()
432    {
433
434    }
435
436    void LuoSkeleton(Vector paikka, double leveys, double korkeus)
437    {
438        Vihu skeleton = new Vihu(50, 50);
439        skeleton.Position = paikka;
440        skeleton.Shape = Shape.Circle;
441        skeleton.Tag = "skeleton";
442        skeleton.CanRotate = false;
443        //skeleton.AngularDamping = 0.95;
444        //skeleton.LinearDamping = 0.7;
445        Add(skeleton);
446
447        ProgressBar elamaPalkki = new ProgressBar(75, 15);
448        //elamaPalkki.X = Screen.Right - 150;
449        elamaPalkki.Y = 50;
450        elamaPalkki.BindTo(skeleton.ElamaLaskuri);
451        skeleton.Add(elamaPalkki);
452
453        RandomMoverBrain satunnaisAivot = new RandomMoverBrain(50);
454        // satunnaisAivot.ChangeMovementSeconds = 3;//Ominaisuuksien muokkaaminen
455
456        //AddCollisionHandler(skeleton, pelaaja, LyoPelaajaa);
457
458        FollowerBrain seuraajanAivot = new FollowerBrain(pelaaja);
459        seuraajanAivot.Speed = 100;                 // Millä nopeudella kohdetta seurataan
460        seuraajanAivot.DistanceFar = 200;           // Etäisyys jolla aletaan seurata kohdetta
461        seuraajanAivot.DistanceClose = 50;         // Etäisyys jolloin ollaan lähellä kohdetta
462        seuraajanAivot.StopWhenTargetClose = false;  // Pysähdytään kun ollaan lähellä kohdetta
463        seuraajanAivot.FarBrain = satunnaisAivot;   // Käytetään satunnaisaivoja kun ollaan kaukana
464        skeleton.Brain = seuraajanAivot;
465
466        //seuraajanAivot.TargetClose += LyoPelaajaa;
467
468        Timer lyontiajastin = new Timer();
469        lyontiajastin.Interval = 2.0;
470        lyontiajastin.Timeout += delegate
471        {
472            if (Vector.Distance(skeleton.Position, pelaaja.Position) < 70)
473            {
474                LyoPelaajaa();
475            }
476        };
477        lyontiajastin.Start();
478        skeleton.Destroyed += lyontiajastin.Stop;
479
480        AddCollisionHandler(skeleton, "ase", VihuOttaaDamagea);
481        AddCollisionHandler(skeleton, "ase1", VihuOttaaDamagea1);
482
483    }
484
485    void Lyo()
486    {
487        PhysicsObject ase = new PhysicsObject(60, 20);
488        Vector suunta = (cursor.Position - pelaaja.Position).Normalize();
489        ase.Position = pelaaja.Position + suunta * 50;
490        ase.LifetimeLeft = TimeSpan.FromSeconds(0.1);
491        ase.Angle = pelaaja.Angle;
492        ase.Tag = "ase";
493        Add(ase);
494    }
495
496    //void LyoPelaajaa(PhysicsObject tormaaja, PhysicsObject kohde)
497    void LyoPelaajaa()
498    {
499        healthlvl.Value -= 1;
500
501        healthlvl.MaxValue += 1;
502    }
503
504    void FireBall()
505    {
506        PhysicsObject fireball = new PhysicsObject(500, 100);
507        Vector suunta = (cursor.Position - pelaaja.Position).Normalize();
508        fireball.Position = pelaaja.Position + suunta * 350;
509        fireball.LifetimeLeft = TimeSpan.FromSeconds(1.0);
510        fireball.Image = fireballinKuva;
511        fireball.Angle = pelaaja.Angle;
512        fireball.Tag = "ase1";
513        Add(fireball);
514    }
515    //void ElectricBolt()
516    //{
517    //    PhysicsObject electricbolt = new PhysicsObject(60, 20);
518    //    Vector suunta = (pelaaja.Position - destroyer.Position).Normalize();
519    //    electricbolt.Position = pelaaja.Position + suunta * 50;
520    //    electricbolt.LifetimeLeft = TimeSpan.FromSeconds(0.1);
521    //    electricbolt.Angle = pelaaja.Angle;
522    //    electricbolt.Tag = "ase";
523    //    Add(electricbolt);
524    //}
525
526
527
528    void VihuOttaaDamagea(PhysicsObject tormaaja, PhysicsObject kohde)
529    {
530        Vihu vihu = tormaaja as Vihu;
531
532        vihu.ElamaLaskuri.Value -= (int)attacklvl.Value;
533        attacklvl.Value += 1;
534    }
535
536    void VihuOttaaDamagea1(PhysicsObject tormaaja, PhysicsObject kohde)
537    {
538        Vihu vihu = tormaaja as Vihu;
539
540        vihu.ElamaLaskuri.Value -= (int)attacklvl.Value * 5;
541    }
542
543    void LuoDestroyer(Vector paikka, double leveys, double korkeus)
544    {
545        PhysicsObject destroyer = new PhysicsObject(80, 80);
546        destroyer.Position = paikka;
547        destroyer.Shape = Shape.Circle;
548        destroyer.Animation = new Animation(destroyerinKavely);
549        destroyer.Animation.Start();
550        Add(destroyer);
551
552        RandomMoverBrain satunnaisAivotboss = new RandomMoverBrain(200);
553
554        //Ominaisuuksien muokkaaminen
555        satunnaisAivotboss.ChangeMovementSeconds = 0.5;
556
557        //Aivot käyttöön oliolle
558        destroyer.Brain = satunnaisAivotboss;
559
560        satunnaisAivotboss.Speed = 500;
561
562        satunnaisAivotboss.Active = true;
563    }
564
565    void Heal()
566    {
567        healthlvl.Value += 1;
568    }
569}
570class Skills : PhysicsObject
571{
572    public DoubleMeter Attack { get; set; }
573
574    //public DoubleMeter Ranged { get; set; }
575
576    public Skills(double leveys, double korkeus)
577        : base(leveys, korkeus)
578    {
579        Attack = new DoubleMeter(1);
580    }
581}
582
583class Vihu : PhysicsObject
584{
585    private IntMeter elamaLaskuri = new IntMeter(20, 0, 20);
586    public IntMeter ElamaLaskuri { get { return elamaLaskuri; } }
587
588    public Vihu(double leveys, double korkeus)
589        : base(leveys, korkeus)
590    {
591        elamaLaskuri.LowerLimit += delegate { this.Destroy(); };
592    }
593}
Note: See TracBrowser for help on using the repository browser.