private void InitializeTowers(MapEvent.Initialized initialized, TowersAggregate towers) { var mapCoords = Enumerable.Range(0, initialized.MapCells.GetLength(0)).SelectMany(x => Enumerable.Range(0, initialized.MapCells.GetLength(1)).Select(y => new MapCoordinate(x, y))); var initialTowers = mapCoords .Where(coord => initialized.MapCells[coord.X, coord.Y] is TowerCell) .Select(coord => new TowerParameters(TowerIdentifier.Create(), coord, PickRandomTowerType())) .ToArray(); towers.Initialize(initialTowers); }
public void AddEnemy(TowerIdentifier towerId, EnemyIdentifier enemyId) { if (!_enemiesInRange.TryGetValue(towerId, out var enemies)) { enemies = _enemiesInRange[towerId] = new List <EnemyIdentifier>(); } enemies.Add(enemyId); if (!_targettedEnemies.ContainsKey(towerId)) { _targettedEnemies[towerId] = enemyId; Emit(new TowersEvent.EnemyTargetted(towerId, enemyId)); } }
public void Repair(TowerIdentifier identifier) { if (_availableScrap < _repairCosts.Tower) { return; } if (!_towers.ContainsKey(identifier)) { return; } var clickedTower = _towers.First(pair => pair.Key == identifier).Value; if (clickedTower.State == TowerState.Repaired) { return; } _towers[identifier] = new Tower(identifier, clickedTower.Coordinate, TowerState.Repaired); Emit(new TowersEvent.TowerRepaired(clickedTower.Coordinate, clickedTower.Identifier)); }
public void RemoveEnemy(TowerIdentifier towerId, EnemyIdentifier enemyId) { if (!_enemiesInRange.TryGetValue(towerId, out var enemies)) { enemies = _enemiesInRange[towerId] = new List <EnemyIdentifier>(); } enemies.Remove(enemyId); if (_targettedEnemies.TryGetValue(towerId, out var currentTargetId) && enemyId == currentTargetId) { Emit(new TowersEvent.EnemyUntargetted(towerId, enemyId)); _targettedEnemies.Remove(towerId); if (enemies.Any()) { var newTargetId = enemies.First(); _targettedEnemies[towerId] = newTargetId; Emit(new TowersEvent.EnemyTargetted(towerId, newTargetId)); } } }
public TowerRepaired(MapCoordinate mapCoordinate, TowerIdentifier identifier) { MapCoordinate = mapCoordinate; Identifier = identifier; }
public EnemyUntargetted(TowerIdentifier towerId, EnemyIdentifier enemyId) { TowerId = towerId; EnemyId = enemyId; }
public TowerParameters(TowerIdentifier towerId, MapCoordinate coordinate, TowerTypes towerType) { TowerId = towerId; Coordinate = coordinate; TowerType = towerType; }
public Tower(TowerIdentifier identifier, MapCoordinate coordinate, TowerState state) { Identifier = identifier; Coordinate = coordinate; State = state; }