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

Revision 4590, 6.2 KB checked in by dezhidki, 6 years ago (diff)

Puut lisätty, woodcutter toimii.

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 = false;
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            input.RegisterMouseKey(MouseButtons.Right);
85            input.RegisterMouseKey(MouseButtons.Left);
86        }
87
88        private void AddPlayer(Player p)
89        {
90            players[p.Team.ID] = p;
91            level.SetPlayer(p, p.Team.ID);
92        }
93
94        /// <summary>
95        /// LoadContent will be called once per game and is the place to load
96        /// all of your content.
97        /// </summary>
98        protected override void LoadContent()
99        {
100            spriteBatch = new SpriteBatch(GraphicsDevice);
101            renderer = new RenderHelper(spriteBatch);
102
103            Resources.LoadResources(Content, renderer);
104        }
105
106        /// <summary>
107        /// UnloadContent will be called once per game and is the place to unload
108        /// all content.
109        /// </summary>
110        protected override void UnloadContent()
111        {
112            // TODO: Unload any non ContentManager content here
113        }
114
115        protected override void BeginRun()
116        {
117            base.BeginRun();
118
119            level = new LevelTest(Resources.LEVEL_TEST);
120            camera = new Camera(level);
121            AddPlayer(new PlayerReal(new Team("The men", 0), level, camera));
122            level.InitLevel();
123            camera.CenterOn(level.Width / 2 * Viewport.TILESIZE, level.Height / 2 * Viewport.TILESIZE);
124        }
125
126        /// <summary>
127        /// Allows the game to run logic such as updating the world,
128        /// checking for collisions, gathering input, and playing audio.
129        /// </summary>
130        /// <param name="gameTime">Provides a snapshot of timing values.</param>
131        protected override void Update(GameTime gameTime)
132        {
133            input.Update();
134
135            if (InputHandler.HasKeyBeenPressed(Keys.F4))
136                IsFixedTimeStep = !IsFixedTimeStep;
137            if (InputHandler.HasKeyBeenPressed(Keys.Escape))
138                this.Exit();
139
140            if (InputHandler.MouseScrollDelta > 1)
141                camera.Zoom(Viewport.ZOOM_STEP);
142            else if (InputHandler.MouseScrollDelta < 0)
143                camera.Zoom(-Viewport.ZOOM_STEP);
144
145            foreach (Player p in players)
146                if (p != null)
147                    p.Update();
148
149            camera.Update();
150
151            level.Update();
152
153            updates++;
154            currentTime += gameTime.ElapsedGameTime;
155            if (currentTime >= ONE_SECOND)
156            {
157                currentTime = TimeSpan.Zero;
158                Window.Title = new StringBuilder(TITLE).Append(FPS_TEXT).Append(frames).Append(UPS_TEXT).Append(updates).ToString();
159                frames = updates = 0;
160            }
161
162            base.Update(gameTime);
163        }
164
165        /// <summary>
166        /// This is called when the game should draw itself.
167        /// </summary>
168        /// <param name="gameTime">Provides a snapshot of timing values.</param>
169        protected override void Draw(GameTime gameTime)
170        {
171            GraphicsDevice.Clear(Color.Black);
172
173            renderer.BeginRender();
174
175            level.RenderBackground(camera, renderer);
176            camera.RenderSelelctor(renderer);
177            level.RenderEntities(camera, renderer);
178
179            camera.RenderCursor(renderer);
180            renderer.EndRender();
181
182            frames++;
183            base.Draw(gameTime);
184        }
185    }
186}
Note: See TracBrowser for help on using the repository browser.