source: 2011/23/sijoseha/Fera Proelia/Fera Proelia/Fera Proelia/MenuScreen.cs @ 2144

Revision 2141, 3.9 KB checked in by sijoseha, 8 years ago (diff)

Whoa. A lot of stuff since last commit.
Implemented ScreenManager? stuff to handle all the screens.
Input is handled also.
Simple tile based map system started up.
Normal menu.
Alotofsmallstuff

Line 
1using System;
2using System.Collections.Generic;
3
4using Microsoft.Xna.Framework;
5using Microsoft.Xna.Framework.Graphics;
6using Microsoft.Xna.Framework.Input;
7using Microsoft.Xna.Framework.Input.Touch;
8
9namespace Fera_Proelia
10{
11    abstract class MenuScreen : GameScreen
12    {
13        const int menuEntryPadding = 10;
14        List<MenuEntry> menuEntries = new List<MenuEntry>();
15        int selectedEntry = 0;
16        string menuTitle;
17
18        protected IList<MenuEntry> MenuEntries { get { return menuEntries; } }
19
20        public MenuScreen(string menuTitle)
21        {
22            EnabledGestures = GestureType.Tap;
23            this.menuTitle = menuTitle;
24        }
25
26        protected virtual Rectangle GetMenuEntryHitBounds(MenuEntry entry)
27        {
28            return new Rectangle(0, (int)entry.Position.Y - menuEntryPadding,
29                ScreenManager.GraphicsDevice.Viewport.Width, entry.GetHeight(this) + (menuEntryPadding * 2));
30        }
31
32        public override void HandleInput(InputState input)
33        {
34            if (input.IsNewButtonPress(Buttons.Back))
35                OnCancel();
36            foreach (GestureSample gesture in input.Gestures)
37            {
38                if (gesture.GestureType == GestureType.Tap)
39                {
40                    Point tapLocation = new Point((int)gesture.Position.X, (int)gesture.Position.Y);
41                    for (int i = 0; i < menuEntries.Count; i++)
42                    {
43                        MenuEntry menuEntry = menuEntries[i];
44                        if (GetMenuEntryHitBounds(menuEntry).Contains(tapLocation))
45                        {
46                            OnSelectEntry(i);
47                        }
48                    }
49                }
50            }
51        }
52
53        protected virtual void OnSelectEntry(int entryIndex)
54        {
55            menuEntries[entryIndex].OnSelectEntry();
56        }
57
58        protected virtual void OnCancel()
59        {
60            ExitScreen();
61        }
62
63        public override void Update(GameTime gameTime, bool otherScreenHasFocus, bool coveredByOtherScreen)
64        {
65            base.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen);
66            for (int i = 0; i < menuEntries.Count; i++)
67            {
68                bool isSelected = IsActive && (i == selectedEntry);
69                menuEntries[i].Update(this, isSelected, gameTime);
70            }
71        }
72
73        protected virtual void UpdateMenuEntryLocations()
74        {
75            Vector2 position = new Vector2(0f, 175f);
76            for (int i = 0; i < menuEntries.Count; i++)
77            {
78                MenuEntry menuEntry = menuEntries[i];
79
80                position.X = ScreenManager.GraphicsDevice.Viewport.Width / 2 - menuEntry.GetWidth(this) / 2;
81                menuEntry.Position = position;
82                position.Y += menuEntry.GetHeight(this) + (menuEntryPadding * 2);
83            }
84        }
85
86        public override void Draw(GameTime gameTime)
87        {
88            UpdateMenuEntryLocations();
89
90            GraphicsDevice graphics = ScreenManager.GraphicsDevice;
91            SpriteBatch spriteBatch = ScreenManager.SpriteBatch;
92            SpriteFont font = ScreenManager.MenuFont;
93
94            spriteBatch.Begin();
95            for (int i = 0; i < menuEntries.Count; i++)
96            {
97                MenuEntry menuEntry = menuEntries[i];
98                bool isSelected = IsActive && (i == selectedEntry);
99                menuEntry.Draw(this, isSelected, gameTime);
100            }
101
102            Vector2 titlePosition = new Vector2(graphics.Viewport.Width / 2, 80);
103            Vector2 titleOrigin = font.MeasureString(menuTitle) / 2;
104            float titleScale = 1.25f;
105
106            spriteBatch.DrawString(font, menuTitle, titlePosition, Color.White, 0, titleOrigin, titleScale, SpriteEffects.None, 0);
107            spriteBatch.End();
108        }
109    }
110}
Note: See TracBrowser for help on using the repository browser.