Final-Bomber  0.1
Bomberman/Dynablaster remake in C# using XNA.
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Pages
GameManager.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using FBLibrary;
7 using FBLibrary.Core;
8 using FBLibrary.Core.BaseEntities;
9 using FBServer.Core.Entities;
10 using FBServer.Core.WorldEngine;
11 using FBServer.Host;
12 using Microsoft.Xna.Framework;
13 
14 namespace FBServer.Core
15 {
17  {
18  // Collections
19  private readonly List<Bomb> _bombList;
20  private readonly List<PowerUp> _powerUpList;
21  private readonly List<Wall> _wallList;
22 
23  // Map
24 
25  #region Properties
26 
27  public BaseMap CurrentMap
28  {
29  get { return BaseCurrentMap; }
30  }
31 
32  public List<Wall> WallList
33  {
34  get { return _wallList; }
35  }
36 
37  public List<Bomb> BombList
38  {
39  get { return _bombList; }
40  }
41 
42  public List<PowerUp> PowerUpList
43  {
44  get { return _powerUpList; }
45  }
46 
47  #endregion
48 
49  public GameManager()
50  {
51  _wallList = new List<Wall>();
52  _powerUpList = new List<PowerUp>();
53  _bombList = new List<Bomb>();
54 
55  BaseCurrentMap = new Map();
56  }
57 
58  public override void Reset()
59  {
60  base.Reset();
61 
62  _wallList.Clear();
63  _powerUpList.Clear();
64  _bombList.Clear();
65 
66  GenerateRandomWalls();
67  }
68 
69  public override void Update()
70  {
71  base.Update();
72  }
73 
74  protected override void UpdateWalls()
75  {
76  for (int i = 0; i < _wallList.Count; i++)
77  {
78  // We clean the obsolete elements
79  if (!_wallList[i].IsAlive)
80  {
81  RemoveWall(_wallList[i]);
82  }
83  }
84 
85  base.UpdateWalls();
86  }
87 
88  protected override void UpdateBombs()
89  {
90  for (int i = 0; i < _bombList.Count; i++)
91  {
92  _bombList[i].Update();
93 
94  // Do we delete the bomb
95  if (!_bombList[i].IsAlive)
96  {
97  RemoveBomb(_bombList[i]);
98  }
99  }
100 
101  base.UpdateBombs();
102  }
103 
104  protected override void UpdatePowerUps()
105  {
106  for (int i = 0; i < _powerUpList.Count; i++)
107  {
108  if (!_powerUpList[i].IsAlive)
109  {
110  RemovePowerUp(_powerUpList[i]);
111  }
112  }
113 
114  base.UpdatePowerUps();
115  }
116 
117  protected override void UpdatePlayers()
118  {
119  var players = GameSettings.GameServer.Clients.GetPlayers();
120 
121  for (int i = 0; i < players.Count; i++)
122  {
123  if (!players[i].IsAlive)
124  {
125  if (!BasePlayerList[i].OnEdge)
126  {
127  if (BaseCurrentMap.Board[BasePlayerList[i].CellPosition.X, BasePlayerList[i].CellPosition.Y] is BasePlayer)
128  {
129  RemovePlayer(BasePlayerList[i]);
130  }
131  }
132  }
133 
134  }
135 
136  base.UpdatePlayers();
137  }
138 
139  public override void LoadMap(string mapName)
140  {
141  base.LoadMap(mapName);
142 
143  // We generate wall
144  GenerateRandomWalls(ServerSettings.WallPercentage);
145 
146  CurrentMap.DisplayBoard();
147  }
148 
149  #region Player methods
150 
151  public void AddPlayer(Client client, Player player)
152  {
153  player.Name = client.Username;
154  client.Player = player;
155 
156  base.AddPlayer(player);
157  }
158 
159  protected override void DestroyPlayer(int playerId)
160  {
161  var player = GameSettings.GameServer.Clients.GetPlayerFromId(playerId);
162 
163  base.DestroyPlayer(player);
164  }
165 
166  public void RemovePlayer(Client client, Player player)
167  {
168  var p = (BasePlayer)BaseCurrentMap.Board[player.CellPosition.X, player.CellPosition.Y];
169  if (p.Id == player.Id)
170  BaseCurrentMap.Board[player.CellPosition.X, player.CellPosition.Y] = null;
171 
172  client.Player = null;
173 
174  base.RemovePlayer(player);
175  }
176 
177  #endregion
178 
179  #region Wall methods
180 
181  public override void AddWall(Point position)
182  {
183  var wall = new Wall(position);
184  _wallList.Add(wall);
185 
186  base.AddWall(wall);
187  }
188 
189  public void AddWall(Wall wall)
190  {
191  _wallList.Add(wall);
192 
193  base.AddWall(wall);
194  }
195 
196 
197  protected override void DestroyWall(Point position)
198  {
199  var wall = _wallList.Find(w => w.CellPosition == position);
200 
201  base.DestroyWall(wall);
202 
203  if (wall == null)
204  Program.Log.Error("Wall at " + position + " doesn't exist !");
205  else
206  Program.Log.Info("Wall at " + position + " has been removed.");
207  }
208 
209  private void RemoveWall(Wall wall)
210  {
211  if (GameConfiguration.Random.Next(0, 100) < MathHelper.Clamp(GameConfiguration.PowerUpPercentage, 0, 100))
212  {
213  AddPowerUp(wall.CellPosition);
214  }
215 
216  _wallList.Remove(wall);
217 
218  base.RemoveWall(wall);
219 
220  Program.Log.Info("Delete wall at " + wall.CellPosition);
221  }
222 
223  #endregion
224 
225  #region Bomb methods
226 
227  public void AddBomb(Bomb bomb)
228  {
229  _bombList.Add(bomb);
230 
231  base.AddBomb(bomb);
232  }
233 
234  protected override void DestroyBomb(Point position)
235  {
236  var bomb = _bombList.Find(b => b.CellPosition == position);
237 
238  base.DestroyBomb(bomb);
239 
240  if (bomb == null)
241  Program.Log.Error("Bomb at " + position + "doesn't exist !");
242  else
243  Program.Log.Info("Bomb exploded at " + position);
244  }
245 
246  private void RemoveBomb(Bomb bomb)
247  {
248  _bombList.Remove(bomb);
249 
250  base.RemoveBomb(bomb);
251 
252  Program.Log.Info("Bomb at " + bomb.CellPosition + " has been removed.");
253  }
254 
255  #endregion
256 
257  #region Power up methods
258 
259  public override void AddPowerUp(Point position)
260  {
261  var powerUp = new PowerUp(position);
262  _powerUpList.Add(powerUp);
263 
264  GameSettings.GameServer.SendPowerUpDrop(powerUp);
265 
266  base.AddPowerUp(powerUp);
267  }
268 
269  protected override void PickUpPowerUp(BasePlayer player, BasePowerUp powerUp)
270  {
271  powerUp.ApplyEffect(player);
272  powerUp.PickUp();
273 
274  Program.Log.Info("Power up at " + powerUp.CellPosition + " has been taken by player " + player.Name + ".");
275 
276  powerUp.Remove();
277  }
278 
279  protected override void DestroyPowerUp(Point position)
280  {
281  var powerUp = _powerUpList.Find(pu => pu.CellPosition == position);
282 
283  base.DestroyPowerUp(powerUp);
284 
285  if (powerUp == null)
286  Program.Log.Error("Power up at " + position + "doesn't exist !");
287  else
288  Program.Log.Info("Power up at " + position + " has been destroyed.");
289  }
290 
291  private void RemovePowerUp(PowerUp powerUp)
292  {
293  _powerUpList.Remove(powerUp);
294 
295  base.RemovePowerUp(powerUp);
296 
297  Program.Log.Info("Power up at " + powerUp.CellPosition + " has been removed.");
298  }
299 
300  #endregion
301  }
302 }
override void UpdatePowerUps()
Definition: GameManager.cs:104
override void DestroyWall(Point position)
Definition: GameManager.cs:197
override void DestroyPowerUp(Point position)
Definition: GameManager.cs:279
override void Reset()
Definition: GameManager.cs:58
void AddBomb(Bomb bomb)
Definition: GameManager.cs:227
void RemovePlayer(Client client, Player player)
Definition: GameManager.cs:166
override void PickUpPowerUp(BasePlayer player, BasePowerUp powerUp)
Definition: GameManager.cs:269
override void Update()
Definition: GameManager.cs:69
override void LoadMap(string mapName)
Definition: GameManager.cs:139
override void UpdatePlayers()
Definition: GameManager.cs:117
void AddPlayer(Client client, Player player)
Definition: GameManager.cs:151
override void UpdateWalls()
Definition: GameManager.cs:74
override void AddPowerUp(Point position)
Definition: GameManager.cs:259
override void DestroyPlayer(int playerId)
Definition: GameManager.cs:159
override void AddWall(Point position)
Definition: GameManager.cs:181
void AddWall(Wall wall)
Definition: GameManager.cs:189
override void UpdateBombs()
Definition: GameManager.cs:88
override void DestroyBomb(Point position)
Definition: GameManager.cs:234