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

Revision 4752, 5.7 KB checked in by dezhidki, 6 years ago (diff)
  • Muokattu AStarin debuggausta
  • Väritetty pelaajien pelinappuloita
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 HELP3 = "<X> Main menu";
20        private const string AUTHOR = "Game by Denis Zhidkikh";
21
22        private Game game;
23        private string[] optionsStart = { "Start", "How to play", "Exit" };
24        private string[] optionsInGame = { "Continue", "Main menu", "Exit" };
25        private Action[] actionsStart, actionsInGame;
26        private int currentOption = 0;
27        private Rectangle backgroundRect;
28        private Vector2 logoPos, infoPos, helpPos, optionPos, optionOffset, arrowOffset;
29        private StringBuilder infoText, helpText;
30        private bool showInstructions = false;
31
32        public GuiMainScreen(GuiManager manager, Game game)
33            : base(manager)
34        {
35            this.game = game;
36            actionsStart = new Action[] { game.StartGame, ShowInstructions, game.Exit };
37            actionsInGame = new Action[] { Remove, ReturnToMain, game.Exit };
38            backgroundRect = new Rectangle(0, 0, Game.WIDTH, Game.HEIGHT);
39            logoPos = new Vector2(Game.WIDTH / 2 - 225, 10);
40
41            infoText = new StringBuilder(Game.VERSION).Append(DEMO_TEXT);
42            infoText.Append("\n").Append(AUTHOR);
43            infoPos = new Vector2(Game.WIDTH - 320, Game.HEIGHT - 50);
44
45            helpText = new StringBuilder(HELP1).Append("\n").Append(HELP2);
46            helpPos = new Vector2(10, Game.HEIGHT - 50);
47
48            optionPos = new Vector2(40, Game.HEIGHT / 2 - 40);
49            optionOffset = new Vector2(0, 25);
50            arrowOffset = new Vector2(-35, 0);
51        }
52
53        public override int Importance
54        {
55            get
56            {
57                return IMPORTANCE_HIGH;
58            }
59        }
60
61        public void ShowInstructions()
62        {
63            showInstructions = true;
64        }
65
66        public void ReturnToMain()
67        {
68            game.ResetGame();
69            manager.AddGui(this, true, true);
70        }
71
72        public override void Update()
73        {
74            if (!showInstructions)
75            {
76                if (InputHandler.HasKeyBeenPressed(Keys.Up))
77                {
78                    currentOption--;
79                    if (currentOption < 0) currentOption = 2;
80                }
81                else if (InputHandler.HasKeyBeenPressed(Keys.Down))
82                {
83                    currentOption++;
84                    if (currentOption > 2) currentOption = 0;
85                }
86                else if (InputHandler.HasKeyBeenPressed(Keys.Enter))
87                {
88                    if (game.IsGameRunning)
89                        actionsInGame[currentOption].Invoke();
90                    else
91                        actionsStart[currentOption].Invoke();
92                }
93            }
94            else
95            {
96                if (InputHandler.HasKeyBeenPressed(Keys.X))
97                    showInstructions = false;
98            }
99        }
100
101        public override void Render(RenderHelper renderer)
102        {
103            if (!game.IsGameRunning)
104            {
105                if (!showInstructions)
106                {
107                    renderer.SpriteBatch.Draw(Resources.SPRITE_GUI_BACKGROUND, backgroundRect, Color.White);
108                    renderer.SpriteBatch.Draw(Resources.SPRITE_GUI_LOGO, logoPos, Color.White);
109                    renderer.SpriteBatch.DrawString(Resources.FONT, infoText, infoPos, Color.White);
110                    renderer.SpriteBatch.DrawString(Resources.FONT, helpText, helpPos, Color.White);
111
112                    for (int i = 0; i < optionsStart.Length; i++)
113                    {
114                        if (i == currentOption)
115                            renderer.SpriteBatch.DrawString(Resources.FONT, ARROW, optionPos + optionOffset * i + arrowOffset, Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F);
116                        renderer.SpriteBatch.DrawString(Resources.FONT, optionsStart[i], optionPos + optionOffset * i, Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F);
117                    }
118                }
119                else
120                {
121                    renderer.SpriteBatch.Draw(Resources.SPRITE_GUI_INSCTRUCTIONS, backgroundRect, Color.White);
122                    renderer.SpriteBatch.DrawString(Resources.FONT, HELP3, helpPos, Color.White);
123                }
124            }
125            else
126            {
127                    renderer.SpriteBatch.Draw(Resources.SPRITE_GUI_BACKGROUND_INGAME, backgroundRect, Color.White);
128                    renderer.SpriteBatch.DrawString(Resources.FONT, helpText, helpPos, Color.White);
129                    for (int i = 0; i < optionsInGame.Length; i++)
130                    {
131                        if (i == currentOption)
132                            renderer.SpriteBatch.DrawString(Resources.FONT, ARROW, optionPos + optionOffset * i + arrowOffset, Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F);
133                        renderer.SpriteBatch.DrawString(Resources.FONT, optionsInGame[i], optionPos + optionOffset * i, Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0.0F);
134                    }
135               
136            }
137
138           
139        }
140    }
141
142}
Note: See TracBrowser for help on using the repository browser.