Exemple #1
0
    private void Start()
    {
        var front = transform.Find("Front");
        var back  = transform.Find("Back");
        var left  = transform.Find("Left");
        var right = transform.Find("Right");
        var goals = 0;

        var mMazeGenerator = new RecursiveMazeGenerator(Rows, Columns);

        mMazeGenerator.GenerateMaze();

        for (var row = 0; row < Rows; row++)
        {
            for (var column = 0; column < Columns; column++)
            {
                var x    = column * CellWidth;
                var z    = row * CellHeight;
                var cell = mMazeGenerator.GetMazeCell(row, column);
                var tmp  = Instantiate(Floor, new Vector3(x, 0, z), Quaternion.Euler(0, 0, 0));
                tmp.transform.parent = transform;
                var wall = WallFabs[Random.Range(0, WallFabs.Length)];
                if (cell.WallRight)
                {
                    tmp = Instantiate(wall, new Vector3(x + CellWidth / 2, 0, z), Quaternion.Euler(0, 90, 0));
                    tmp.transform.parent = right;
                }

                if (cell.WallFront)
                {
                    tmp = Instantiate(wall, new Vector3(x, 0, z + CellHeight / 2), Quaternion.Euler(0, 0, 0));
                    tmp.transform.parent = front;
                }

                if (cell.WallLeft)
                {
                    tmp = Instantiate(wall, new Vector3(x - CellWidth / 2, 0, z), Quaternion.Euler(0, 270, 0));
                    tmp.transform.parent = left;
                }

                if (cell.WallBack)
                {
                    tmp = Instantiate(wall, new Vector3(x, 0, z - CellHeight / 2), Quaternion.Euler(0, 180, 0));
                    tmp.transform.parent = back;
                }

                if (!cell.IsGoal || GoalPrefabs == null || GoalPrefabs.Length < 1)
                {
                    continue;
                }
                var goalPrefab = GoalPrefabs[Random.Range(0, GoalPrefabs.Length)];
                tmp = Instantiate(goalPrefab, new Vector3(x, 0, z), Quaternion.Euler(0, 0, 0));
                tmp.transform.parent = transform;
                goals++;
            }
        }

        Manager.SetRemaining(goals);
    }
Exemple #2
0
    private void CheckAndSpawnCell(int row, int column, int level)
    {
        float    x    = column * CellWidth;
        float    z    = row * CellHeight;
        float    y    = -level * FenceWidth;
        MazeCell cell = _mazeGenerator.GetMazeCell(row, column);

        if (GoalPrefab != null)
        {
            if (!cell.IsGoal)
            {
                var floor = InstantiatePartOfMaze(Floor, new Vector3(x, y, z), Quaternion.Euler(0, 0, 0), transform);
                _floor.Add(floor);
            }
            else if (cell.IsGoal && level + 1 == AmountOfCellsInRow)
            {
                InstantiatePartOfMaze(Final, new Vector3(x, y, z), Quaternion.Euler(0, 0, 0), _level.transform);
            }
            else
            {
                InstantiatePartOfMaze(Empty, new Vector3(x, y, z), Quaternion.Euler(0, 0, 0), _level.transform);
            }

            if (cell.WallRight)
            {
                var wall = InstantiatePartOfMaze(Wall, new Vector3(x + CellWidth / 2, y, z) + Wall.transform.position, Quaternion.Euler(0, 90, 0), transform);
                _walls.Add(wall);
            }

            if (cell.WallFront)
            {
                var wall = InstantiatePartOfMaze(Wall, new Vector3(x, y, z + CellHeight / 2) + Wall.transform.position, Quaternion.Euler(0, 0, 0), transform);
                _walls.Add(wall);
            }

            if (cell.WallLeft)
            {
                var wall = InstantiatePartOfMaze(Wall, new Vector3(x - CellWidth / 2, y, z) + Wall.transform.position, Quaternion.Euler(0, 270, 0), transform);
                _walls.Add(wall);
            }

            if (cell.WallBack)
            {
                var wall = InstantiatePartOfMaze(Wall, new Vector3(x, y, z - CellHeight / 2) + Wall.transform.position, Quaternion.Euler(0, 180, 0), transform);
                _walls.Add(wall);
            }
        }
    }