2 using System.Collections.Generic;
5 using System.Threading.Tasks;
8 using FBLibrary.Core.BaseEntities;
9 using FBServer.Core.Entities;
10 using FBServer.Core.WorldEngine;
12 using Microsoft.Xna.Framework;
14 namespace FBServer.Core
19 private readonly List<Bomb> _bombList;
20 private readonly List<PowerUp> _powerUpList;
21 private readonly List<Wall> _wallList;
29 get {
return BaseCurrentMap; }
32 public List<Wall> WallList
34 get {
return _wallList; }
37 public List<Bomb> BombList
39 get {
return _bombList; }
42 public List<PowerUp> PowerUpList
44 get {
return _powerUpList; }
51 _wallList =
new List<Wall>();
52 _powerUpList =
new List<PowerUp>();
53 _bombList =
new List<Bomb>();
55 BaseCurrentMap =
new Map();
66 GenerateRandomWalls();
76 for (
int i = 0; i < _wallList.Count; i++)
79 if (!_wallList[i].IsAlive)
81 RemoveWall(_wallList[i]);
90 for (
int i = 0; i < _bombList.Count; i++)
92 _bombList[i].Update();
95 if (!_bombList[i].IsAlive)
97 RemoveBomb(_bombList[i]);
106 for (
int i = 0; i < _powerUpList.Count; i++)
108 if (!_powerUpList[i].IsAlive)
110 RemovePowerUp(_powerUpList[i]);
114 base.UpdatePowerUps();
119 var players = GameSettings.GameServer.Clients.GetPlayers();
121 for (
int i = 0; i < players.Count; i++)
123 if (!players[i].IsAlive)
125 if (!BasePlayerList[i].OnEdge)
127 if (BaseCurrentMap.Board[BasePlayerList[i].CellPosition.X, BasePlayerList[i].CellPosition.Y] is
BasePlayer)
129 RemovePlayer(BasePlayerList[i]);
136 base.UpdatePlayers();
141 base.LoadMap(mapName);
144 GenerateRandomWalls(ServerSettings.WallPercentage);
146 CurrentMap.DisplayBoard();
149 #region Player methods
153 player.Name = client.Username;
154 client.Player = player;
156 base.AddPlayer(player);
161 var player = GameSettings.GameServer.Clients.GetPlayerFromId(playerId);
163 base.DestroyPlayer(player);
169 if (p.Id == player.
Id)
170 BaseCurrentMap.Board[player.CellPosition.X, player.CellPosition.Y] = null;
172 client.Player = null;
174 base.RemovePlayer(player);
183 var wall =
new Wall(position);
199 var wall = _wallList.Find(w => w.CellPosition == position);
201 base.DestroyWall(wall);
204 Program.Log.Error(
"Wall at " + position +
" doesn't exist !");
206 Program.Log.Info(
"Wall at " + position +
" has been removed.");
209 private void RemoveWall(
Wall wall)
211 if (GameConfiguration.Random.Next(0, 100) < MathHelper.Clamp(GameConfiguration.PowerUpPercentage, 0, 100))
216 _wallList.Remove(wall);
218 base.RemoveWall(wall);
220 Program.Log.Info(
"Delete wall at " + wall.CellPosition);
236 var bomb = _bombList.Find(b => b.CellPosition == position);
238 base.DestroyBomb(bomb);
241 Program.Log.Error(
"Bomb at " + position +
"doesn't exist !");
243 Program.Log.Info(
"Bomb exploded at " + position);
246 private void RemoveBomb(
Bomb bomb)
248 _bombList.Remove(bomb);
250 base.RemoveBomb(bomb);
252 Program.Log.Info(
"Bomb at " + bomb.CellPosition +
" has been removed.");
257 #region Power up methods
261 var powerUp =
new PowerUp(position);
262 _powerUpList.Add(powerUp);
264 GameSettings.GameServer.SendPowerUpDrop(powerUp);
266 base.AddPowerUp(powerUp);
271 powerUp.ApplyEffect(player);
274 Program.Log.Info(
"Power up at " + powerUp.CellPosition +
" has been taken by player " + player.Name +
".");
281 var powerUp = _powerUpList.Find(pu => pu.CellPosition == position);
283 base.DestroyPowerUp(powerUp);
286 Program.Log.Error(
"Power up at " + position +
"doesn't exist !");
288 Program.Log.Info(
"Power up at " + position +
" has been destroyed.");
291 private void RemovePowerUp(
PowerUp powerUp)
293 _powerUpList.Remove(powerUp);
295 base.RemovePowerUp(powerUp);
297 Program.Log.Info(
"Power up at " + powerUp.CellPosition +
" has been removed.");
override void UpdatePowerUps()
override void DestroyWall(Point position)
override void DestroyPowerUp(Point position)
void RemovePlayer(Client client, Player player)
override void PickUpPowerUp(BasePlayer player, BasePowerUp powerUp)
override void LoadMap(string mapName)
override void UpdatePlayers()
void AddPlayer(Client client, Player player)
override void UpdateWalls()
override void AddPowerUp(Point position)
override void DestroyPlayer(int playerId)
override void AddWall(Point position)
override void UpdateBombs()
override void DestroyBomb(Point position)