source: 2018/24/PAAVOH/TheDive/TheDive/TheDive/TheDive.cs @ 9749

Revision 9749, 9.3 KB checked in by paharvol, 19 months 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 TheDive : PhysicsGame
10{
11    const double nopeus = 200;
12    const double hyppyNopeus = 750;
13    const int RUUDUN_KOKO = 40;
14    bool IsShop;
15
16    PlatformCharacter playerbody;
17    PhysicsObject playerhead;
18    DoubleMeter healthmeter;
19    PhysicsObject fish;
20    PhysicsObject lightbulb;
21    PhysicsObject Shelf;
22
23    Image pelaajanKuva = LoadImage("norsu");
24    Image tahtiKuva = LoadImage("tahti");
25    Image sandimg = LoadImage("Sand");
26    Image shellimg = LoadImage("Shell");
27    Image shopimg = LoadImage("BackWall");
28    Image BulbOn = LoadImage("LightBulbOn");
29    Image BulbOff = LoadImage("LightBulbOff");
30    Image ShelfImg = LoadImage("Shelf");
31    Image fishimg1 = LoadImage("fish1");
32    Image fishimg2 = LoadImage("fish2");
33    Image fishimg3 = LoadImage("fish3");
34
35    SoundEffect maaliAani = LoadSoundEffect("maali");
36
37    public override void Begin()
38    {
39        LuoKentta("kentta1");
40    }
41    void SetAll()
42    {
43        SmoothTextures = false;
44        Gravity = new Vector(0, -1000);
45
46        LisaaNappaimet();
47        AddHealthMeter();
48
49        Camera.Follow(playerbody);
50        Camera.ZoomFactor = 1.2;
51        Camera.StayInLevel = true;
52        //IsFullScreen = true;
53        //SetWindowSize(1600, 900, false);
54    }
55
56    void LuoKentta(string level)
57    {
58        ClearAll();
59        TileMap kentta = TileMap.FromLevelAsset(level); //Level //Shop //kentta1
60        kentta.SetTileMethod('#', AddSand);
61        kentta.SetTileMethod('*', AddShell);
62        kentta.SetTileMethod('w', AddWater);
63        kentta.SetTileMethod('%', AddCoral);
64        kentta.SetTileMethod('o', AddPlayer);
65        kentta.SetTileMethod('8', AddShopPortal);
66        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
67        Level.CreateBorders();
68        Level.Background.Color = Color.SkyBlue;
69        //Level.AmbientLight = 0.1;
70        //IsShop = false;
71        SetAll();
72    }
73
74    void AddSand(Vector paikka, double leveys, double korkeus)
75    {
76        PhysicsObject sand = PhysicsObject.CreateStaticObject(leveys, korkeus);
77        sand.Position = paikka;
78        sand.Image = sandimg;
79        Add(sand);
80    }
81
82    void AddShopWood(Vector paikka, double leveys, double korkeus)
83    {
84        PhysicsObject wood = PhysicsObject.CreateStaticObject(leveys, korkeus);
85        wood.Position = paikka;
86        wood.Image = sandimg;
87        Add(wood);
88    }
89
90    void AddShell(Vector paikka, double leveys, double korkeus)
91    {
92        PhysicsObject shell = PhysicsObject.CreateStaticObject(leveys, korkeus);
93        shell.IgnoresCollisionResponse = true;
94        shell.Position = paikka;
95        shell.Image = shellimg;
96        shell.Tag = "shell";
97        Add(shell);
98    }
99
100    void AddCoral(Vector paikka, double leveys, double korkeus)
101    {
102        PhysicsObject coral = PhysicsObject.CreateStaticObject(leveys, korkeus);
103        coral.IgnoresCollisionResponse = true;
104        coral.Position = paikka;
105        coral.Image = tahtiKuva;
106        coral.Tag = "coral";
107        Add(coral);
108    }
109
110    void AddShopPortal(Vector paikka, double leveys, double korkeus)
111    {
112        PhysicsObject shopportal = PhysicsObject.CreateStaticObject(leveys, korkeus);
113        shopportal.IgnoresCollisionResponse = true;
114        shopportal.Position = paikka;
115        shopportal.Image = shellimg;
116        shopportal.Tag = "sp";
117        Add(shopportal);
118    }
119
120    void AddWater(Vector paikka, double leveys, double korkeus)
121    {
122        AddFish(paikka, leveys, korkeus);
123        PhysicsObject water = PhysicsObject.CreateStaticObject(leveys, korkeus);
124        water.IgnoresCollisionResponse = true;
125        water.Position = paikka;
126        water.Color = new Color(150, 150, 255, 80);
127        Add(water);
128    }
129
130    void AddPlayer(Vector paikka, double leveys, double korkeus)
131    {
132
133        playerbody = new PlatformCharacter(leveys * 0.6, korkeus);
134        playerbody.Position = paikka;
135        playerbody.Mass = 4.0;
136        playerbody.Image = pelaajanKuva;
137        AddCollisionHandler(playerbody, "shell", TormaaTahteen);
138        AddCollisionHandler(playerbody, "coral", HitCoral);
139        AddCollisionHandler(playerbody, "sp", GoShop);
140        //Add(playerbody, -1);
141
142        Vector NeckPos = new Vector(playerbody.X, playerbody.Y + korkeus);
143
144        playerhead = new PhysicsObject(leveys * 0.7, korkeus * 0.5);
145        playerhead.Position = NeckPos;
146        playerhead.Mass = 2.0;
147        playerhead.Image = pelaajanKuva;
148        playerhead.CanRotate = false;
149        //Add(playerhead, -1);
150
151        PhysicsStructure part = new PhysicsStructure(playerhead, playerbody);
152        Add(part);
153    }
154
155    void AddFish(Vector paikka, double leveys, double korkeus)
156    {
157        fish = new PhysicsObject(leveys * 0.5, korkeus * 0.3);
158        fish.Position = paikka;
159        fish.Mass = 4.0;
160        fish.Image = RandomGen.SelectOne(fishimg1, fishimg2, fishimg3);
161        fish.IgnoresCollisionResponse = false;
162        Add(fish);
163    }
164
165    void LisaaNappaimet()
166    {
167        //Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "");
168        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "");
169
170        Keyboard.Listen(Key.A, ButtonState.Down, Move, "", playerbody, -nopeus);
171        Keyboard.Listen(Key.D, ButtonState.Down, Move, "", playerbody, nopeus);
172        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "", playerbody, hyppyNopeus);
173        Keyboard.Listen(Key.W, ButtonState.Pressed, Swim, "", playerbody);
174
175        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
176
177        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Move, "Pelaaja liikkuu vasemmalle", playerbody, -nopeus);
178        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Move, "Pelaaja liikkuu oikealle", playerbody, nopeus);
179        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", playerbody, hyppyNopeus);
180
181        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
182    }
183
184    void Move(PlatformCharacter hahmo, double nopeus)
185    {
186        hahmo.Walk(nopeus);
187    }
188
189    void Hyppaa(PlatformCharacter hahmo, double nopeus)
190    {
191        hahmo.Jump(nopeus);
192    }
193
194    void Swim(PlatformCharacter hahmo)
195    {
196        GameObject under = GetObjectAt(hahmo.Position - new Vector(0, RUUDUN_KOKO / 2 + 2));
197        if (under != null && under.Tag == "Water")
198        {
199            hahmo.Velocity = new Vector(0, 100);
200        }
201    }
202
203    void TormaaTahteen(PhysicsObject hahmo, PhysicsObject shell)
204    {
205        //maaliAani.Play();
206        //MessageDisplay.Add("Keräsit tähden!");
207        shell.Destroy();
208    }
209
210    void HitCoral(PhysicsObject hahmo, PhysicsObject coral)
211    {
212        MessageDisplay.Add("osuit koralliin");
213        coral.Destroy();
214        healthmeter.Value -= 1;
215    }
216
217    void AddHealthMeter()
218    {
219        healthmeter = new DoubleMeter(10);
220        healthmeter.MaxValue = 10;
221        healthmeter.LowerLimit += LifeOut;
222
223        ProgressBar healthbar = new ProgressBar(300, 20);
224        healthbar.X = Screen.Left + 500;
225        healthbar.Y = Screen.Top - 20;
226        healthbar.BorderColor = Color.Black;
227        healthbar.BindTo(healthmeter);
228        Add(healthbar);
229    }
230
231    void LifeOut()
232    {
233        MessageDisplay.Add("U DIE N00B");
234    }
235
236    void GoShop(PhysicsObject hahmo, PhysicsObject sp)
237    { Timer Flash = new Timer();
238
239        if(IsShop == false)
240        {
241            IsShop = true;
242            LuoKentta("Shop");
243            Level.AmbientLight = 0.2;
244
245            Shelf = PhysicsObject.CreateStaticObject(100, 11);
246            Shelf.X = -100;
247            Shelf.Y = 30;
248            Shelf.Mass = 1.0;
249            Shelf.Image = ShelfImg;
250            Shelf.IgnoresPhysicsLogics = true;
251            Add(Shelf);
252
253            lightbulb = PhysicsObject.CreateStaticObject(15, 25);
254            lightbulb.X = 10;
255            lightbulb.Y = 67;
256            lightbulb.Mass = 1.0;
257            lightbulb.Image = BulbOn;
258            lightbulb.IgnoresCollisionResponse = true;
259            Add(lightbulb);
260
261            LightsOn();
262
263           
264            Flash.Interval = 1;
265            Flash.Timeout += FlashBulb;
266            Flash.Start();
267
268            GameObject tausta = new GameObject(Level.Width, Level.Height);
269            tausta.Image = shopimg;
270            Add(tausta, -3);
271        }
272        else
273        {
274            IsShop = false;
275            ClearLights();
276            Flash.Stop();
277            LuoKentta("kentta1");
278        }
279    }
280
281    void FlashBulb()
282    {
283        int flashnum = RandomGen.NextInt(3);
284
285        if (flashnum == 1)
286        {
287            ClearLights();
288            lightbulb.Image = BulbOff;
289            Timer.SingleShot(0.3, LightsOn);
290            ClearLights();
291            lightbulb.Image = BulbOff;
292            //Timer.SingleShot(0.8, LightsOn);
293            //ClearLights();
294        }
295    }
296
297    void LightsOn()
298    {
299        Light bl = new Light();
300        bl.Intensity = 1.0;
301        bl.Distance = 100;
302        bl.Position = lightbulb.Position;
303        lightbulb.Image = BulbOn;
304        Add(bl);
305    }
306}
Note: See TracBrowser for help on using the repository browser.