//returns removed tiles public ISet <Tile> UpdateTrackedTiles() { var trackedTiles = new HashSet <Tile>(); foreach (Unit unit in TrackedUnits) { var moveableTiles = BattleMovementUtils.FindViableMoves(unit); var attackableTiles = BattleMovementUtils.FindAttackedTiles(moveableTiles, unit.GetWeaponsRanges()); trackedTiles.UnionWith(attackableTiles); } TrackedTiles.ExceptWith(trackedTiles); var diff = new HashSet <Tile>(TrackedTiles); TrackedTiles = trackedTiles; return(diff); }
//disables overlays then if unit occupies the tile, calculates move overlays for it public void OnNewTile(Tile tile) { CurrentUnit = null; _overlaysManager.DisableTemporaryOverlays(); if (tile.IsOccupied()) { CurrentUnit = tile.Occupier; if (_battleTurnManager.IsInActiveGroup(CurrentUnit)) { UnitMoveTiles = BattleMovementUtils.FindViableMoves(CurrentUnit); AttackedTiles = BattleMovementUtils.FindAttackedTiles(UnitMoveTiles, CurrentUnit.GetWeaponsRanges()); _overlaysManager.EnablePlayerMoveOverlays(UnitMoveTiles); _overlaysManager.EnableAttackedOverlays(AttackedTiles); } else { EnemyTiles = BattleMovementUtils.FindViableMoves(CurrentUnit); EnemyTiles.UnionWith(BattleMovementUtils.FindAttackedTiles(EnemyTiles, CurrentUnit.GetWeaponsRanges())); _overlaysManager.EnableEnemyOverlays(EnemyTiles); } } }