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

Revision 9755, 12.4 KB checked in by paharvol, 20 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    IntMeter Shells = new IntMeter(0);
16    IntMeter OxygenMeter;
17    IntMeter OxygenMeter2;
18    bool OxygenMeter2On = true;
19
20
21    PlatformCharacter playerbody;
22    PhysicsObject playerhead;
23    DoubleMeter healthmeter;
24    PhysicsObject fish;
25    PhysicsObject lightbulb;
26    PhysicsObject Shelf;
27    GameObject Sell;
28    GameObject sellshell;
29
30    Image pelaajanKuva = LoadImage("norsu");
31    Image tahtiKuva = LoadImage("tahti");
32    Image sandimg = LoadImage("Sand");
33    Image shellimg = LoadImage("Shell");
34    Image shopimg = LoadImage("BackWall");
35    Image BulbOn = LoadImage("LightBulbOn");
36    Image BulbOff = LoadImage("LightBulbOff");
37    Image ShelfImg = LoadImage("Shelf");
38    Image fishimg1 = LoadImage("fish1");
39    Image fishimg2 = LoadImage("fish2");
40    Image fishimg3 = LoadImage("fish3");
41
42    SoundEffect maaliAani = LoadSoundEffect("maali");
43
44    public override void Begin()
45    {
46        LuoKentta("pool");
47    }
48    void SetAll()
49    {
50        SmoothTextures = false;
51        Gravity = new Vector(0, -1000);
52
53        LisaaNappaimet();
54        AddHealthMeter();
55        AddOxygenMeter();
56        AddOxygenMeter2();
57
58        Camera.Follow(playerbody);
59        Camera.ZoomFactor = 1.2;
60        Camera.StayInLevel = true;
61        //IsFullScreen = true;
62        //SetWindowSize(1600, 900, false);
63    }
64
65    void LuoKentta(string level)
66    {
67        ClearAll();
68        TileMap kentta = TileMap.FromLevelAsset(level); //pool //Shop //kentta1
69        kentta.SetTileMethod('#', AddSand);
70        kentta.SetTileMethod('*', AddShell);
71        kentta.SetTileMethod('w', AddWater);
72        kentta.SetTileMethod('%', AddCoral);
73        kentta.SetTileMethod('o', AddPlayer);
74        kentta.SetTileMethod('8', AddShopPortal);
75        kentta.Execute(RUUDUN_KOKO, RUUDUN_KOKO);
76        Level.CreateBorders();
77        Level.Background.Color = Color.SkyBlue;
78        //Level.AmbientLight = 0.1;
79        //IsShop = false;
80        SetAll();
81    }
82
83    void AddSand(Vector paikka, double leveys, double korkeus)
84    {
85        PhysicsObject sand = PhysicsObject.CreateStaticObject(leveys, korkeus);
86        sand.Position = paikka;
87        sand.Image = sandimg;
88        Add(sand);
89    }
90
91    void AddShopWood(Vector paikka, double leveys, double korkeus)
92    {
93        PhysicsObject wood = PhysicsObject.CreateStaticObject(leveys, korkeus);
94        wood.Position = paikka;
95        wood.Image = sandimg;
96        Add(wood);
97    }
98
99    void AddShell(Vector paikka, double leveys, double korkeus)
100    {
101        PhysicsObject shell = PhysicsObject.CreateStaticObject(leveys, korkeus);
102        shell.IgnoresCollisionResponse = true;
103        shell.Position = paikka;
104        shell.Image = shellimg;
105        shell.Tag = "shell";
106        Add(shell);
107    }
108
109    void AddCoral(Vector paikka, double leveys, double korkeus)
110    {
111        PhysicsObject coral = PhysicsObject.CreateStaticObject(leveys, korkeus);
112        coral.IgnoresCollisionResponse = true;
113        coral.Position = paikka;
114        coral.Image = tahtiKuva;
115        coral.Tag = "coral";
116        Add(coral);
117    }
118
119    void AddShopPortal(Vector paikka, double leveys, double korkeus)
120    {
121        PhysicsObject shopportal = PhysicsObject.CreateStaticObject(leveys, korkeus);
122        shopportal.IgnoresCollisionResponse = true;
123        shopportal.Position = paikka;
124        shopportal.Image = shellimg;
125        shopportal.Tag = "sp";
126        Add(shopportal);
127    }
128
129    void AddWater(Vector paikka, double leveys, double korkeus)
130    {
131        //AddFish(paikka, leveys, korkeus);
132        PhysicsObject water = PhysicsObject.CreateStaticObject(leveys, korkeus);
133        water.IgnoresCollisionResponse = true;
134        water.Position = paikka;
135        water.Tag = "Water";
136        water.Color = new Color(150, 150, 255, 80);
137        Add(water);
138    }
139
140    void AddPlayer(Vector paikka, double leveys, double korkeus)
141    {
142
143        playerbody = new PlatformCharacter(leveys * 0.6, korkeus);
144        playerbody.Position = paikka;
145        playerbody.Mass = 4.0;
146        playerbody.Image = pelaajanKuva;
147        AddCollisionHandler(playerbody, "shell", HitShell);
148        AddCollisionHandler(playerbody, "coral", HitCoral);
149        AddCollisionHandler(playerbody, "sp", GoShop);
150        //Add(playerbody, -1);
151
152        Vector NeckPos = new Vector(playerbody.X, playerbody.Y + korkeus);
153
154        playerhead = new PhysicsObject(leveys * 0.7, korkeus * 0.5);
155        playerhead.Position = NeckPos;
156        playerhead.Mass = 2.0;
157        playerhead.Image = pelaajanKuva;
158        playerhead.CanRotate = false;
159        //Add(playerhead, -1);
160
161        PhysicsStructure part = new PhysicsStructure(playerhead, playerbody);
162        Add(part);
163    }
164
165    void AddFish(Vector paikka, double leveys, double korkeus)
166    {
167        fish = new PhysicsObject(leveys * 0.5, korkeus * 0.3);
168        fish.Position = paikka;
169        fish.Mass = 4.0;
170        fish.Image = RandomGen.SelectOne(fishimg1, fishimg2, fishimg3);
171        fish.IgnoresCollisionResponse = false;
172        Add(fish);
173    }
174
175    void LisaaNappaimet()
176    {
177        //Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "");
178        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "");
179
180        Keyboard.Listen(Key.A, ButtonState.Down, Move, "", playerbody, -nopeus);
181        Keyboard.Listen(Key.D, ButtonState.Down, Move, "", playerbody, nopeus);
182        Keyboard.Listen(Key.W, ButtonState.Pressed, Hyppaa, "", playerbody, hyppyNopeus);
183        Keyboard.Listen(Key.W, ButtonState.Down, Swim, "", playerbody);
184
185        ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
186
187        ControllerOne.Listen(Button.DPadLeft, ButtonState.Down, Move, "Pelaaja liikkuu vasemmalle", playerbody, -nopeus);
188        ControllerOne.Listen(Button.DPadRight, ButtonState.Down, Move, "Pelaaja liikkuu oikealle", playerbody, nopeus);
189        ControllerOne.Listen(Button.A, ButtonState.Pressed, Hyppaa, "Pelaaja hyppää", playerbody, hyppyNopeus);
190
191        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
192    }
193
194    void Move(PlatformCharacter hahmo, double nopeus)
195    {
196        hahmo.Walk(nopeus);
197    }
198
199    void Hyppaa(PlatformCharacter hahmo, double nopeus)
200    {
201        GameObject Water = GetObjectAt(playerbody.Position, "Water", 1);
202        if (Water == null)
203        {
204            hahmo.Jump(nopeus);
205        }
206    }
207
208    void Swim(PlatformCharacter hahmo)
209    {
210        GameObject Water = GetObjectAt(playerbody.Position, "Water", 1);
211        if (Water != null)
212        {
213            //playerbody.Y = playerbody.Y + 20;
214            hahmo.Hit(new Vector(0, 100));
215            Gravity = new Vector(0, -500);
216        }
217        else
218        {
219            Gravity = new Vector(0, -1000);
220            //OxygenMeter.Value--;
221        }
222    }
223
224    void HitShell(PhysicsObject hahmo, PhysicsObject shell)
225    {
226        shell.Destroy();
227        Shells.Value += 1;
228        MessageDisplay.Add("" + Shells);
229    }
230
231    void HitCoral(PhysicsObject hahmo, PhysicsObject coral)
232    {
233        MessageDisplay.Add("osuit koralliin");
234        coral.Destroy();
235        healthmeter.Value -= 1;
236        OxygenMeter2On = true;
237    }
238
239    void AddHealthMeter()
240    {
241        healthmeter = new DoubleMeter(10);
242        healthmeter.MaxValue = 10;
243        healthmeter.LowerLimit += LifeOut;
244
245        ProgressBar healthbar = new ProgressBar(300, 20);
246        healthbar.X = Screen.Left + 500;
247        healthbar.Y = Screen.Top - 20;
248        healthbar.BorderColor = Color.Black;
249        healthbar.BindTo(healthmeter);
250        Add(healthbar);
251    }
252
253    void AddOxygenMeter()
254    {
255        OxygenMeter = new IntMeter(100, 0, 100);
256
257        ProgressBar OxygenBar = new ProgressBar(500, 20);
258        OxygenBar.X = 0;
259        OxygenBar.Y = Screen.Top - 20;
260        OxygenBar.BindTo(OxygenMeter);
261        OxygenBar.Color = Color.MidnightBlue;
262        OxygenBar.BarColor = Color.LightBlue;
263        OxygenBar.BorderColor = Color.Black;
264        Add(OxygenBar);
265    }
266
267    void AddOxygenMeter2()
268    {
269     OxygenMeter2 = new IntMeter(100, 0, 100);
270
271     ProgressBar OxygenBar2 = new ProgressBar(500, 20);
272     OxygenBar2.X = 0;
273     OxygenBar2.Y = Screen.Top - 50;
274     OxygenBar2.BindTo(OxygenMeter2);
275     OxygenBar2.Color = Color.MidnightBlue;
276     OxygenBar2.BarColor = Color.LightBlue;
277     OxygenBar2.BorderColor = Color.Black;
278     Add(OxygenBar2);
279
280     Timer DrowningTimer = new Timer();
281     DrowningTimer.Interval = 0.05;
282     DrowningTimer.Timeout += CheckDrowning2;
283     DrowningTimer.Start();
284     //return;
285     //CheckDrowning2();
286       
287    }
288
289    void CheckDrowning2()
290    {
291    GameObject Water = GetObjectAt(playerhead.Position, "Water", 1);
292        if (Water == null)
293        {
294            OxygenMeter.Value++;
295            return;
296        }
297        if (OxygenMeter2.Value == 0 || OxygenMeter2On == false)
298        {
299            Timer.SingleShot(0.05, CheckDrowning);
300            return;
301        }
302        OxygenMeter2.Value--;
303    }
304
305    void CheckDrowning()
306    {
307        if (OxygenMeter.Value == 0)
308        {
309            healthmeter.Value = 0;
310        }
311        else
312        {
313            OxygenMeter.Value--;
314        }
315    }
316
317    void LifeOut()
318    {
319        //MessageDisplay.Add("U DIE N00B");
320        playerbody.Destroy();
321        //playerhead.Destroy();
322        playerhead.CanRotate = true;
323    }
324
325    void GoShop(PhysicsObject hahmo, PhysicsObject sp)
326    {
327        Timer Flash = new Timer();
328
329        if (IsShop == false)
330        {
331            IsShop = true;
332            LuoKentta("Shop");
333            Level.AmbientLight = 0.2;
334
335            Shelf = PhysicsObject.CreateStaticObject(100, 11);
336            Shelf.X = -100;
337            Shelf.Y = -40;
338            Shelf.Mass = 1.0;
339            Shelf.Image = ShelfImg;
340            Shelf.IgnoresPhysicsLogics = true;
341            Add(Shelf);
342
343            AxleJoint paste = new AxleJoint(Shelf);
344            Add(paste);
345
346            lightbulb = PhysicsObject.CreateStaticObject(15, 25);
347            lightbulb.X = 10;
348            lightbulb.Y = 67;
349            lightbulb.Mass = 1.0;
350            lightbulb.Image = BulbOn;
351            lightbulb.IgnoresCollisionResponse = true;
352            Add(lightbulb);
353
354            LightsOn();
355
356
357            Flash.Interval = 1;
358            Flash.Timeout += FlashBulb;
359            Flash.Start();
360
361            GameObject tausta = new GameObject(Level.Width, Level.Height);
362            tausta.Image = shopimg;
363            Add(tausta, -3);
364
365            GameObject Sell = new GameObject(30, 30);
366            Sell.X = -100;
367            Sell.Y = 0;
368            //Sell.Image = ShelfImg;
369            Add(Sell);
370
371            Mouse.ListenOn(Sell, MouseButton.Left, ButtonState.Down, SellItems, null);
372
373        }
374        else
375        {
376            IsShop = false;
377            ClearLights();
378            Flash.Stop();
379            LuoKentta("kentta1");
380        }
381    }
382
383    void FlashBulb()
384    {
385        int flashnum = RandomGen.NextInt(3);
386
387        if (flashnum == 1)
388        {
389            ClearLights();
390            lightbulb.Image = BulbOff;
391            Timer.SingleShot(0.3, LightsOn);
392            ClearLights();
393            lightbulb.Image = BulbOff;
394            //Timer.SingleShot(0.8, LightsOn);
395            //ClearLights();
396        }
397    }
398
399    void LightsOn()
400    {
401        Light bl = new Light();
402        bl.Intensity = 1.0;
403        bl.Distance = 100;
404        bl.Position = lightbulb.Position;
405        lightbulb.Image = BulbOn;
406        Add(bl);
407    }
408
409    void SellItems()
410    {
411        //MessageDisplay.Add("viesti");
412        GameObject sellshell = new GameObject(30, 30);
413        sellshell.X = -100;
414        sellshell.Y = 0;
415        sellshell.Image = shellimg;
416        Add(sellshell);
417        Sell.Destroy();
418
419        Mouse.ListenOn(sellshell, MouseButton.Left, ButtonState.Down, SellShells, null);
420    }
421
422    void SellShells()
423    {
424        MessageDisplay.Add("viesti2");
425        //sellshell.Destroy();
426    }
427}
Note: See TracBrowser for help on using the repository browser.