source: 2016/27/PaavoH/TheDive/TheDive/TheDive/TheDive.cs @ 9455

Revision 9455, 6.5 KB checked in by rikavila, 2 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8class Inventory : Widget
9{
10    /// <summary>
11    /// Tapahtuma, kun esine on valittu.
12    /// </summary>
13    public event Action<PhysicsObject> ItemSelected;
14
15    /// <summary>
16    /// Luo uuden esinevalikon.
17    /// </summary>
18    public Inventory()
19        : base(new HorizontalLayout())
20    {
21    }
22
23    /// <summary>
24    /// Lisää esineen.
25    /// </summary>
26    /// <param name="item">Lisättävä esine.</param>
27    /// <param name="kuva">Esineen ikoni, joka näkyy valikossa.</param>
28    public void AddItem(PhysicsObject item, Image kuva)
29    {
30        PushButton icon = new PushButton(kuva);
31        //icon.Size = new Vector(1000, 1000);
32        Add(icon);
33        icon.Clicked += delegate () { SelectItem(item); };
34    }
35
36    void SelectItem(PhysicsObject item)
37    {
38        if (ItemSelected != null)
39        {
40            ItemSelected(item);
41        }
42    }
43}
44public class TheDive : PhysicsGame
45{
46    const double nopeus = 200;
47    const double hyppyNopeus = 750;
48    const int RUUDUN_KOKO = 40;
49
50
51    PlatformCharacter pelaaja1;
52
53    Image pelaajanKuva = LoadImage("norsu");
54    Image ShellImage = LoadImage("Shell");
55    Image ChestImage = LoadImage("TreasureChest");
56    Image EmptySlotImage = LoadImage("InvSlot");
57    Image WaterImage = LoadImage("Water");
58    Image SandImage = LoadImage("Sand");
59
60    SoundEffect maaliAani = LoadSoundEffect("maali");
61
62    public override void Begin()
63    {
64        Gravity = new Vector(0, -1000);
65
66        SmoothTextures = false;
67
68        LuoKentta();
69        LisaaNappaimet();
70        //AddInventory();
71
72        Camera.Follow(pelaaja1);
73        Camera.ZoomFactor = 1.2;
74        Camera.StayInLevel = true;
75    }
76
77    void LuoKentta()
78    {
79        TileMap kentta = TileMap.FromLevelAsset("kentta1");
80        kentta.SetTileMethod('#', AddSand);
81        kentta.SetTileMethod('*', AddShell);
82        kentta.SetTileMethod('N', LisaaPelaaja);
83        kentta.SetTileMethod('+', AddChest);
84        kentta.SetTileMethod('=', AddWater);
85        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
86        Level.CreateBorders();
87        Level.Background.CreateGradient(Color.White, Color.SkyBlue);
88    }
89
90    void AddSand(Vector paikka, double leveys, double korkeus)
91    {
92        PhysicsObject Sand = PhysicsObject.CreateStaticObject(leveys, korkeus);
93        Sand.Position = paikka;
94        Sand.Image = SandImage;
95        Add(Sand);
96    }
97
98    void AddWater(Vector paikka, double leveys, double korkeus)
99    {
100        PhysicsObject Water = new PhysicsObject(leveys, korkeus);
101        Water.Position = paikka;
102        Water.Image = WaterImage;
103        Water.Tag = "Water";
104        Water.IgnoresCollisionResponse = true;
105        Water.IgnoresPhysicsLogics = true;
106        Add(Water, 3);
107    }
108
109    void AddShell(Vector paikka, double leveys, double korkeus)
110    {
111        PhysicsObject Shell = PhysicsObject.CreateStaticObject(leveys, korkeus);
112        Shell.IgnoresCollisionResponse = true;
113        Shell.Position = paikka;
114        Shell.Image = ShellImage;
115        Shell.Tag = "tahti";
116        Add(Shell);
117    }
118
119    void AddChest(Vector paikka, double leveys, double korkeus)
120    {
121        PhysicsObject Chest = PhysicsObject.CreateStaticObject(leveys, korkeus);
122        Chest.IgnoresCollisionResponse = true;
123        Chest.Position = paikka;
124        Chest.Image = ChestImage;
125        Chest.Tag = "Chest";
126        Add(Chest);
127    }
128
129    void AddInventory()
130    {
131        Inventory inv = new Inventory();
132        inv.X = 100;
133        inv.Y = Level.Bottom + 0;
134        inv.Size = new Vector(10000, 10000);
135        Add(inv);
136
137        inv.AddItem(pelaaja1, EmptySlotImage);
138        inv.AddItem(pelaaja1, EmptySlotImage);
139        inv.AddItem(pelaaja1, EmptySlotImage);
140
141    }
142    void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
143    {
144        pelaaja1 = new PlatformCharacter(leveys, korkeus);
145        pelaaja1.Position = paikka;
146        //pelaaja1.Shape = Shape.Rectangle;
147        pelaaja1.Mass = 4.0;
148        pelaaja1.Image = pelaajanKuva;
149        AddCollisionHandler(pelaaja1, "tahti", TormaaTahteen);
150        AddCollisionHandler(pelaaja1, "Chest", TouchChest);
151        AddCollisionHandler(pelaaja1, "Water", Dive);
152        Add(pelaaja1);
153    }
154
155    void LisaaNappaimet()
156    {
157        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet");
158        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
159
160        Keyboard.Listen(Key.A, ButtonState.Down, Liikuta, "", pelaaja1, -nopeus);
161        Keyboard.Listen(Key.D, ButtonState.Down, Liikuta, "", pelaaja1, nopeus);
162        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "", pelaaja1, hyppyNopeus);
163        Keyboard.Listen(Key.W, ButtonState.Down, Swim, "", pelaaja1);
164
165        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
166
167        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Liikuta, "Pelaaja liikkuu vasemmalle", pelaaja1, -nopeus);
168        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Liikuta, "Pelaaja liikkuu oikealle", pelaaja1, nopeus);
169        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", pelaaja1, hyppyNopeus);
170
171        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
172    }
173
174    void Liikuta(PlatformCharacter hahmo, double nopeus)
175    {
176        hahmo.Walk(nopeus);
177    }
178
179    void Hyppaa(PlatformCharacter hahmo, double nopeus)
180    {
181        hahmo.Jump(nopeus);
182    }
183
184    void Swim(PlatformCharacter hahmo)
185    {
186        GameObject under = GetObjectAt(hahmo.Position - new Vector(0, RUUDUN_KOKO / 2 + 2));
187        if (under != null && under.Tag == "Water")
188        {
189            hahmo.Velocity = new Vector(0, 100);
190        }
191    }
192
193    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject tahti)
194    {
195        maaliAani.Play();
196        MessageDisplay.Add("Keräsit tähden!");
197        tahti.Destroy();
198    }
199    void TouchChest(PhysicsObject hahmo, PhysicsObject chest)
200    {     
201        chest.Destroy();
202    }
203
204    void Dive(PhysicsObject hahmo, PhysicsObject Water)
205    {
206        GameObject under = GetObjectAt(hahmo.Position - new Vector(0, RUUDUN_KOKO / 2 + 2));
207        if (under != null && under.Tag == "Water")
208        {
209            hahmo.Velocity = new Vector(0, 100);
210        }
211    }
212}
Note: See TracBrowser for help on using the repository browser.