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

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