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; }