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

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