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

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