Skip to content
Snippets Groups Projects
Commit d391e647 authored by Sárközi Gergely János's avatar Sárközi Gergely János Committed by Horváth István
Browse files

Validate tower doesn't block barrack path (closes #60)

parent 38c9f0bf
No related branches found
No related tags found
1 merge request!23Validate tower doesn't block barrack path (closes #60)
......@@ -17,10 +17,15 @@ public class GameTeam {
public Castle Castle { get; }
public IEnumerable<Tower> Towers => Overview.World.GetTileObjectsOfType<Tower>()
.Where(t => t.OwnerColor == TeamColor);
public IEnumerable<Unit> Units => Overview.World.Units
.Where(t => t.Owner == this);
public int Money { get; private set; } = 500; //TODO don't use a hardcoded value
public int PresentTowerCount => Overview.World.GetTileObjectsOfType<Tower>()
.Count(tower => tower.OwnerColor == TeamColor);
public int PresentTowerCount => Towers.Count();
public int MoneySpent { get; private set; }
......
......@@ -28,11 +28,14 @@ public class ManageTowerHandler : BaseHandler {
ICollection<TilePosition> blockedTiles = new List<TilePosition>();
blockedTiles.Add(command.Position);
foreach (Unit unit in world.Units) {
TilePosition from = unit.TilePosition;
TilePosition to = overview.GetEnemyTeam(unit.Owner).Castle.Position;
if (!world.Navigation.IsPositionReachable(from, to, blockedTiles)) {
return BuildTowerCommand.CommandResult.LeavesNoPathForUnit;
foreach (GameTeam team in overview.Teams) {
TilePosition to = overview.GetEnemyTeam(team).Castle.Position;
foreach (TilePosition from in team.Barracks.Select(b => b.Position)
.Concat(team.Units.Select(u => u.TilePosition))) {
if (!world.Navigation.IsPositionReachable(from, to, blockedTiles)) {
return BuildTowerCommand.CommandResult.LeavesNoPathForUnit;
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment