source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Game.cs @ 4521

Revision 4521, 5.6 KB checked in by dezhidki, 7 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using Microsoft.Xna.Framework;
5using Microsoft.Xna.Framework.Audio;
6using Microsoft.Xna.Framework.Content;
7using Microsoft.Xna.Framework.GamerServices;
8using Microsoft.Xna.Framework.Graphics;
9using Microsoft.Xna.Framework.Input;
10using Microsoft.Xna.Framework.Media;
11using CastleMaster.Input;
12using Keys = System.Windows.Forms.Keys;
13using Viewport = CastleMaster.Graphics.Viewport;
14using System.Text;
15using CastleMaster.Graphics;
16using CastleMaster.World;
17
18namespace CastleMaster
19{
20    /// <summary>
21    /// This is the main type for your game
22    /// </summary>
23    public class Game : Microsoft.Xna.Framework.Game
24    {
25        public const int WIDTH = 800;
26        public const int HEIGHT = 600;
27        public const string TITLE = "Castle Master Alpha 0.1";
28
29        private const string UPS_TEXT = " UPS: ";
30        private const string FPS_TEXT = " | FPS: ";
31
32        private GraphicsDeviceManager graphics;
33        private SpriteBatch spriteBatch;
34        private InputHandler input;
35        private RenderHelper renderer;
36        private Camera camera;
37        private LevelTest level;
38        private int cameraSpeed = 10;
39
40        #region Counter
41        private readonly TimeSpan ONE_SECOND = TimeSpan.FromSeconds(1.0);
42        private TimeSpan currentTime = TimeSpan.Zero;
43        private int frames = 0, updates = 0;
44        #endregion
45
46        public Game()
47        {
48            graphics = new GraphicsDeviceManager(this);
49            Content.RootDirectory = "Content";
50            input = new InputHandler(Window);
51        }
52
53        /// <summary>
54        /// Allows the game to perform any initialization it needs to before starting to run.
55        /// This is where it can query for any required services and load any non-graphic
56        /// related content.  Calling base.Initialize will enumerate through any components
57        /// and initialize them as well.
58        /// </summary>
59        protected override void Initialize()
60        {
61            graphics.PreferredBackBufferWidth = WIDTH;
62            graphics.PreferredBackBufferHeight = HEIGHT;
63            graphics.SynchronizeWithVerticalRetrace = true;
64            graphics.ApplyChanges();
65            Window.Title = TITLE;
66            IsMouseVisible = true;
67
68            InitializeInput();
69
70            base.Initialize();
71        }
72
73        private void InitializeInput()
74        {
75            input.RegisterKeyboardKey(Keys.Escape);
76            input.RegisterKeyboardKey(Keys.W);
77            input.RegisterKeyboardKey(Keys.A);
78            input.RegisterKeyboardKey(Keys.S);
79            input.RegisterKeyboardKey(Keys.D);
80            input.RegisterKeyboardKey(Keys.Z);
81            input.RegisterKeyboardKey(Keys.X);
82        }
83
84        /// <summary>
85        /// LoadContent will be called once per game and is the place to load
86        /// all of your content.
87        /// </summary>
88        protected override void LoadContent()
89        {
90            spriteBatch = new SpriteBatch(GraphicsDevice);
91            renderer = new RenderHelper(spriteBatch);
92
93            Resources.LoadResources(Content, renderer);
94        }
95
96        /// <summary>
97        /// UnloadContent will be called once per game and is the place to unload
98        /// all content.
99        /// </summary>
100        protected override void UnloadContent()
101        {
102            // TODO: Unload any non ContentManager content here
103        }
104
105        protected override void BeginRun()
106        {
107            base.BeginRun();
108
109            camera = new Camera();
110            level = new LevelTest(128, 128);
111        }
112
113        /// <summary>
114        /// Allows the game to run logic such as updating the world,
115        /// checking for collisions, gathering input, and playing audio.
116        /// </summary>
117        /// <param name="gameTime">Provides a snapshot of timing values.</param>
118        protected override void Update(GameTime gameTime)
119        {
120            input.Update();
121            camera.Update();
122
123            if (InputHandler.HasKeyBeenPressed(Keys.Escape))
124                this.Exit();
125            if (InputHandler.IsKeyDown(Keys.W))
126                camera.YTop -= cameraSpeed;
127            if (InputHandler.IsKeyDown(Keys.S))
128                camera.YTop += cameraSpeed;
129            if (InputHandler.IsKeyDown(Keys.A))
130                camera.XLeft -= cameraSpeed;
131            if (InputHandler.IsKeyDown(Keys.D))
132                camera.XLeft += cameraSpeed;
133            if (InputHandler.HasKeyBeenPressed(Keys.Z))
134                Viewport.ZOOM += Viewport.ZOOM_STEP;
135            if (InputHandler.HasKeyBeenPressed(Keys.X))
136                Viewport.ZOOM -= Viewport.ZOOM_STEP;
137
138            updates++;
139            currentTime += gameTime.ElapsedGameTime;
140            if (currentTime >= ONE_SECOND)
141            {
142                currentTime = TimeSpan.Zero;
143                Window.Title = new StringBuilder(TITLE).Append(FPS_TEXT).Append(frames).Append(UPS_TEXT).Append(updates).ToString();
144                frames = updates = 0;
145            }
146
147            base.Update(gameTime);
148        }
149
150        /// <summary>
151        /// This is called when the game should draw itself.
152        /// </summary>
153        /// <param name="gameTime">Provides a snapshot of timing values.</param>
154        protected override void Draw(GameTime gameTime)
155        {
156            GraphicsDevice.Clear(Color.Black);
157
158            renderer.BeginRender();
159
160            level.RenderBackground(camera, renderer);
161
162            renderer.EndRender();
163
164            frames++;
165            base.Draw(gameTime);
166        }
167    }
168}
Note: See TracBrowser for help on using the repository browser.