source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Guis/GuiMainScreen.cs @ 4753

Revision 4753, 5.3 KB checked in by dezhidki, 6 years ago (diff)
  • Lisätty kunnon ohjeet.
  • Ctrl + RMouse toimii nyt kunnolla (voi valita monta kerrallaan).
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using CastleMaster.Graphics;
6using Microsoft.Xna.Framework;
7using Microsoft.Xna.Framework.Graphics;
8using CastleMaster.Input;
9using System.Windows.Forms;
10
11namespace CastleMaster.Guis
12{
13    public class GuiMainScreen : Gui
14    {
15        private const string ARROW = "@";
16        private const string DEMO_TEXT = " Demo";
17        private const string HELP1 = "<UP,DOWN> SCROLL";
18        private const string HELP2 = "<ENTER> SELECT";
19        private const string AUTHOR = "Game by Denis Zhidkikh";
20
21        private Game game;
22        private string[] optionsStart = { "Start", "How to play", "Exit" };
23        private string[] optionsInGame = { "Continue", "Main menu", "Exit" };
24        private Action[] actionsStart, actionsInGame;
25        private int currentOption = 0;
26        private Rectangle backgroundRect;
27        private Vector2 logoPos, infoPos, helpPos, optionPos, optionOffset, arrowOffset;
28        private StringBuilder infoText, helpText;
29        private GuiInstructions guiInstructions;
30
31        public GuiMainScreen(GuiManager manager, Game game)
32            : base(manager)
33        {
34            this.game = game;
35
36            guiInstructions = new GuiInstructions(this, manager);
37
38            actionsStart = new Action[] { game.StartGame, ShowInstructions, game.Exit };
39            actionsInGame = new Action[] { ReturnToGame, ReturnToMain, game.Exit };
40            backgroundRect = new Rectangle(0, 0, Game.WIDTH, Game.HEIGHT);
41            logoPos = new Vector2(Game.WIDTH / 2 - 225, 10);
42
43            infoText = new StringBuilder(Game.VERSION).Append(DEMO_TEXT);
44            infoText.Append("\n").Append(AUTHOR);
45            infoPos = new Vector2(Game.WIDTH - 320, Game.HEIGHT - 50);
46
47            helpText = new StringBuilder(HELP1).Append("\n").Append(HELP2);
48            helpPos = new Vector2(10, Game.HEIGHT - 50);
49
50            optionPos = new Vector2(40, Game.HEIGHT / 2 - 40);
51            optionOffset = new Vector2(0, 25);
52            arrowOffset = new Vector2(-35, 0);
53        }
54
55        public override int Importance
56        {
57            get
58            {
59                return IMPORTANCE_HIGH;
60            }
61        }
62
63        public void ShowInstructions()
64        {
65            Remove();
66            manager.AddGui(guiInstructions, true, true);
67        }
68
69        public void ReturnToMain()
70        {
71            game.ResetGame();
72            manager.AddGui(this, true, true);
73        }
74
75        public void ReturnToGame()
76        {
77            Remove();
78            game.IsGamePaused = false;
79        }
80
81        public override void Update()
82        {
83                if (InputHandler.HasKeyBeenPressed(Keys.Up))
84                {
85                    currentOption--;
86                    if (currentOption < 0) currentOption = 2;
87                }
88                else if (InputHandler.HasKeyBeenPressed(Keys.Down))
89                {
90                    currentOption++;
91                    if (currentOption > 2) currentOption = 0;
92                }
93                else if (InputHandler.HasKeyBeenPressed(Keys.Enter))
94                {
95                    if (game.IsGameRunning)
96                        actionsInGame[currentOption].Invoke();
97                    else
98                        actionsStart[currentOption].Invoke();
99                }
100        }
101
102        public override void Render(RenderHelper renderer)
103        {
104            if (!game.IsGameRunning)
105            {
106                    renderer.SpriteBatch.Draw(Resources.SPRITE_GUI_BACKGROUND, backgroundRect, Color.White);
107                    renderer.SpriteBatch.Draw(Resources.SPRITE_GUI_LOGO, logoPos, Color.White);
108                    renderer.SpriteBatch.DrawString(Resources.FONT, infoText, infoPos, Color.White);
109                    renderer.SpriteBatch.DrawString(Resources.FONT, helpText, helpPos, Color.White);
110
111                    for (int i = 0; i < optionsStart.Length; i++)
112                    {
113                        if (i == currentOption)
114                            renderer.SpriteBatch.DrawString(Resources.FONT, ARROW, optionPos + optionOffset * i + arrowOffset, Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F);
115                        renderer.SpriteBatch.DrawString(Resources.FONT, optionsStart[i], optionPos + optionOffset * i, Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F);
116                    }
117            }
118            else
119            {
120                    renderer.SpriteBatch.Draw(Resources.SPRITE_GUI_BACKGROUND_INGAME, backgroundRect, Color.White);
121                    renderer.SpriteBatch.DrawString(Resources.FONT, helpText, helpPos, Color.White);
122                    for (int i = 0; i < optionsInGame.Length; i++)
123                    {
124                        if (i == currentOption)
125                            renderer.SpriteBatch.DrawString(Resources.FONT, ARROW, optionPos + optionOffset * i + arrowOffset, Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F);
126                        renderer.SpriteBatch.DrawString(Resources.FONT, optionsInGame[i], optionPos + optionOffset * i, Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F);
127                    }
128               
129            }
130
131           
132        }
133    }
134
135}
Note: See TracBrowser for help on using the repository browser.