source: 2011/23/sijoseha/Fera Proelia/Fera Proelia/Fera Proelia/ScreenManager.cs @ 2141

Revision 2141, 3.4 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;
3using Microsoft.Xna.Framework;
4using Microsoft.Xna.Framework.Content;
5using Microsoft.Xna.Framework.Graphics;
6using Microsoft.Xna.Framework.Input;
7using Microsoft.Xna.Framework.Input.Touch;
8
9namespace Fera_Proelia
10{
11    public class ScreenManager : DrawableGameComponent
12    {
13        List<GameScreen> screens = new List<GameScreen>();
14        List<GameScreen> screensToUpdate = new List<GameScreen>();
15
16        InputState input = new InputState();
17
18        SpriteBatch spriteBatch;
19        SpriteFont menuFont;
20
21        bool isInitialized;
22
23        public SpriteBatch SpriteBatch { get { return spriteBatch; } }
24        public SpriteFont MenuFont { get { return menuFont; } }
25
26        public ScreenManager(Game game)
27            : base(game)
28        {
29            TouchPanel.EnabledGestures = GestureType.None;
30        }
31
32        public override void Initialize()
33        {
34            base.Initialize();
35            isInitialized = true;
36        }
37
38        protected override void LoadContent()
39        {
40            ContentManager content = Game.Content;
41            spriteBatch = new SpriteBatch(GraphicsDevice);
42            menuFont = content.Load<SpriteFont>("menuFont");
43            foreach (GameScreen screen in screens)
44            {
45                screen.LoadContent();
46            }
47        }
48
49        protected override void UnloadContent()
50        {
51            foreach (GameScreen screen in screens)
52            {
53                screen.UnloadContent();
54            }
55        }
56
57        public override void Update(GameTime gameTime)
58        {
59            input.Update();
60            screensToUpdate.Clear();
61            foreach (GameScreen screen in screens)
62                screensToUpdate.Add(screen);
63
64            bool otherScreenHasFocus = !Game.IsActive;
65            bool coveredByOtherScreen = false;
66
67            while (screensToUpdate.Count > 0)
68            {
69                GameScreen screen = screensToUpdate[screensToUpdate.Count - 1];
70                screensToUpdate.RemoveAt(screensToUpdate.Count - 1);
71                screen.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen);
72                if (screen.ScreenState == ScreenState.Active)
73                {
74                    if (!otherScreenHasFocus)
75                    {
76                        screen.HandleInput(input);
77                        otherScreenHasFocus = true;
78                    }
79                }
80            }
81
82            base.Update(gameTime);
83        }
84
85        public override void Draw(GameTime gameTime)
86        {
87            foreach (GameScreen screen in screens)
88            {
89                screen.Draw(gameTime);
90            }
91            base.Draw(gameTime);
92        }
93
94        public void AddScreen(GameScreen screen)
95        {
96            screen.ScreenManager = this;
97            if (isInitialized)
98            {
99                screen.LoadContent();
100            }
101            screens.Add(screen);
102            TouchPanel.EnabledGestures = screen.EnabledGestures;
103        }
104
105        public void RemoveScreen(GameScreen screen)
106        {
107            if (isInitialized)
108            {
109                screen.UnloadContent();
110            }
111
112            screens.Remove(screen);
113            screensToUpdate.Remove(screen);
114        }
115
116        public GameScreen[] GetScreens()
117        {
118            return screens.ToArray();
119        }
120    }
121}
Note: See TracBrowser for help on using the repository browser.