private void ChooseNextDirection() { bool col = true; while (col == true) { _direction = GetRandomDirection(_direction); List <int> moveGroupIndicesAfterTurn = _direction.FrontMoveGroup(); int collisionCount = 0; for (int i = 0; i < moveGroupIndicesAfterTurn.Count; i++) { CollisionType obstacle = MyCollision.Check(Cubes[moveGroupIndicesAfterTurn[i]], _direction, MyGameManager.MyGrid); if (obstacle == CollisionType.GridEdge || obstacle == CollisionType.Stone) { Debug.Log("Collided with " + obstacle); collisionCount++; } } if (collisionCount == 0) { col = false; } } }
private IEnumerator MineStone() { List <int> moveGroupIndices = _direction.FrontMoveGroup(); List <Direction> minePatternDirection; for (int i = 0; i < moveGroupIndices.Count; i++) { CollisionType obstacle = MyCollision.Check(Cubes[moveGroupIndices[i]], _direction, MyGameManager.MyGrid); if (obstacle == CollisionType.Stone) { int nextX = (int)_direction.DirectionToVector().x + (int)GridTools.GridPosition(Cubes[moveGroupIndices[i]].transform.position).x; int nextY = (int)_direction.DirectionToVector().y + (int)GridTools.GridPosition(Cubes[moveGroupIndices[i]].transform.position).y; if (i == 0) { minePatternDirection = new List <Direction> { _direction.TurnLeft(), _direction.TurnLeft().TurnRight(), _direction.TurnLeft().TurnRight().TurnLeft() }; } else { minePatternDirection = new List <Direction> { _direction.TurnRight(), _direction.TurnRight().TurnLeft(), _direction.TurnRight().TurnLeft().TurnRight() }; } _direction = minePatternDirection[0]; yield return(StartCoroutine(MoveParts(_direction.FrontMoveGroup(), timeToMove))); _direction = minePatternDirection[1]; yield return(StartCoroutine(MoveParts(_direction.FrontMoveGroup(), timeToMove))); yield return(StartCoroutine(MoveParts(_direction.Opposite().FrontMoveGroup(), timeToMove))); yield return(StartCoroutine(MoveParts(_direction.FrontMoveGroup(), timeToMove))); yield return(new WaitForSeconds(2f)); Destroy(MyGameManager.StoneInstances[new Vector2(nextX, nextY)]); MyGameManager.MyGrid.Cells[nextX, nextY] = 0; yield return(StartCoroutine(MoveParts(_direction.Opposite().FrontMoveGroup(), timeToMove))); _direction = minePatternDirection[2]; yield return(StartCoroutine(MoveParts(_direction.Opposite().FrontMoveGroup(), timeToMove))); } } yield return(null); }