source: 2013/27/TeemuM/Game/Game/Game/Game.cs @ 4489

Revision 4489, 11.1 KB checked in by janiemit, 7 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 G : PhysicsGame
10{
11    private AudioPlayer audio;
12    public G()
13    {
14        audio = new AudioPlayer(this, 3);
15
16        audio.RegisterType("Background", 4);
17        audio.RegisterType("Enemyspawn", 0);
18        audio.RegisterType("GameOverSound", 0);
19        audio.RegisterType("MenuMusic", 0);
20        audio.RegisterType("RandomSound", 0);
21        audio.RegisterType("ZombieBite", 0);
22        audio.RegisterType("Zombiesound", 2);
23    }
24
25
26    public static G game;
27    private IntMeter scoreboard;
28    public Player player { get; private set; }
29    private List<Enemy> enemies = new List<Enemy>();
30
31    public override void Begin()
32    {
33        game = this;
34        Mouse.IsCursorVisible = true;
35        MainMenu();
36    }
37
38    public void MainMenu()
39    {
40        MultiSelectWindow menu = new MultiSelectWindow("TESTMODE", "Developer tools", "Start this thing", /*"Perks",*/ "Get me out of here");
41        menu.DefaultCancel = 0;
42        menu.AddItemHandler(0, delegate() { MessageDisplay.Add("Starting game..."); StartGame(); DeveloperCommand(); });
43        menu.AddItemHandler(1, StartGame);
44        //menu.AddItemHandler(2, PerkMenu);
45        menu.AddItemHandler(2, Exit);
46        Add(menu);
47        audio.Play("MenuMusic", true);
48    }
49
50    private void DeveloperCommand()
51    {
52        IsPaused = true;
53        InputWindow prompt = new InputWindow("");
54        prompt.TextEntered += delegate(InputWindow p)
55        {
56            if (p.InputBox.Text.Length == 0) { IsPaused = false; return; }
57            string[] commands = p.InputBox.Text.Split(' ');
58
59            if (commands[0] == "money")
60            {
61                if (commands[1] == "add")
62                {
63                    MessageDisplay.Add("+$" + int.Parse(commands[2]));
64                }
65                else if (commands[1] == "reduce")
66                {
67                    MessageDisplay.Add("-$" + int.Parse(commands[2]));
68                }
69            }
70            else if (commands[0] == "audio")
71            {
72                audio.Console(p.InputBox.Text.Substring(6));
73            }
74            else if (commands[0] == "lol")
75            {
76                audio.PlayOne("EasterEgg", false);
77            }
78            else if (commands[0] == "score")
79            {
80                if (commands[1] == "add")
81                {
82                    MessageDisplay.Add("+" + int.Parse(commands[2]));
83                    Score(int.Parse(commands[2]));
84                }
85                else if (commands[1] == "reduce")
86                {
87                    MessageDisplay.Add("-" + int.Parse(commands[2]));
88                    Score(int.Parse(commands[2]));
89                }
90            }
91            else if (commands[0] == "level")
92            {
93                if (commands[1] == "up")
94                {
95                    MessageDisplay.Add("+" + int.Parse(commands[2]) + " levels");
96                }
97                else if (commands[1] == "down")
98                {
99                    MessageDisplay.Add("-" + int.Parse(commands[2]) + " levels");
100                }
101            }
102            else if (commands[0] == "item")
103            {
104                if (player.GiveWeapon(commands[1]))
105                {
106                    MessageDisplay.Add("You got " + commands[1] + "!");
107                }
108                else
109                {
110                    MessageDisplay.Add("What " + commands[1] + "?");
111                }
112            }
113            else if (commands[0] == "powerup")
114            {
115                if (player.PowerUp(commands[1], double.Parse(commands[2])))
116                    MessageDisplay.Add("Activated " + commands[1] + " powerup");
117                else
118                    MessageDisplay.Add("No such powerup");
119            }
120            else if (commands[0] == "spawn")
121            {
122                if (commands[1] == "zombie")
123                {
124                    if (commands.Length > 2)
125                    {
126                        for (int i = 0; i < int.Parse(commands[2]); i++)
127                            SpawnZombie();
128                    }
129                    else { SpawnZombie(); }
130                }
131            }
132            else if (commands[0] == "kill")
133            {
134                if (commands[1] == "enemies")
135                {
136                    KillAllEnemies();
137                    MessageDisplay.Add("All enemies killed");
138                }
139            }
140            else if (commands[0] == "health")
141            {
142                if (commands[1] == "add")
143                {
144                    player.health.Value += int.Parse(commands[2]);
145                    MessageDisplay.Add("+" + commands[2] + " health");
146                }
147                else if (commands[1] == "reduce")
148                {
149                    player.health.Value -= int.Parse(commands[2]);
150                    MessageDisplay.Add("-" + commands[2] + " health");
151                }
152            }
153            else if (commands[0] == "enemies")
154            {
155                if (commands[1] == "count")
156                {
157                    MessageDisplay.Add("Enemies spawned: " + enemies.Count);
158                }
159            }
160            else if (commands[0] == "die")
161            {
162                player.canMove = false;
163                GameOver();
164            }
165            else if (commands[0] == "exit")
166            {
167                Exit();
168            }
169            else if (commands[0] == "maintenance")
170            {
171                int c = 0;
172                for (int i = 0; i < enemies.Count; i++)
173                {
174                    if (enemies[i].IsDestroyed || enemies[i].IsDestroying)
175                    {
176                        enemies.RemoveAt(i);
177                        i--;
178                    }
179                }
180
181                MessageDisplay.Add(c + " entities removed");
182            }
183            else { MessageDisplay.Add("Unknow command!"); }
184
185            DeveloperCommand();
186        };
187        Add(prompt);
188    }
189
190    private void StartGame()
191    {
192        Keyboard.Listen(Key.Escape, ButtonState.Pressed, delegate() { PauseMenu(); }, null);
193        //Keyboard.Listen(Key.E, ButtonState.Pressed, delegate() { Inventory(); }, null);
194        Keyboard.Listen(Key.Tab, ButtonState.Pressed, DeveloperCommand, null);
195
196        player = new Player(this, 50, 50, 10, true);
197        player.Dying += GameOver;
198        Add(player);
199        Camera.Follow(player);
200
201        AddScoreMeter();
202        CreateLifeMeter();
203
204        audio.Play("Background", true);
205
206        Timer t = new Timer();
207        t.Interval = 0.5;
208        t.Timeout += delegate() { SpawnZombie(); };
209        t.Start();
210    }
211
212    public void Score(int changeValue)
213    {
214        scoreboard.Value += changeValue;
215    }
216
217    private void SpawnZombie()
218    {
219        double i = RandomGen.NextDouble(100, 1000);
220        Double x = 0;
221        Double y = 0;
222
223        if (RandomGen.NextBool())
224        {
225            x = RandomGen.SelectOne(Screen.Left - i, Screen.Right + i);
226            y = RandomGen.NextDouble(Screen.Bottom - i, Screen.Top + i);
227        }
228        else
229        {
230            x = RandomGen.NextDouble(Screen.Left - i, Screen.Right + i);
231            y = RandomGen.SelectOne(Screen.Bottom - i, Screen.Top + i);
232        }
233        Zombie zombie = new Zombie(player, 50, 50, x + player.X, y + player.Y, 100);
234        zombie.Dying += delegate() { scoreboard.Value += 1; };
235        enemies.Add(zombie);
236        Add(zombie);
237    }
238
239    private void KillAllEnemies()
240    {
241        foreach (Zombie enemy in enemies)
242        {
243            enemy.Destroy();
244        }
245    }
246
247    private void AddScoreMeter()
248    {
249        scoreboard = new IntMeter(0);
250        Label ScoreScreen = new Label();
251        ScoreScreen.X = 0;
252        ScoreScreen.Y = Screen.Bottom + 100;
253        ScoreScreen.TextColor = Color.Black;
254        ScoreScreen.Color = Color.White;
255        ScoreScreen.BindTo(scoreboard);
256        Add(ScoreScreen);
257    }
258
259    private void SaveAndBackToMenu() //ToDo: Save
260    {
261        ClearAll();
262        MainMenu();
263    }
264
265    public void PauseMenu()
266    {
267        MultiSelectWindow menu = new MultiSelectWindow("Pause Menu", "Resume Game", "Back to Menu", "Exit Game");
268        menu.DefaultCancel = 0;
269        menu.AddItemHandler(0, delegate { IsPaused = false; });
270        menu.AddItemHandler(1, SaveAndBackToMenu);
271        menu.AddItemHandler(2, Exit);
272        Add(menu);
273        IsPaused = true;
274    }
275
276    public void Inventory() //ToDo Inventory and funktionality
277    {
278        MultiSelectWindow menu = new MultiSelectWindow("Inventory", "Back to Game");
279        menu.DefaultCancel = 0;
280        menu.AddItemHandler(0, delegate { IsPaused = false; });
281        Add(menu);
282        IsPaused = true;
283    }
284
285    public void CharacterMenu() //ToDo Character variations
286    {
287        MultiSelectWindow menu = new MultiSelectWindow("Select Character", "Char NRO1", "Char NRO2", "Char NRO3", "Char NRO4", "Back to Main Menu");
288        menu.DefaultCancel = 0;
289        menu.AddItemHandler(0, StartGame);
290        menu.AddItemHandler(1, StartGame);
291        menu.AddItemHandler(2, StartGame);
292        menu.AddItemHandler(3, StartGame);
293        menu.AddItemHandler(4, MainMenu);
294        Add(menu);
295    }
296
297    public void PerkMenu() //ToDo Perks, Perk selecting system, Save system, and return to main menu button.
298    {
299        MultiSelectWindow menu = new MultiSelectWindow("Select Perks", "Perk NRO1", "Perk NRO2", "Perk NRO3", "Perk NRO4", "Back to Main Menu");
300        menu.DefaultCancel = 0;
301        menu.AddItemHandler(0, MainMenu);
302        menu.AddItemHandler(1, MainMenu);
303        menu.AddItemHandler(2, MainMenu);
304        menu.AddItemHandler(3, MainMenu);
305        menu.AddItemHandler(4, MainMenu);
306        Add(menu);
307    }
308
309    void CreateLifeMeter()
310    {
311        ProgressBar LifeBar = new ProgressBar(150, 20);
312        LifeBar.X = Screen.Right - LifeBar.Width / 2 - 10;
313        LifeBar.Y = Screen.Bottom + LifeBar.Height / 2 + 10;
314        LifeBar.BorderColor = Color.Black;
315        LifeBar.BindTo(player.health);
316        Add(LifeBar);
317    }
318
319
320
321    private void GameOver()
322    {
323        ClearControls();
324        audio.Play("GameOverSound", true);
325        GameObject layer = new GameObject(Game.Screen.Width + 100, Game.Screen.Height + 100);
326        layer.Color = Color.Transparent;
327        layer.Position = player.Position;
328        Add(layer, 1);
329        layer.FadeColorTo(Color.Lerp(Color.Transparent, Color.Black, 0.8), 1.0);
330
331        GameObject txt = new GameObject(987, 248);
332        txt.Position = player.Position;
333        txt.Image = LoadImage("GameOverImage");
334        Add(txt, 1);
335
336        PushButton r = new PushButton("Play again");
337        r.X = player.X;
338        r.Y = player.Y - Screen.Height / 4;
339        r.Clicked += delegate() { ClearAll(); MainMenu(); };
340        Add(r, 1);
341
342        Timer.SingleShot(1, delegate { IsPaused = true; });
343        MessageDisplay.Clear();
344    }
345}
Note: See TracBrowser for help on using the repository browser.