protected virtual bool AICanMove(out Tile targetTile) { targetTile = null; if (!_aiCharacter.IsAbleToMove()) { return(false); } var minDistance = float.MaxValue; var availableMoves = _aiCharacter.CalculateAvailableMoves(); foreach (var playerCharacter in _playerCharacters) { var closestTileToPlayer = GetClosestTileToPlayer( playerCharacter.transform.position, availableMoves, out var distance); if (closestTileToPlayer != null && string.IsNullOrEmpty(closestTileToPlayer.CharacterControllerId) && distance < minDistance) { targetTile = closestTileToPlayer; minDistance = distance; } } return(true); }