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

Revision 2144, 5.2 KB checked in by sijoseha, 8 years ago (diff)

Basic HUD stuff implemented

Line 
1using System;
2using System.Collections.Generic;
3using Microsoft.Xna.Framework;
4using Microsoft.Xna.Framework.Graphics;
5using Microsoft.Xna.Framework.Content;
6using Microsoft.Xna.Framework.Input;
7using Microsoft.Xna.Framework.Input.Touch;
8
9namespace Fera_Proelia
10{
11    public class GameplayScreen : GameScreen
12    {
13        ContentManager content;
14
15        Tile[,] mapTiles;
16        const int TILE_SIZE= 68;
17
18        List<GameObject> gameObjects;
19        HUD hud;
20        Rectangle mapArea, guiArea;
21
22        public GameplayScreen()
23        {
24            EnabledGestures = GestureType.Tap;
25        }
26
27        public override void LoadContent()
28        {
29            if (content == null)
30                content = new ContentManager(ScreenManager.Game.Services, "Content");
31           
32            mapArea = new Rectangle(0, 0, ScreenManager.GraphicsDevice.Viewport.Width, 544);
33            guiArea = new Rectangle(0, 544, ScreenManager.GraphicsDevice.Viewport.Width, ScreenManager.GraphicsDevice.Viewport.Height - 544);
34            hud = new HUD(guiArea, ScreenManager.HudFont);
35            hud.AddComponent(new HUDText("Name", new Vector2(30, 30), Color.Black));
36            hud.AddComponent(new HUDText("Race", new Vector2(30, 50), Color.Black));
37            hud.AddComponent(new HUDText("Age", new Vector2(30, 70), Color.Black));
38            hud.BackgroundTexture = content.Load<Texture2D>("hudBg");
39
40            int mapWidth = mapArea.Width / TILE_SIZE;
41            int mapHeight = mapArea.Height / TILE_SIZE;
42            mapTiles = new Tile[mapWidth, mapHeight];
43           
44            for (int x = 0; x < mapWidth; x++)
45            {
46                for (int y = 0; y < mapHeight; y++)
47                {
48                    Tile tile = new Tile(new Vector2(x * TILE_SIZE, y * TILE_SIZE), TILE_SIZE, TILE_SIZE);
49                    tile.TileType = TileType.Ground;
50                    tile.Selected += TileSelectedEvent;
51                    mapTiles[x, y] = tile;
52                }
53            }
54
55            Tile.Textures[0] = content.Load<Texture2D>("groundTexture");
56            Texture2D testTex = content.Load<Texture2D>("debugImage");
57
58            gameObjects = new List<GameObject>();
59           
60            for (int i = 0; i < 7; i++)
61            {
62                for (int j = 0; j < 10; j++)
63                {
64                    Beast test = new Beast(new Vector2(i * 68, j * 68), 68, 68);
65                    test.Texture = testTex;
66                    gameObjects.Add(test);
67                }
68            }
69           
70
71            ScreenManager.Game.ResetElapsedTime();
72        }
73
74        void TileSelectedEvent(object sender, SelectedEventArgs<Tile> e)
75        {
76            e.Selection.IsSelected = true;
77        }
78
79        public override void Update(GameTime gameTime, bool otherScreenHasFocus, bool coveredByOtherScreen)
80        {
81            base.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen);
82
83            if (IsActive)
84            {
85                foreach (GameObject o in gameObjects)
86                {
87                    o.Update(gameTime);
88                }
89            }
90        }
91
92        public override void HandleInput(InputState input)
93        {
94            foreach (GestureSample gesture in input.Gestures)
95            {
96                if (gesture.GestureType == GestureType.Tap)
97                {
98                    Point tapLocation = new Point((int)gesture.Position.X, (int)gesture.Position.Y);
99                    for (int x = 0; x < mapTiles.GetLength(0); x++)
100                    {
101                        for (int y = 0; y < mapTiles.GetLength(1); y++)
102                        {
103                            Tile tile = mapTiles[x, y];
104                            if (tile.HitBounds.Contains(tapLocation))
105                            {
106                                OnSelectedTile(tile); 
107                            }
108                        }
109                    }
110                }
111            }
112        }
113
114        protected virtual void OnSelectedTile(Tile tile)
115        {
116            for (int x = 0; x < mapTiles.GetLength(0); x++)
117                for (int y = 0; y < mapTiles.GetLength(1); y++)
118                    mapTiles[x, y].IsSelected = false;
119            tile.OnSelectTile(tile);
120        }
121
122        public override void Draw(GameTime gameTime)
123        {
124            ScreenManager.GraphicsDevice.Clear(ClearOptions.Target, Color.Violet, 0, 0);
125            SpriteBatch sb = ScreenManager.SpriteBatch;
126
127            sb.Begin();
128
129            for (int x = 0; x < mapTiles.GetLength(0); x++)
130            {
131                for (int y = 0; y < mapTiles.GetLength(1); y++)
132                {
133                    Color drawColor = Color.White;
134                    if (mapTiles[x, y].IsSelected)
135                        drawColor = Color.Red;
136                    sb.Draw(Tile.Textures[(int)(mapTiles[x, y].TileType)], mapTiles[x, y].Position, drawColor);
137                }
138            }
139
140            foreach (GameObject o in gameObjects)
141            {
142                sb.Draw(o.Texture, o.Position, Color.White);
143            }
144            hud.Draw(sb, gameTime);
145            sb.End();
146            base.Draw(gameTime);
147        }
148    }
149}
Note: See TracBrowser for help on using the repository browser.