//returns enemy units, current unit can attack public ICollection <Unit> GetAttackedUnits() { if (CurrentUnit == null) { UnityEngine.Debug.LogError("attacking unit is not assigned"); return(null); } HashSet <Unit> attackedUnits = new HashSet <Unit>(); int group = CurrentUnit.Group; ISet <Tile> attackedTiles = BattleMovementUtils.FindAttackedTiles (new HashSet <Tile> { CurrentUnit.OccupiedTile }, CurrentUnit.GetWeaponsRanges()); foreach (Tile tile in attackedTiles) { if (tile.IsOccupied()) { int enemyGroup = tile.Occupier.Group; if (group != enemyGroup && !_battleTurnManager.InAlliance(group, enemyGroup)) { attackedUnits.Add(tile.Occupier); } } } return(attackedUnits); }
private void FinishUnitMove() { BattleMovementUtils.HidePath(); BattleMovementUtils.ResetPath(); _battleManager.OverlaysManager.DisableTemporaryOverlays(); _battleManager.BattleTurnManager.DeactivateUnit(_cursor.SelectedUnit); _cursor.DeselectUnit(); }
public void ExecuteUnitMove() { _cursor.Hide(); SetCameraOn(_cursor.SelectedUnit.gameObject); BattleMovementUtils.HidePath(); _battleManager.OverlaysManager.DisableTemporaryOverlays(); _cursor.SelectedUnit.StartMoveCoroutine(new LinkedList <Tile>(BattleMovementUtils.Path)); WaitForMovingUnit(_cursor.SelectedUnit); BattleMovementUtils.ResetPath(); }
//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); }
// Update is called once per frame void Update() { MoveCursor(); if (_hoverOverNewTile) { if (UnitIsSelected) { if (_battleManager.BattleMovement.UnitMoveTiles.Contains(HoveredTile)) { BattleMovementUtils.HidePath(); BattleMovementUtils.AddTile(HoveredTile, SelectedUnit); BattleMovementUtils.ShowPath(); } } else { _battleManager.BattleMovement.OnNewTile(HoveredTile); } _hoverOverNewTile = false; } }
//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); } } }
public void HandleInput() { if (_inputManager.ZoomIn) { _cameraMover.ZoomIn(); } if (_inputManager.ZoomOut) { _cameraMover.ZoomOut(); } if (_inputManager.RotateLeft) { _cameraMover.RotateLeft(); } if (_inputManager.RotateRight) { _cameraMover.RotateRight(); } if (_inputManager.SelectDown) { if (_cursor.UnitIsSelected) { if (_cursor.IsInRangeOfSelectedUnit()) { _inputManager.InputState = EInputState.ActionMenu; _cursor.enabled = false; var targetTile = BattleMovementUtils.GetDestinationTile(); _cursor.SelectedUnit.Move(targetTile); showUnitActions(); } } else if (_cursor.HoveredTile.IsOccupied()) { var hoveredUnit = _cursor.HoveredTile.Occupier; bool isUnitFromTheACtiveGroup = hoveredUnit.Group == _battleManager.BattleTurnManager.ActiveGroup; if (isUnitFromTheACtiveGroup) { _cursor.SelectUnit(); //_battleManager.BattleMovement.OnNewTile(_cursor.HoveredTile); } else { _overlaysManager.DisableTemporaryOverlays(); _battleMovement.ClearUnitTiles(); _battleMovement.TrackEnemyRange(hoveredUnit); _battleMovement.UpdateTrackedTiles(); _overlaysManager.UpdateTrackedOverlays(); } } else { _inputManager.InputState = EInputState.GeneralMenu; _cursor.enabled = false; showGeneralActions(); } } else if (_inputManager.CancelDown) { if (_cursor.UnitIsSelected) { BattleMovementUtils.HidePath(); BattleMovementUtils.ResetPath(); if (_cursor.HoveredTile != _cursor.SelectedUnit.OccupiedTile) { _battleManager.OverlaysManager.DisableTemporaryOverlays(); } _cursor.DeselectUnit(); } else if (_cursor.HoveredTile.IsOccupied()) { var hoveredUnit = _cursor.HoveredTile.Occupier; bool isUnitFromTheACtiveGroup = hoveredUnit.Group == _battleManager.BattleTurnManager.ActiveGroup; if (!isUnitFromTheACtiveGroup) { _battleMovement.UntrackEnemyRange(hoveredUnit); _battleMovement.UpdateTrackedTiles(); _overlaysManager.UpdateTrackedOverlays(); } } } }