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);
    }
Exemple #2
0
    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));
        }
    }
Exemple #3
0
    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));
    }
Exemple #4
0
    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));
            }
        }
    }
Exemple #5
0
 public TowerRepaired(MapCoordinate mapCoordinate, TowerIdentifier identifier)
 {
     MapCoordinate = mapCoordinate;
     Identifier    = identifier;
 }
Exemple #6
0
 public EnemyUntargetted(TowerIdentifier towerId, EnemyIdentifier enemyId)
 {
     TowerId = towerId;
     EnemyId = enemyId;
 }
Exemple #7
0
 public TowerParameters(TowerIdentifier towerId, MapCoordinate coordinate, TowerTypes towerType)
 {
     TowerId    = towerId;
     Coordinate = coordinate;
     TowerType  = towerType;
 }
Exemple #8
0
 public Tower(TowerIdentifier identifier, MapCoordinate coordinate, TowerState state)
 {
     Identifier = identifier;
     Coordinate = coordinate;
     State      = state;
 }