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

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