private QMazeEngine createChildMaze(QRectInt rect, QMazeEngine mazeEngine) { mazeEngine.setMazeWidth(rect.width); mazeEngine.setMazeHeight(rect.height); mazeEngine.transform.position = new Vector3(0, 0, 0); mazeEngine.transform.position = mazeEngine.transform.TransformPoint(new Vector3(rect.x, -3, -rect.y)); List <QVector2IntDir> finishPositionList = new List <QVector2IntDir>(); finishPositionList.Add(new QVector2IntDir(rect.width / 2, rect.height / 2, QMazeOutputDirection.NotSpecified)); mazeEngine.setFinishPositionList(finishPositionList); List <QVector2IntDir> exitPositionList = new List <QVector2IntDir>(); QVector2IntDir mazeExit = getExitForRect(rect); exitPositionList.Add(mazeExit); mazeEngine.setExitPositionList(exitPositionList); List <QVector2IntDir> baseMazeEngineExitPositionlist = baseMazeEngine.getExitPositionList(); baseMazeEngineExitPositionlist.Add(new QVector2IntDir(rect.x + mazeExit.x + QMazeOutput.dx[mazeExit.direction], rect.y + mazeExit.y + QMazeOutput.dy[mazeExit.direction], QMazeOutput.opposite[mazeExit.direction])); baseMazeEngine.setExitPositionList(baseMazeEngineExitPositionlist); return(mazeEngine); }
public void baseMazeGenerateCompleteHandler(QMazeEngine mazeEngine) { finishTransform.parent = null; prevMazeEngine.gameObject.GetComponent <QMazeMover>().show(0.0f); nextMazeEngine.gameObject.GetComponent <QMazeMover>().show(1.0f); baseMazeEngine.GetComponent <QMazeMover>().show(2.0f); StartCoroutine(startAnimation()); }
private void generateNextLevel() { baseMazeEngine.destroyImmediateMazeGeometry(); List <QVector2IntDir> exitPositionList = baseMazeEngine.getExitPositionList(); if (exitPositionList.Count > 1) { exitPositionList.RemoveAt(0); baseMazeEngine.setExitPositionList(exitPositionList); } List <QVector2Int> obstaclePositionList = new List <QVector2Int>(); if (prevMazeEngine == null) { prevRect = new QRectInt(QMath.getRandom(1, baseMazeEngine.getMazeWidth() - CHILD_MAZE_SIZE - 2), QMath.getRandom(1, baseMazeEngine.getMazeHeight() - CHILD_MAZE_SIZE - 2), CHILD_MAZE_SIZE, CHILD_MAZE_SIZE); obstaclePositionList.AddRange(rectToList(prevRect)); prevMazeEngine = createChildMaze(prevRect, childMazeEngine_1); prevMazeEngine.generateMaze(); player.setPosition(prevMazeEngine.transform.TransformPoint(prevMazeEngine.getFinishPositionList()[0].toVector3())); } else { prevMazeEngine.destroyImmediateMazeGeometry(); prevRect = nextRect; prevMazeEngine = nextMazeEngine; obstaclePositionList.AddRange(rectToList(prevRect)); } nextRect = new QRectInt(QMath.getRandom(1, baseMazeEngine.getMazeWidth() - CHILD_MAZE_SIZE - 2), QMath.getRandom(1, baseMazeEngine.getMazeHeight() - CHILD_MAZE_SIZE - 2), CHILD_MAZE_SIZE, CHILD_MAZE_SIZE); while (isRectNear(prevRect, nextRect)) { nextRect.x = QMath.getRandom(1, baseMazeEngine.getMazeWidth() - CHILD_MAZE_SIZE - 2); nextRect.y = QMath.getRandom(1, baseMazeEngine.getMazeHeight() - CHILD_MAZE_SIZE - 2); } obstaclePositionList.AddRange(rectToList(nextRect)); baseMazeEngine.setObstaclePositionList(obstaclePositionList); nextMazeEngine = createChildMaze(nextRect, prevMazeEngine == childMazeEngine_1 ? childMazeEngine_2 : childMazeEngine_1); nextMazeEngine.generateMaze(); List <QVector2IntDir> nextMazeEngineFinishPositionList = nextMazeEngine.getFinishPositionList(); finishTransform.parent = nextMazeEngine.getMazeData()[nextMazeEngineFinishPositionList[0].x][nextMazeEngineFinishPositionList[0].y].geometry.transform; finishTransform.localPosition = new Vector3(); player.setGoal(nextMazeEngine.transform.TransformPoint(nextMazeEngineFinishPositionList[0].toVector3()), goalReachedHandler); baseMazeEngine.generateMaze(); currentLevel++; levelText.text = "LEVEL: " + currentLevel; }
public void Update() { if (create) { create = false; QMazeEngine me = FindObjectOfType <QMazeEngine>(); generateTerrain(me.mazeWidth, me.mazeHeight, me.mazePieceWidth, me.mazePieceHeight); } }
void blockHandler() { generateNextPart(); if (parts.Count > 3) { QMazeEngine mazeEngine = parts.Dequeue(); Destroy(mazeEngine.gameObject); } }
// CONSTRUCTOR public void Start() { targetPosition = transform.position; targetZoom = (maxZoom + minZoom) / 2; Camera.main.orthographicSize = targetZoom; QMazeEngine mazeEngine = FindObjectOfType <QMazeEngine>(); if (mazeEngine != null) { setBounds(0, 0, mazeEngine.mazeWidth * mazeEngine.mazePieceWidth, mazeEngine.mazeHeight * mazeEngine.mazePieceHeight); setPositionOnPiece(new QVector2Int((int)(mazeEngine.mazeWidth * mazeEngine.mazePieceWidth / 2), (int)(mazeEngine.mazeHeight * mazeEngine.mazePieceHeight / 2))); } }
private void generateNextPart() { QMazeEngine mazeEngine = (QMazeEngine)GameObject.Instantiate(mazeEnginePrefab); mazeEngine.getMazePiecePack().getPiece(QMazePieceType.Intersection).use = false; mazeEngine.transform.position = new Vector3(currentPartId * mazeEngine.getMazeWidth() * mazeEngine.getMazePieceWidth(), 0, 0); parts.Enqueue(mazeEngine); if (currentPartId == 0) { List <QVector2IntDir> startPositionList = new List <QVector2IntDir>(); startPositionList.Add(new QVector2IntDir(0, 0, QMazeOutputDirection.NotSpecified)); mazeEngine.setStartPositionList(startPositionList); lastExitY = QMath.getRandom(0, mazeEngine.getMazeHeight() - 1); List <QVector2IntDir> exitPositionList = new List <QVector2IntDir>(); exitPositionList.Add(new QVector2IntDir(mazeEngine.getMazeWidth() - 1, lastExitY, QMazeOutputDirection.E)); mazeEngine.setExitPositionList(exitPositionList); } else { List <QVector2IntDir> exitPositionList = new List <QVector2IntDir>(); exitPositionList.Add(new QVector2IntDir(0, lastExitY, QMazeOutputDirection.W)); lastExitY = QMath.getRandom(0, mazeEngine.getMazeHeight() - 1); exitPositionList.Add(new QVector2IntDir(mazeEngine.getMazeWidth() - 1, lastExitY, QMazeOutputDirection.E)); mazeEngine.setExitPositionList(exitPositionList); } GameObject block = (GameObject)GameObject.Instantiate(blockPrefab); block.transform.parent = mazeEngine.gameObject.transform; block.transform.position = new Vector3(((currentPartId + 1) * mazeEngine.getMazeWidth() - 0.5f) * mazeEngine.getMazePieceWidth(), 0, -lastExitY * mazeEngine.getMazePieceHeight()); block.GetComponent <QBlock>().triggerHandlerEvent += blockHandler; mazeEngine.generateMazeAsync(this, 0.016f); levelText.text = "LEVEL: " + currentPartId; currentPartId++; }