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

Revision 4694, 6.5 KB checked in by dezhidki, 7 years ago (diff)

Guit lisätty, AIn viimestely.

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;
13using CastleMaster.Guis;
14
15namespace CastleMaster
16{
17    /// <summary>
18    /// This is the main type for your game
19    /// </summary>
20    public class Game : Microsoft.Xna.Framework.Game
21    {
22        public const int WIDTH = 800;
23        public const int HEIGHT = 600;
24        public const string TITLE = "Castle Master";
25        public const string VERSION = " Alpha 1.5";
26
27        private GraphicsDeviceManager graphics;
28        private SpriteBatch spriteBatch;
29        private InputHandler input;
30        private RenderHelper renderer;
31        private Camera camera;
32        private LevelForest level;
33        private Player[] players;
34        private static GuiManager guiManager;
35        private GuiDebug debugScreen;
36        private GuiPlayer ingame;
37
38        #region Counter
39        private readonly TimeSpan ONE_SECOND = TimeSpan.FromSeconds(1.0);
40        private TimeSpan currentTime = TimeSpan.Zero;
41        private int frames = 0, updates = 0, fps = 0, ups = 0;
42        #endregion
43
44        public static FastRandom Random { get; private set; }
45
46        public static readonly Team TEAM1 = new Team("Team1", 0);
47        public static readonly Team TEAM2 = new Team("Team2", 1);
48
49        public Game()
50        {
51            graphics = new GraphicsDeviceManager(this);
52            Content.RootDirectory = "Content";
53            input = new InputHandler(Window);
54            Random = new FastRandom();
55            players = new Player[2];
56            guiManager = new GuiManager();
57        }
58
59        public static GuiManager GuiManager { get { return guiManager; } }
60
61        public int FPS { get { return fps; } }
62
63        public int UPS { get { return ups; } }
64
65        protected override void Initialize()
66        {
67            graphics.PreferredBackBufferWidth = WIDTH;
68            graphics.PreferredBackBufferHeight = HEIGHT;
69            graphics.SynchronizeWithVerticalRetrace = false;
70            graphics.ApplyChanges();
71            Window.Title = TITLE;
72
73            InitializeInput();
74
75            base.Initialize();
76        }
77
78        private void InitializeInput()
79        {
80            input.RegisterKeyboardKey(Keys.Escape);
81            input.RegisterKeyboardKey(Keys.W);
82            input.RegisterKeyboardKey(Keys.A);
83            input.RegisterKeyboardKey(Keys.S);
84            input.RegisterKeyboardKey(Keys.D);
85            input.RegisterKeyboardKey(Keys.F4);
86            input.RegisterKeyboardKey(Keys.F1);
87            input.RegisterKeyboardKey(Keys.ShiftKey);
88            input.RegisterKeyboardKey(Keys.ControlKey);
89            input.RegisterKeyboardKey(Keys.Up);
90            input.RegisterKeyboardKey(Keys.Down);
91            input.RegisterKeyboardKey(Keys.Left);
92            input.RegisterKeyboardKey(Keys.Right);
93            input.RegisterKeyboardKey(Keys.Enter);
94
95            input.RegisterMouseKey(MouseButtons.Middle);
96            input.RegisterMouseKey(MouseButtons.Right);
97            input.RegisterMouseKey(MouseButtons.Left);
98        }
99
100        private void AddPlayer(Player p)
101        {
102            players[p.Team.ID] = p;
103            level.SetPlayer(p, p.Team.ID);
104        }
105
106        public static Team GetEnemyTeam(Team team)
107        {
108            return team == TEAM1 ? TEAM2 : TEAM1;
109        }
110
111        protected override void LoadContent()
112        {
113            spriteBatch = new SpriteBatch(GraphicsDevice);
114            renderer = new RenderHelper(spriteBatch);
115
116            Resources.LoadResources(Content, renderer);
117        }
118
119        protected override void UnloadContent()
120        {
121        }
122
123        protected override void BeginRun()
124        {
125            base.BeginRun();
126
127            level = new LevelForest(Content.Load<Texture2D>("levels/levelForest"));
128            camera = new Camera(level);
129            AddPlayer(new PlayerReal(TEAM1, level, camera));
130            AddPlayer(new PlayerAI(TEAM2, level, camera, PlayerAI.DIFFICULTY_NORMAL, players[0]));
131            level.InitLevel();
132            foreach (Player p in players)
133                if (p != null) p.OnLevelLoaded();
134            camera.CenterOn(level.Width / 2 * Viewport.TILESIZE, level.Height / 2 * Viewport.TILESIZE);
135
136
137            ingame = new GuiPlayer(guiManager, players[0]);
138            guiManager.AddGui(ingame, true);
139
140            debugScreen = new GuiDebug(guiManager, this);
141            guiManager.AddGui(debugScreen, false);
142        }
143
144        protected override void Update(GameTime gameTime)
145        {
146            input.Update();
147
148            if (InputHandler.HasKeyBeenPressed(Keys.F1))
149            {
150                debugScreen.IsActive = !debugScreen.IsActive;
151            }
152            if (InputHandler.HasKeyBeenPressed(Keys.F4))
153                IsFixedTimeStep = !IsFixedTimeStep;
154            if (InputHandler.HasKeyBeenPressed(Keys.Escape))
155                this.Exit();
156
157            if (InputHandler.MouseScrollDelta > 1)
158                camera.Zoom(Viewport.ZOOM_STEP);
159            else if (InputHandler.MouseScrollDelta < 0)
160                camera.Zoom(-Viewport.ZOOM_STEP);
161
162            foreach (Player p in players)
163                if (p != null)
164                    p.Update();
165            //players[0].Update();
166
167            camera.Update();
168
169            level.Update();
170
171            guiManager.Update();
172
173            updates++;
174            currentTime += gameTime.ElapsedGameTime;
175            if (currentTime >= ONE_SECOND)
176            {
177                currentTime = TimeSpan.Zero;
178                fps = frames;
179                ups = updates;
180                frames = updates = 0;
181            }
182
183            base.Update(gameTime);
184        }
185
186        protected override void Draw(GameTime gameTime)
187        {
188            GraphicsDevice.Clear(Color.Black);
189
190            renderer.BeginRender();
191
192            level.RenderBackground(camera, renderer);
193            camera.RenderSelelctor(renderer);
194            level.RenderEntities(camera, renderer);
195
196            guiManager.Render(renderer);
197            camera.RenderCursor(renderer);
198            renderer.EndRender();
199
200            frames++;
201            base.Draw(gameTime);
202        }
203    }
204}
Note: See TracBrowser for help on using the repository browser.