Beispiel #1
0
    public void Update()
    {
        if (Input.GetAxisRaw("Horizontal" + m_SuffixName) > 0 && m_Direction != SnakeHead.Direction.LEFT)
        {
            m_Direction = SnakeHead.Direction.RIGHT;
        }
        else if (Input.GetAxisRaw("Horizontal" + m_SuffixName) < 0 && m_Direction != SnakeHead.Direction.RIGHT)
        {
            m_Direction = SnakeHead.Direction.LEFT;
        }
        else if (Input.GetAxisRaw("Vertical" + m_SuffixName) > 0 && m_Direction != SnakeHead.Direction.DOWN)
        {
            m_Direction = SnakeHead.Direction.UP;
        }
        else if (Input.GetAxisRaw("Vertical" + m_SuffixName) < 0 && m_Direction != SnakeHead.Direction.UP)
        {
            m_Direction = SnakeHead.Direction.DOWN;
        }

        if (Input.GetAxisRaw("EatAbility" + m_SuffixName) > 0)
        {
            UseFirstAbility();
        }

        if (Input.GetAxisRaw("ShieldAbility" + m_SuffixName) > 0)
        {
            UseSecondAbility();
        }

        if (Input.GetAxisRaw("FreezeAbility" + m_SuffixName) > 0)
        {
            UseThirdAbility();
        }
    }
    public override Vector2Int GetSpawningPosition()
    {
        List <CustomTile> _tiles = GameData.Instance.m_TileManager.GetEmptyTiles();

        if (_tiles.Count == 0)
        {
            return(Vector2Int.zero);
        }
        if (AIManager.Instance.m_CurrentStateIndex <= 1)
        {
            return(GameData.Instance.m_TileManager.GetPosition(_tiles[Random.Range(0, _tiles.Count)]));
        }
        else
        {
            SnakeHead.Direction _dir            = GameData.Instance.m_Players[0].m_Controller.m_Direction;
            Vector2Int          _playerPosition = GameData.Instance.m_Players[0].m_TilePosition;
            List <Vector2Int>   _availablePosition;
            switch (_dir)
            {
            case SnakeHead.Direction.UP:
                _availablePosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => p.y > _playerPosition.y).ToList();
                break;

            case SnakeHead.Direction.RIGHT:
                _availablePosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => p.x > _playerPosition.x).ToList();
                break;

            case SnakeHead.Direction.DOWN:
                _availablePosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => p.y < _playerPosition.y).ToList();
                break;

            case SnakeHead.Direction.LEFT:
                _availablePosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => p.x < _playerPosition.x).ToList();
                break;

            case SnakeHead.Direction.NONE:
                _availablePosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).ToList();
                break;

            default:
                _availablePosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).ToList();
                break;
            }
            int _randomIndex = (int)Random.Range(0, _availablePosition.Count);
            return(_availablePosition[_randomIndex]);
        }
    }
    public override Vector2Int GetSpawningPosition()
    {
        List <CustomTile> _tiles = GameData.Instance.m_TileManager.GetEmptyTiles();

        if (_tiles.Count == 0)
        {
            return(Vector2Int.zero);
        }
        List <Vector2Int> _availablesPosition;
        Vector2Int        _playerPosition = GameData.Instance.m_Players[0].m_TilePosition;

        _availablesPosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).ToList();

        if (AIManager.Instance.m_CurrentStateIndex == 0)
        {
            _availablesPosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => (p.x == 0 || p.x == GameData.Instance.m_TileManager.GetRestrictedMapSize().x)).ToList();
        }
        else if (AIManager.Instance.m_CurrentStateIndex == 1)
        {
            _availablesPosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => p.y == _playerPosition.y && (p.x == 0 || p.x == GameData.Instance.m_TileManager.GetRestrictedMapSize().x)).ToList();
        }
        else if (AIManager.Instance.m_CurrentStateIndex > 1)
        {
            SnakeHead.Direction _dir = GameData.Instance.m_Players[0].m_Controller.m_Direction;
            if (_dir == SnakeHead.Direction.LEFT || _dir == SnakeHead.Direction.RIGHT)
            {
                _availablesPosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => p.y == _playerPosition.y && (p.x == 0 || p.x == GameData.Instance.m_TileManager.GetRestrictedMapSize().x)).ToList();
            }
            else if (_dir == SnakeHead.Direction.UP || _dir == SnakeHead.Direction.DOWN)
            {
                _availablesPosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => p.x == _playerPosition.y && (p.y == 0 || p.y == GameData.Instance.m_TileManager.GetRestrictedMapSize().x)).ToList();
            }
            else
            {
                _availablesPosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => p.x == _playerPosition.y && p.y == _playerPosition.y).ToList();
            }
        }
        else
        {
            _availablesPosition = _tiles.Select(t => GameData.Instance.m_TileManager.GetPosition(t)).Where(p => p.x == 0 || p.x == GameData.Instance.m_TileManager.GetRestrictedMapSize().x || p.y == 0 || p.y == GameData.Instance.m_TileManager.GetRestrictedMapSize().y).ToList();
        }

        int _randomIndex = (int)Random.Range(0, _availablesPosition.Count);

        return(_availablesPosition[_randomIndex]);
    }
 public override Quaternion GetBestOrientation()
 {
     if (AIManager.Instance.m_CurrentStateIndex == 0)
     {
         return(Quaternion.Euler(0, 90 * (int)UnityEngine.Random.Range(0, 3), 0));
     }
     if (AIManager.Instance.m_CurrentStateIndex >= 1)
     {
         SnakeHead.Direction _dir = GameData.Instance.m_Players[0].m_Controller.m_Direction;
         if (_dir == SnakeHead.Direction.UP || _dir == SnakeHead.Direction.DOWN)
         {
             return(Quaternion.identity);
         }
         else
         {
             return(Quaternion.Euler(0, 90, 0));
         }
     }
     else
     {
         return(Quaternion.identity);
     }
 }