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

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