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

Revision 4535, 5.9 KB checked in by dezhidki, 6 years ago (diff)

Uusi versio:

  • Tason luonti valmis
  • Piirtojärjestys toimii
  • Palikoiden lisääminen ja muokkaus toimii
  • Esivalmistelut liikkumista varten
Line 
1using CastleMaster.Graphics;
2using CastleMaster.Input;
3using CastleMaster.World;
4using Microsoft.Xna.Framework;
5using Microsoft.Xna.Framework.Graphics;
6using SharpNeatLib.Maths;
7using System;
8using System.Text;
9using System.Windows.Forms;
10using Keys = System.Windows.Forms.Keys;
11using Viewport = CastleMaster.Graphics.Viewport;
12
13namespace CastleMaster
14{
15    /// <summary>
16    /// This is the main type for your game
17    /// </summary>
18    public class Game : Microsoft.Xna.Framework.Game
19    {
20        public const int WIDTH = 800;
21        public const int HEIGHT = 600;
22        public const string TITLE = "Castle Master Alpha 0.1";
23
24        private const string UPS_TEXT = " UPS: ";
25        private const string FPS_TEXT = " | FPS: ";
26
27        private GraphicsDeviceManager graphics;
28        private SpriteBatch spriteBatch;
29        private InputHandler input;
30        private RenderHelper renderer;
31        private Camera camera;
32        private LevelTest level;
33        private int cameraSpeed = 10;
34
35        #region Counter
36        private readonly TimeSpan ONE_SECOND = TimeSpan.FromSeconds(1.0);
37        private TimeSpan currentTime = TimeSpan.Zero;
38        private int frames = 0, updates = 0;
39        #endregion
40
41        public static FastRandom Random { get; private set; }
42
43        public Game()
44        {
45            graphics = new GraphicsDeviceManager(this);
46            Content.RootDirectory = "Content";
47            input = new InputHandler(Window);
48            Random = new FastRandom();
49        }
50
51        /// <summary>
52        /// Allows the game to perform any initialization it needs to before starting to run.
53        /// This is where it can query for any required services and load any non-graphic
54        /// related content.  Calling base.Initialize will enumerate through any components
55        /// and initialize them as well.
56        /// </summary>
57        protected override void Initialize()
58        {
59            graphics.PreferredBackBufferWidth = WIDTH;
60            graphics.PreferredBackBufferHeight = HEIGHT;
61            graphics.SynchronizeWithVerticalRetrace = false;
62            graphics.ApplyChanges();
63            Window.Title = TITLE;
64
65            InitializeInput();
66
67            base.Initialize();
68        }
69
70        private void InitializeInput()
71        {
72            input.RegisterKeyboardKey(Keys.Escape);
73            input.RegisterKeyboardKey(Keys.W);
74            input.RegisterKeyboardKey(Keys.A);
75            input.RegisterKeyboardKey(Keys.S);
76            input.RegisterKeyboardKey(Keys.D);
77            input.RegisterKeyboardKey(Keys.Z);
78            input.RegisterKeyboardKey(Keys.X);
79            input.RegisterKeyboardKey(Keys.F4);
80
81            input.RegisterMouseKey(MouseButtons.Middle);
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            level = new LevelTest(Resources.LEVEL_TEST);
110            camera = new Camera(level);
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.F4))
124                IsFixedTimeStep = !IsFixedTimeStep;
125
126            if (InputHandler.HasKeyBeenPressed(Keys.Escape))
127                this.Exit();
128            if (InputHandler.IsKeyDown(Keys.W))
129                camera.YTop -= cameraSpeed;
130            if (InputHandler.IsKeyDown(Keys.S))
131                camera.YTop += cameraSpeed;
132            if (InputHandler.IsKeyDown(Keys.A))
133                camera.XLeft -= cameraSpeed;
134            if (InputHandler.IsKeyDown(Keys.D))
135                camera.XLeft += cameraSpeed;
136
137            if (InputHandler.MouseScrollDelta > 1)
138                camera.Zoom(Viewport.ZOOM_STEP);
139            else if (InputHandler.MouseScrollDelta < 0)
140                camera.Zoom(-Viewport.ZOOM_STEP);
141
142            level.Update();
143
144            updates++;
145            currentTime += gameTime.ElapsedGameTime;
146            if (currentTime >= ONE_SECOND)
147            {
148                currentTime = TimeSpan.Zero;
149                Window.Title = new StringBuilder(TITLE).Append(FPS_TEXT).Append(frames).Append(UPS_TEXT).Append(updates).ToString();
150                frames = updates = 0;
151            }
152
153            base.Update(gameTime);
154        }
155
156        /// <summary>
157        /// This is called when the game should draw itself.
158        /// </summary>
159        /// <param name="gameTime">Provides a snapshot of timing values.</param>
160        protected override void Draw(GameTime gameTime)
161        {
162            GraphicsDevice.Clear(Color.Black);
163
164            renderer.BeginRender();
165
166            level.RenderBackground(camera, renderer);
167            camera.RenderSelelctor(renderer);
168            level.RenderEntities(camera, renderer);
169
170            camera.RenderCursor(renderer);
171            renderer.EndRender();
172
173            frames++;
174            base.Draw(gameTime);
175        }
176    }
177}
Note: See TracBrowser for help on using the repository browser.