2 using System.Collections.Generic;
3 using FBClient.Core.Entities;
4 using FBClient.Entities;
5 using FBClient.WorldEngine;
7 using FBLibrary.Core.BaseEntities;
8 using Microsoft.Xna.Framework;
9 using Microsoft.Xna.Framework.Audio;
10 using Microsoft.Xna.Framework.Media;
12 namespace FBClient.Core
30 private readonly
Map _currentMap;
33 private Song _mapHurrySong;
34 private Song _mapSong;
37 private TimeSpan _gameTimer;
48 get {
return _currentMap; }
51 public TimeSpan GameTimer
53 get {
return _gameTimer; }
62 WallList =
new List<Wall>();
63 PowerUpList =
new List<PowerUp>();
64 BombList =
new List<Bomb>();
66 _currentMap =
new Map();
67 BaseCurrentMap = _currentMap;
69 _gameTimer = TimeSpan.Zero;
71 GameTime =
new GameTime();
76 MediaPlayer.Play(_mapSong);
78 _gameTimer = TimeSpan.Zero;
80 var origin =
new Vector2((
FinalBomber.
Instance.GraphicsDevice.Viewport.Width - 234) / 2f - ((32 * _currentMap.Size.X) / 2f),
83 Engine.Origin = origin;
90 MediaPlayer.Play(_mapSong);
92 _gameTimer = TimeSpan.Zero;
106 _mapSong = FinalBomber.Instance.Content.Load<Song>(
"Audio/Musics/map2");
107 _mapHurrySong = FinalBomber.Instance.Content.Load<Song>(
"Audio/Musics/map1_hurry");
109 CurrentMap.LoadContent();
114 _gameTimer += gameTime.ElapsedGameTime;
121 #region Update entities
124 for (
int i = 0; i < WallList.Count; i++)
126 WallList[i].Update(GameTime);
129 if (!WallList[i].IsAlive)
131 RemoveWall(WallList[i]);
140 for (
int i = 0; i < BombList.Count; i++)
142 BombList[i].Update(GameTime);
145 if (!BombList[i].IsAlive)
147 RemoveBomb(BombList[i]);
155 for (
int i = 0; i < PowerUpList.Count; i++)
157 PowerUpList[i].Update(GameTime);
159 if (!PowerUpList[i].IsAlive)
161 RemovePowerUp(PowerUpList[i]);
165 base.UpdatePowerUps();
170 for (
int i = 0; i < Players.Count; i++)
172 if (Players[i].IsAlive)
174 Players[i].Update(GameTime, CurrentMap, HazardMap);
178 if (!BasePlayerList[i].OnEdge)
180 if (BaseCurrentMap.Board[BasePlayerList[i].CellPosition.X, BasePlayerList[i].CellPosition.Y] is
BasePlayer)
182 RemovePlayer(BasePlayerList[i]);
192 BasePlayerList[i].OnEdge =
true;
197 base.UpdatePlayers();
203 CurrentMap.Draw(gameTime, FinalBomber.Instance.SpriteBatch, camera);
205 foreach (
Wall wall
in WallList)
208 foreach (
PowerUp powerUp
in PowerUpList)
209 powerUp.Draw(gameTime);
211 foreach (
Bomb bomb
in BombList)
214 foreach (
Player player
in Players)
217 player.Draw(gameTime);
221 #region Entity methods
223 #region Player methods
229 base.AddPlayer(player);
234 var player = Players.Find(p => p.Id == playerId);
236 base.DestroyPlayer(player);
241 Players.Remove(player);
243 base.RemovePlayer(player);
252 var wall =
new Wall(position);
265 public void AddWalls(IEnumerable<Point> wallPositions)
267 foreach (var position
in wallPositions)
275 var wall = WallList.Find(w => w.CellPosition == position);
277 base.DestroyWall(wall);
282 WallList.Remove(wall);
284 base.RemoveWall(wall);
300 var bomb = BombList.Find(b => b.CellPosition == position);
302 base.DestroyBomb(bomb);
305 private void RemoveBomb(
Bomb bomb)
307 BombList.Remove(bomb);
309 base.RemoveBomb(bomb);
314 #region Power up methods
318 var powerUp =
new PowerUp(position);
319 PowerUpList.Add(powerUp);
321 base.AddPowerUp(powerUp);
326 var powerUp =
new PowerUp(position, type);
327 PowerUpList.Add(powerUp);
329 base.AddPowerUp(powerUp);
334 powerUp.ApplyEffect(player);
342 var powerUp = PowerUpList.Find(pu => pu.CellPosition == position);
344 base.DestroyPowerUp(powerUp);
347 private void RemovePowerUp(
PowerUp powerUp)
349 PowerUpList.Remove(powerUp);
351 base.RemovePowerUp(powerUp);
override void UpdatePlayers()
void AddPowerUp(PowerUpType type, Point position)
override void PickUpPowerUp(BasePlayer player, BasePowerUp powerUp)
readonly List< PowerUp > PowerUpList
override void UpdateWalls()
override void UpdateBombs()
void AddWalls(IEnumerable< Point > wallPositions)
void Draw(GameTime gameTime, Camera2D camera)
override void UpdatePowerUps()
readonly List< Bomb > BombList
virtual void RemoveWall(Wall wall)
override void AddPowerUp(Point position)
static FinalBomber Instance
void Update(GameTime gameTime)
readonly PlayerCollection Players
override void AddWall(Point position)
This class is used to regroup common behaviors between network and local game logic.
override void DestroyPlayer(int playerId)
void AddPlayer(Player player)
override void DestroyWall(Point position)
void RemovePlayer(Player player)
override void DestroyBomb(Point position)
override void DestroyPowerUp(Point position)
readonly List< Wall > WallList