Example #1
0
        private List <IActor> CreateMazeAttributes(GameMode mode, MazeLevelConfig levelConfig)
        {
            var mazeAttributes = new List <IActor>();

            switch (mode)
            {
            case GameMode.FindItems when _gameConfig.ItemPrefab != null:
            {
                var randCells = _mazeGenerator.GetRandomMazeCells(levelConfig.ItemsCount);

                foreach (var cell in randCells)
                {
                    var x = cell.Key.X * levelConfig.CellWidth;
                    var z = cell.Key.Y * levelConfig.CellHeight;

                    var newItem = _itemsPool.Allocate();

                    newItem.SetPositionAndRotation(
                        new Vector3(x, _gameConfig.ItemPrefab.transform.position.y, z),
                        _gameConfig.ItemPrefab.transform.rotation);

                    newItem.SetParent(_rootTransform);

                    var actor = newItem.GetComponent <IActor>();

                    if (actor != null)
                    {
                        mazeAttributes.Add(actor);
                    }
                }

                break;
            }

            case GameMode.EscapeFromMaze:
            {
                if (_mazeExit == null)
                {
                    _mazeExit = Object.Instantiate(_gameConfig.MazeExitPrefab).GetComponent <IActor>();
                }

                if (_mazeExit != null)
                {
                    mazeAttributes.Add(_mazeExit);
                }

                break;
            }
            }

            return(mazeAttributes);
        }
Example #2
0
        private void BuildMazeCore(MazeLevelConfig levelConfig)
        {
            for (var row = 0; row < levelConfig.RowsCount; row++)
            {
                for (var column = 0; column < levelConfig.ColumnsCount; column++)
                {
                    var x    = column * levelConfig.CellWidth;
                    var z    = row * levelConfig.CellHeight;
                    var cell = _mazeGenerator.GetMazeCell(row, column);

                    MazeElement mazeElement = null;

                    mazeElement = _floorPool.Allocate();
                    mazeElement.SetPositionAndRotation(new Vector3(x, 0, z), Quaternion.Euler(0, 0, 0));
                    mazeElement.SetParent(_rootTransform);

                    if (cell.WallRight)
                    {
                        mazeElement = _wallsPool.Allocate();
                        mazeElement.SetPositionAndRotation(
                            new Vector3(x + levelConfig.CellWidth * 0.5f, 0, z) + _gameConfig.WallPrefab.transform.position,
                            Quaternion.Euler(0, 90, 0));
                        mazeElement.SetParent(_rootTransform);
                    }

                    if (cell.WallFront)
                    {
                        mazeElement = _wallsPool.Allocate();
                        mazeElement.SetPositionAndRotation(
                            new Vector3(x, 0, z + levelConfig.CellHeight * 0.5f) + _gameConfig.WallPrefab.transform.position,
                            Quaternion.Euler(0, 0, 0));
                        mazeElement.SetParent(_rootTransform);
                    }

                    if (cell.WallLeft)
                    {
                        mazeElement = _wallsPool.Allocate();
                        mazeElement.SetPositionAndRotation(
                            new Vector3(x - levelConfig.CellWidth * 0.5f, 0, z) + _gameConfig.WallPrefab.transform.position,
                            Quaternion.Euler(0, 270, 0));
                        mazeElement.SetParent(_rootTransform);
                    }

                    if (cell.WallBack)
                    {
                        mazeElement = _wallsPool.Allocate();
                        mazeElement.SetPositionAndRotation(
                            new Vector3(x, 0, z - levelConfig.CellHeight * 0.5f) + _gameConfig.WallPrefab.transform.position,
                            Quaternion.Euler(0, 180, 0));
                        mazeElement.SetParent(_rootTransform);
                    }
                }
            }

            if (_gameConfig.ColumnPrefab != null)
            {
                for (var row = 0; row < levelConfig.RowsCount + 1; row++)
                {
                    for (var column = 0; column < levelConfig.ColumnsCount + 1; column++)
                    {
                        var x = column * levelConfig.CellWidth;
                        var z = row * levelConfig.CellHeight;

                        var mazeElement = _columnsPool.Allocate();
                        mazeElement.SetPositionAndRotation(
                            new Vector3(x - levelConfig.CellWidth * 0.5f, _gameConfig.ColumnPrefab.transform.position.y,
                                        z - levelConfig.CellHeight * 0.5f), _gameConfig.ColumnPrefab.transform.rotation);
                        mazeElement.SetParent(_rootTransform);
                    }
                }
            }
        }