public NotifyPathAggregateWhenCellsAreOccupied(MapAggregate map, TowersAggregate tower, WallsAggregate wall, [NotNull] PathFinderAggregate pathFinder) { _pathFinder = pathFinder ?? throw new ArgumentNullException(nameof(pathFinder)); map.Events.OfType <MapEvent, MapEvent.Initialized>().Subscribe(HandleMapInitialized); tower.Events.OfType <TowersEvent, TowersEvent.TowerRepaired>().Subscribe(HandleTowerRepaired); wall.Events.OfType <WallsEvent, WallsEvent.WallRepaired>().Subscribe(HandleWallRepaired); }
public UpdateTowersAndWallsAvailableScrap(TowersAggregate towers, WallsAggregate walls, ScrapWalletAggregate scrapWallet) { scrapWallet.Events .OfType <ScrapWalletEvent, ScrapWalletEvent.AvailableScrapChanged>() .Subscribe(changed => { towers.UpdateAvailableScrap(changed.CurrentAmount); walls.UpdateAvailableScrap(changed.CurrentAmount); }); }
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 RepairTowersWhenMapCellClicked(MapAggregate map, TowersAggregate Towers) { map.Events .OfType <MapEvent, MapEvent.MapCellClicked>() .Subscribe(clicked => RepairTowers(clicked, Towers)); }
private void RepairTowers(MapEvent.MapCellClicked clicked, TowersAggregate Towers) { Towers.Repair(clicked.Coordinate); }
public DecreaseScrapWhenTowerRepaired(TowersAggregate towers, ScrapWalletAggregate scrapWallet, RepairCosts repairCosts) { towers.Events .OfType <TowersEvent, TowersEvent.TowerRepaired>() .Subscribe(_ => scrapWallet.Decrease(repairCosts.Tower)); }
public InitializeTowersWhenMapInitialized(MapAggregate map, TowersAggregate towers) { map.Events .OfType <MapEvent, MapEvent.Initialized>() .Subscribe(initialized => InitializeTowers(initialized, towers)); }