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

Revision 4589, 11.6 KB checked in by janiemit, 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
17
18    public static G game;
19    Image Background = LoadImage("Ground0");
20    private IntMeter scoreboard;
21    public Player player { get; private set; }
22    private List<Enemy> enemies = new List<Enemy>();
23
24    public override void Begin()
25    {
26        game = this;
27        Mouse.IsCursorVisible = true;
28        MainMenu();
29    }
30
31    public void MainMenu()
32    {
33        ClearAll();
34        MultiSelectWindow menu = new MultiSelectWindow("TESTMODE", "Developer tools", "Start this thing", /*"Perks",*/ "Get me out of here");
35        menu.DefaultCancel = 0;
36        menu.AddItemHandler(0, delegate() { MessageDisplay.Add("Starting game..."); StartGame(); DeveloperCommand(); });
37        menu.AddItemHandler(1, StartGame);
38        //menu.AddItemHandler(2, PerkMenu);
39        menu.AddItemHandler(2, Exit);
40        Add(menu);
41    }
42
43    private void DeveloperCommand()
44    {
45        IsPaused = true;
46        InputWindow prompt = new InputWindow("");
47        prompt.TextEntered += delegate(InputWindow p)
48        {
49            if (p.InputBox.Text.Length == 0) { IsPaused = false; return; }
50            string[] commands = p.InputBox.Text.Split(' ');
51
52            if (commands[0] == "money")
53            {
54                if (commands[1] == "add")
55                {
56                    MessageDisplay.Add("+$" + int.Parse(commands[2]));
57                }
58                else if (commands[1] == "reduce")
59                {
60                    MessageDisplay.Add("-$" + int.Parse(commands[2]));
61                }
62            }
63            else if (commands[0] == "audio")
64            {
65                audio.Console(p.InputBox.Text.Substring(6));
66            }
67            else if (commands[0] == "lol")
68            {
69
70            }
71            else if (commands[0] == "score")
72            {
73                if (commands[1] == "add")
74                {
75                    MessageDisplay.Add("+" + int.Parse(commands[2]));
76                    Score(int.Parse(commands[2]));
77                }
78                else if (commands[1] == "reduce")
79                {
80                    MessageDisplay.Add("-" + int.Parse(commands[2]));
81                    Score(int.Parse(commands[2]));
82                }
83            }
84            else if (commands[0] == "level")
85            {
86                if (commands[1] == "up")
87                {
88                    MessageDisplay.Add("+" + int.Parse(commands[2]) + " levels");
89                }
90                else if (commands[1] == "down")
91                {
92                    MessageDisplay.Add("-" + int.Parse(commands[2]) + " levels");
93                }
94            }
95            else if (commands[0] == "item")
96            {
97                if (player.GiveWeapon(commands[1]))
98                {
99                    MessageDisplay.Add("You got " + commands[1] + "!");
100                }
101                else
102                {
103                    MessageDisplay.Add("What " + commands[1] + "?");
104                }
105            }
106            else if (commands[0] == "powerup")
107            {
108                if (player.PowerUp(commands[1], double.Parse(commands[2])))
109                    MessageDisplay.Add("Activated " + commands[1] + " powerup");
110                else
111                    MessageDisplay.Add("No such powerup");
112            }
113            else if (commands[0] == "spawn")
114            {
115                if (commands[1] == "zombie")
116                {
117                    if (commands.Length > 2)
118                    {
119                        for (int i = 0; i < int.Parse(commands[2]); i++)
120                            SpawnZombie();
121                    }
122                    else { SpawnZombie(); }
123                }
124            }
125            else if (commands[0] == "kill")
126            {
127                if (commands[1] == "enemies")
128                {
129                    KillAllEnemies();
130                    MessageDisplay.Add("All enemies killed");
131                }
132            }
133            else if (commands[0] == "health")
134            {
135                if (commands[1] == "add")
136                {
137                    player.health.Value += int.Parse(commands[2]);
138                    MessageDisplay.Add("+" + commands[2] + " health");
139                }
140                else if (commands[1] == "reduce")
141                {
142                    player.health.Value -= int.Parse(commands[2]);
143                    MessageDisplay.Add("-" + commands[2] + " health");
144                }
145            }
146            else if (commands[0] == "enemies")
147            {
148                if (commands[1] == "count")
149                {
150                    MessageDisplay.Add("Enemies spawned: " + enemies.Count);
151                }
152            }
153            else if (commands[0] == "die")
154            {
155                player.canMove = false;
156                GameOver();
157            }
158            else if (commands[0] == "exit")
159            {
160                Exit();
161            }
162            else if (commands[0] == "maintenance")
163            {
164                int c = 0;
165                for (int i = 0; i < enemies.Count; i++)
166                {
167                    if (enemies[i].IsDestroyed || enemies[i].IsDestroying)
168                    {
169                        enemies.RemoveAt(i);
170                        i--;
171                    }
172                }
173
174                MessageDisplay.Add(c + " entities removed");
175            }
176            else { MessageDisplay.Add("Unknow command!"); }
177
178            DeveloperCommand();
179        };
180        Add(prompt);
181    }
182
183    private void StartGame()
184    {
185        Keyboard.Listen(Key.Escape, ButtonState.Pressed, delegate() { PauseMenu(); }, null);
186        //Keyboard.Listen(Key.E, ButtonState.Pressed, delegate() { Inventory(); }, null);
187        Keyboard.Listen(Key.Tab, ButtonState.Pressed, DeveloperCommand, null);
188
189        Map();
190        player = new Player(this, 50, 50, 10, true);
191        player.Dying += GameOver;
192        Add(player);
193        //Camera.Follow(player);
194
195        AddScoreMeter();
196        CreateLifeMeter();
197
198        Timer t = new Timer();
199        t.Interval = 0.5;
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(player, 50, 50, x + player.X, y + player.Y, 100);
226        zombie.Dying += delegate() { scoreboard.Value += 1; };
227        enemies.Add(zombie);
228        Add(zombie);
229    }
230
231    private void KillAllEnemies()
232    {
233        foreach (Zombie enemy in enemies)
234        {
235            enemy.Destroy();
236        }
237    }
238
239    private void AddScoreMeter()
240    {
241        scoreboard = new IntMeter(0);
242        Label ScoreScreen = new Label();
243        ScoreScreen.X = 0;
244        ScoreScreen.Y = Screen.Bottom + 100;
245        ScoreScreen.TextColor = Color.Black;
246        ScoreScreen.Color = Color.White;
247        ScoreScreen.BindTo(scoreboard);
248        Add(ScoreScreen);
249    }
250
251    private void SaveAndBackToMenu() //ToDo: Save
252    {
253        ClearAll();
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    public void Map()
302    {   
303        Level.Width = Screen.Width;
304        Level.Height = Screen.Height;
305
306        Surfaces levelBorders = Level.CreateBorders(10, 10, 10);
307        levelBorders.Bottom.Color = Color.Aqua;
308        levelBorders.Bottom.IgnoresCollisionResponse = true;
309        levelBorders.Top.Color = Color.Aqua;
310        levelBorders.Top.IgnoresCollisionResponse = true;
311        levelBorders.Left.Color = Color.Aqua;
312        levelBorders.Left.IgnoresCollisionResponse = true;
313        levelBorders.Right.Color = Color.Aqua;
314        levelBorders.Right.IgnoresCollisionResponse = true;
315       
316
317        Level.Background.Image = Background;
318        Level.Background.TileToLevel();
319        Camera.ZoomToLevel();
320    }
321
322    void CreateLifeMeter()
323    {
324        ProgressBar LifeBar = new ProgressBar(150, 20);
325        LifeBar.X = Screen.Right - LifeBar.Width / 2 - 10;
326        LifeBar.Y = Screen.Bottom + LifeBar.Height / 2 + 10;
327        LifeBar.BorderColor = Color.Black;
328        LifeBar.BindTo(player.health);
329        Add(LifeBar);
330    }
331
332
333
334    private void GameOver()
335    {
336        ClearControls();
337        Keyboard.Listen(Key.Enter, ButtonState.Pressed, delegate() { MainMenu(); }, null);
338        GameObject layer = new GameObject(Game.Screen.Width + 100, Game.Screen.Height + 100);
339        layer.Color = Color.Transparent;
340        layer.Position = Screen.Center;
341        Add(layer, 1);
342        layer.FadeColorTo(Color.Lerp(Color.Transparent, Color.Black, 0.8), 1.0);
343
344        GameObject txt = new GameObject(987, 248);
345        txt.Position = Level.Center;
346        txt.Image = LoadImage("GameOverImage");
347        Add(txt, 1);
348
349        PushButton r = new PushButton("Return to menu");
350        r.X = Level.Center.X;
351        r.Y = Level.Center.Y - Screen.Height / 4;
352        r.Clicked += delegate() {  MainMenu(); };
353        Add(r, 1);
354
355        Timer.SingleShot(1, delegate { IsPaused = true; });
356        MessageDisplay.Clear();
357    }
358}
Note: See TracBrowser for help on using the repository browser.