Ejemplo n.º 1
0
    //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);
    }
Ejemplo n.º 2
0
 private void FinishUnitMove()
 {
     BattleMovementUtils.HidePath();
     BattleMovementUtils.ResetPath();
     _battleManager.OverlaysManager.DisableTemporaryOverlays();
     _battleManager.BattleTurnManager.DeactivateUnit(_cursor.SelectedUnit);
     _cursor.DeselectUnit();
 }
Ejemplo n.º 3
0
    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();
    }
Ejemplo n.º 4
0
    //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);
    }
Ejemplo n.º 5
0
  // 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;
    }

  }
Ejemplo n.º 6
0
    //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);
            }
        }
    }
Ejemplo n.º 7
0
    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();
                }
            }
        }
    }