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

Revision 4468, 10.9 KB checked in by jumakall, 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("Enemyspawn", 0);
18        audio.RegisterType("GameOver", 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, CharacterMenu);
44        menu.AddItemHandler(2, PerkMenu);
45        menu.AddItemHandler(3, 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        MessageDisplay.Add("Saved!");
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        GameObject layer = new GameObject(Game.Screen.Width + 100, Game.Screen.Height + 100);
325        layer.Color = Color.Transparent;
326        layer.Position = player.Position;
327        Add(layer, 1);
328        layer.FadeColorTo(Color.Lerp(Color.Transparent, Color.Black, 0.8), 1.0);
329
330        Label t = new Label("Game over");
331        t.Position = player.Position;
332        t.TextColor = Color.White;
333        Add(t, 1);
334
335        Timer.SingleShot(1, delegate { IsPaused = true; });
336        MessageDisplay.Clear();
337    }
338}
Note: See TracBrowser for help on using the repository browser.