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

Revision 4448, 10.0 KB checked in by jumakall, 6 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                // UI.GameOver();
159            }
160            else if (commands[0] == "exit")
161            {
162                Exit();
163            }
164            else if (commands[0] == "maintenance")
165            {
166                int c = 0;
167                for (int i = 0; i < enemies.Count; i++)
168                {
169                    if (enemies[i].IsDestroyed)
170                    {
171                        enemies.RemoveAt(i);
172                        i--;
173                    }
174                }
175
176                MessageDisplay.Add(c + " entities removed");
177            }
178            else { MessageDisplay.Add("Unknow command!"); }
179
180            DeveloperCommand();
181        };
182        Add(prompt);
183    }
184
185    private void StartGame()
186    {
187        Keyboard.Listen(Key.Escape, ButtonState.Pressed, delegate() { PauseMenu(); }, null);
188        Keyboard.Listen(Key.E, ButtonState.Pressed, delegate() { Inventory(); }, null);
189        Keyboard.Listen(Key.Tab, ButtonState.Pressed, DeveloperCommand, null);
190
191        player = new Player(50, 50, 10, true);
192        Add(player);
193        Camera.Follow(player);
194
195        AddScoreMeter();
196        CreateLifeMeter();
197
198        Timer t = new Timer();
199        t.Interval = 0.1;
200        t.Timeout += delegate() { SpawnZombie(); };
201        t.Start();
202    }
203
204    public void Score(int changeValue)
205    {
206        scoreboard.Value += changeValue;
207    }
208
209    private void SpawnZombie()
210    {
211        double i = RandomGen.NextDouble(100, 1000);
212        Double x = 0;
213        Double y = 0;
214
215        if (RandomGen.NextBool())
216        {
217            x = RandomGen.SelectOne(Screen.Left - i, Screen.Right + i);
218            y = RandomGen.NextDouble(Screen.Bottom - i, Screen.Top + i);
219        }
220        else
221        {
222            x = RandomGen.NextDouble(Screen.Left - i, Screen.Right + i);
223            y = RandomGen.SelectOne(Screen.Bottom - i, Screen.Top + i);
224        }
225        Zombie zombie = new Zombie(50, 50, x + player.X, y + player.Y, 100);
226        enemies.Add(zombie);
227        Add(zombie);
228    }
229
230    private void KillAllEnemies()
231    {
232        foreach (Zombie enemy in enemies)
233        {
234            enemy.Destroy();
235        }
236    }
237
238    private void AddScoreMeter()
239    {
240        scoreboard = new IntMeter(0);
241        Label ScoreScreen = new Label();
242        ScoreScreen.X = 0;
243        ScoreScreen.Y = Screen.Bottom + 100;
244        ScoreScreen.TextColor = Color.Black;
245        ScoreScreen.Color = Color.White;
246        ScoreScreen.BindTo(scoreboard);
247        Add(ScoreScreen);
248    }
249
250    private void SaveAndBackToMenu() //ToDo: Save
251    {
252        ClearAll();
253        MessageDisplay.Add("Saved!");
254        MainMenu();
255    }
256
257    public void PauseMenu()
258    {
259        MultiSelectWindow menu = new MultiSelectWindow("Pause Menu", "Resume Game", "Back to Menu", "Exit Game");
260        menu.DefaultCancel = 0;
261        menu.AddItemHandler(0, delegate { IsPaused = false; });
262        menu.AddItemHandler(1, SaveAndBackToMenu);
263        menu.AddItemHandler(2, Exit);
264        Add(menu);
265        IsPaused = true;
266    }
267
268    public void Inventory() //ToDo Inventory and funktionality
269    {
270        MultiSelectWindow menu = new MultiSelectWindow("Inventory", "Back to Game");
271        menu.DefaultCancel = 0;
272        menu.AddItemHandler(0, delegate { IsPaused = false; });
273        Add(menu);
274        IsPaused = true;
275    }
276
277    public void CharacterMenu() //ToDo Character variations
278    {
279        MultiSelectWindow menu = new MultiSelectWindow("Select Character", "Char NRO1", "Char NRO2", "Char NRO3", "Char NRO4", "Back to Main Menu");
280        menu.DefaultCancel = 0;
281        menu.AddItemHandler(0, StartGame);
282        menu.AddItemHandler(1, StartGame);
283        menu.AddItemHandler(2, StartGame);
284        menu.AddItemHandler(3, StartGame);
285        menu.AddItemHandler(4, MainMenu);
286        Add(menu);
287    }
288
289    public void PerkMenu() //ToDo Perks, Perk selecting system, Save system, and return to main menu button.
290    {
291        MultiSelectWindow menu = new MultiSelectWindow("Select Perks", "Perk NRO1", "Perk NRO2", "Perk NRO3", "Perk NRO4", "Back to Main Menu");
292        menu.DefaultCancel = 0;
293        menu.AddItemHandler(0, MainMenu);
294        menu.AddItemHandler(1, MainMenu);
295        menu.AddItemHandler(2, MainMenu);
296        menu.AddItemHandler(3, MainMenu);
297        menu.AddItemHandler(4, MainMenu);
298        Add(menu);
299    }
300
301    void CreateLifeMeter()
302    {
303        ProgressBar LifeBar = new ProgressBar(150, 20);
304        LifeBar.X = Screen.Right - LifeBar.Width / 2 - 10;
305        LifeBar.Y = Screen.Bottom + LifeBar.Height / 2 + 10;
306        LifeBar.BorderColor = Color.Black;
307        LifeBar.BindTo(player.health);
308        Add(LifeBar);
309    }
310}
Note: See TracBrowser for help on using the repository browser.