/// <summary>
 /// Determines the proper facing.
 /// </summary>
 /// <param name="tileDirection">Tile direction.</param>
 private void DetermineProperFacing(Unit.TileDirection tileDirection)
 {
     if (tileDirection == Unit.TileDirection.EAST && !_facingRight)
     {
         Flip();
         _facingRight = true;
     }
     else if (tileDirection == Unit.TileDirection.WEST && _facingRight)
     {
         Flip();
         _facingRight = false;
     }
 }
    /// <summary>
    /// Plays the walking animation.
    /// </summary>
    /// <param name="unit">Unit.</param>
    /// <param name="sourceTile">Source tile.</param>
    /// <param name="targetTile">Target tile.</param>
    private void PlayWalkingAnimation(Unit unit, Vector3 sourceTile, Vector3 targetTile)
    {
        // Only run if there is an animation controller
        if (unit.GetAnimationController())
        {
            // Get tile direction
            Unit.TileDirection tileDirection = unit.GetDirectionToTarget(
                TileMapUtil.WorldCenteredToTileMap(sourceTile, tileMap.TileSize),
                TileMapUtil.WorldCenteredToTileMap(targetTile, tileMap.TileSize)
                );

            unit.FacedDirection = tileDirection;
            unit.GetAnimationController().PlayWalkingAnimation(unit);
        }
    }
    /// <summary>
    /// Plays the attack animations.
    /// </summary>
    /// <returns>The attack animations.</returns>
    /// <param name="attacker">Attacker.</param>
    /// <param name="direction">Direction.</param>
    protected IEnumerator PlayAttackAnimations(Unit attacker, Vector3 direction)
    {
        Ability.AbilityType abilityType = attacker.Action.Ability.Type;
        if (abilityType == Ability.AbilityType.ATTACK || attacker.Action.Ability.Id == AbilityConstants.MEASURED_STRIKE)
        {
            //determine which way to swing, dependent on the direction the enemy is
            Unit.TileDirection      facing = attacker.GetDirectionToTarget(direction);
            UnitAnimationController animationController = attacker.GetAnimationController();
            switch (facing)
            {
            case Unit.TileDirection.NORTH:
                animationController.AttackNorth();
                break;

            case Unit.TileDirection.EAST:
                animationController.AttackEast();
                break;

            case Unit.TileDirection.SOUTH:
                animationController.AttackSouth();
                break;

            case Unit.TileDirection.WEST:
                animationController.AttackWest();
                break;
            }
        }
        else if (attacker.Action.Ability.Id == AbilityConstants.WHIRLWIND_SLASH)
        {
            UnitAnimationController animationController = attacker.GetAnimationController();
            animationController.WhirlwindSlash();
        }
        else if (attacker.Action.Ability.Id == AbilityConstants.LEAPING_SLICE)
        {
            UnitAnimationController animationController = attacker.GetAnimationController();
            animationController.LeapingSlice();
        }

        yield return(null);
    }
    /// <summary>
    /// Plays the walking animation.
    /// </summary>
    /// <param name="unit">Unit.</param>
    public void PlayWalkingAnimation(Unit unit)
    {
        Unit.TileDirection tileDirection = unit.FacedDirection;
        switch (tileDirection)
        {
        case Unit.TileDirection.NORTH:
            unit.GetAnimationController().WalkNorth();
            break;

        case Unit.TileDirection.EAST:
            unit.GetAnimationController().WalkEast();
            break;

        case Unit.TileDirection.WEST:
            unit.GetAnimationController().WalkWest();
            break;

        case Unit.TileDirection.SOUTH:
            unit.GetAnimationController().WalkSouth();
            break;
        }
    }