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

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

Talletus.

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;
12using CastleMaster.Players;
13
14namespace CastleMaster
15{
16    /// <summary>
17    /// This is the main type for your game
18    /// </summary>
19    public class Game : Microsoft.Xna.Framework.Game
20    {
21        public const int WIDTH = 800;
22        public const int HEIGHT = 600;
23        public const string TITLE = "Castle Master Alpha 0.2";
24
25        private const string UPS_TEXT = " UPS: ";
26        private const string FPS_TEXT = " | FPS: ";
27
28        private GraphicsDeviceManager graphics;
29        private SpriteBatch spriteBatch;
30        private InputHandler input;
31        private RenderHelper renderer;
32        private Camera camera;
33        private LevelTest level;
34        private Player[] players;
35
36        #region Counter
37        private readonly TimeSpan ONE_SECOND = TimeSpan.FromSeconds(1.0);
38        private TimeSpan currentTime = TimeSpan.Zero;
39        private int frames = 0, updates = 0;
40        #endregion
41
42        public static FastRandom Random { get; private set; }
43
44        public Game()
45        {
46            graphics = new GraphicsDeviceManager(this);
47            Content.RootDirectory = "Content";
48            input = new InputHandler(Window);
49            Random = new FastRandom();
50            players = new Player[2];
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
67            InitializeInput();
68
69            base.Initialize();
70        }
71
72        private void InitializeInput()
73        {
74            input.RegisterKeyboardKey(Keys.Escape);
75            input.RegisterKeyboardKey(Keys.W);
76            input.RegisterKeyboardKey(Keys.A);
77            input.RegisterKeyboardKey(Keys.S);
78            input.RegisterKeyboardKey(Keys.D);
79            input.RegisterKeyboardKey(Keys.Z);
80            input.RegisterKeyboardKey(Keys.X);
81            input.RegisterKeyboardKey(Keys.F4);
82
83            input.RegisterMouseKey(MouseButtons.Middle);
84        }
85
86        private void AddPlayer(Player p)
87        {
88            players[p.Team.ID] = p;
89            level.SetPlayer(p, p.Team.ID);
90        }
91
92        /// <summary>
93        /// LoadContent will be called once per game and is the place to load
94        /// all of your content.
95        /// </summary>
96        protected override void LoadContent()
97        {
98            spriteBatch = new SpriteBatch(GraphicsDevice);
99            renderer = new RenderHelper(spriteBatch);
100
101            Resources.LoadResources(Content, renderer);
102        }
103
104        /// <summary>
105        /// UnloadContent will be called once per game and is the place to unload
106        /// all content.
107        /// </summary>
108        protected override void UnloadContent()
109        {
110            // TODO: Unload any non ContentManager content here
111        }
112
113        protected override void BeginRun()
114        {
115            base.BeginRun();
116
117            level = new LevelTest(Resources.LEVEL_TEST);
118            camera = new Camera(level);
119            AddPlayer(new PlayerReal(new Team("The men", 0), level, camera));
120        }
121
122        /// <summary>
123        /// Allows the game to run logic such as updating the world,
124        /// checking for collisions, gathering input, and playing audio.
125        /// </summary>
126        /// <param name="gameTime">Provides a snapshot of timing values.</param>
127        protected override void Update(GameTime gameTime)
128        {
129            input.Update();
130
131            if (InputHandler.HasKeyBeenPressed(Keys.F4))
132                IsFixedTimeStep = !IsFixedTimeStep;
133            if (InputHandler.HasKeyBeenPressed(Keys.Escape))
134                this.Exit();
135
136            if (InputHandler.MouseScrollDelta > 1)
137                camera.Zoom(Viewport.ZOOM_STEP);
138            else if (InputHandler.MouseScrollDelta < 0)
139                camera.Zoom(-Viewport.ZOOM_STEP);
140
141            foreach (Player p in players)
142                if (p != null)
143                    p.Update();
144
145            camera.Update();
146
147            level.Update();
148
149            updates++;
150            currentTime += gameTime.ElapsedGameTime;
151            if (currentTime >= ONE_SECOND)
152            {
153                currentTime = TimeSpan.Zero;
154                Window.Title = new StringBuilder(TITLE).Append(FPS_TEXT).Append(frames).Append(UPS_TEXT).Append(updates).ToString();
155                frames = updates = 0;
156            }
157
158            base.Update(gameTime);
159        }
160
161        /// <summary>
162        /// This is called when the game should draw itself.
163        /// </summary>
164        /// <param name="gameTime">Provides a snapshot of timing values.</param>
165        protected override void Draw(GameTime gameTime)
166        {
167            GraphicsDevice.Clear(Color.Black);
168
169            renderer.BeginRender();
170
171            level.RenderBackground(camera, renderer);
172            camera.RenderSelelctor(renderer);
173            level.RenderEntities(camera, renderer);
174
175            camera.RenderCursor(renderer);
176            renderer.EndRender();
177
178            frames++;
179            base.Draw(gameTime);
180        }
181    }
182}
Note: See TracBrowser for help on using the repository browser.