示例#1
0
        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);
        }
示例#2
0
 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());
 }
示例#3
0
        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);
            }
        }
示例#6
0
        // 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++;
        }