Пример #1
0
    public bool TryToTurnTetrimino()
    {
        bool doTurn = false;

        eStateOfTetriminoPos state = GetStateOfThisPos(m_currentTetrimino.GetPosition(), m_currentTetrimino.GetNextConfiguration());
        if (state == eStateOfTetriminoPos.INSIDE_BLANK)
        {
            doTurn = true;
        }
        //in case it's OUT_LEFT / RIGHT, let's try to move it so it snaps the wall
        else if (state == eStateOfTetriminoPos.OUT_LEFT)
        {
            Vector2Int futurePos = new Vector2Int(m_currentTetrimino.GetPosition().x + 1, m_currentTetrimino.GetPosition().y);
            eStateOfTetriminoPos newState = GetStateOfThisPos(futurePos, m_currentTetrimino.GetNextConfiguration());

            if (newState == eStateOfTetriminoPos.INSIDE_BLANK)
            {
                m_currentTetrimino.SetPosition(futurePos);
                UpdateGrid();
                doTurn = true;
            }
        }
        else if (state == eStateOfTetriminoPos.OUT_RIGHT)
        {
            Vector2Int futurePos = new Vector2Int(m_currentTetrimino.GetPosition().x - 1, m_currentTetrimino.GetPosition().y);
            eStateOfTetriminoPos newState = GetStateOfThisPos(futurePos, m_currentTetrimino.GetNextConfiguration());

            if (newState == eStateOfTetriminoPos.INSIDE_BLANK)
            {
                m_currentTetrimino.SetPosition(futurePos);
                UpdateGrid();
                doTurn = true;
            }
        }

        if (doTurn)
        {
            m_currentTetrimino.Turn();
            UpdateGrid();
            return true;
        }

        return false;
    }