コード例 #1
0
ファイル: LevelLoader.cs プロジェクト: bkolarov/museum_hunt
        private void RenderContent(TilesLayout.TilesLayout tilesLayout, TilesLayout.TilesLayoutContent content, PathCell[,] cells)
        {
            cells.ForeachIndexed((x, y, cell) =>
            {
                GameObject tileGameObject = null;
                switch (cell.CellType)
                {
                case PathCell.Type.LETTER:
                    tileGameObject = LetterGameObject;
                    break;

                case PathCell.Type.OBSTACLE:
                    tileGameObject = ObstacleGameObject;
                    break;

                case PathCell.Type.EMPTY:
                    tileGameObject = EmptyGameObject;
                    break;
                }

                content.Items[x, y].GameObject = tileGameObject;
            });

            tilesLayout.Content = content;
        }
コード例 #2
0
ファイル: LevelLoader.cs プロジェクト: bkolarov/museum_hunt
 private void CreateCells(TilesLayout.TilesLayoutContent content)
 {
     for (int row = 0; row < TilesPerRow; row++)
     {
         for (int col = 0; col < TilesPerColumn; col++)
         {
             var cell = new TilesLayout.TilesLayoutCell();
             content.SetCell(cell, row, col);
         }
     }
 }
コード例 #3
0
ファイル: LevelLoader.cs プロジェクト: bkolarov/museum_hunt
        // Start is called before the first frame update
        void Start()
        {
            LevelDataRepository = GameObject.Find("LevelDataRepository").GetComponent("LevelDataRepository") as LevelDataRepository;

            var content = new TilesLayout.TilesLayoutContent(TilesPerColumn, TilesPerRow);

            CreateCells(content);

            var tilesLayout = GetTilesLayout();

            GenerateLevel(tilesLayout, content);
            AddSideCollisions(content);
            AddFinishLine();
        }
コード例 #4
0
ファイル: LevelLoader.cs プロジェクト: bkolarov/museum_hunt
        private void GenerateLevel(TilesLayout.TilesLayout tilesLayout, TilesLayout.TilesLayoutContent content)
        {
            var obstaclePositioner  = new ObstaclePositioner();
            var emptyCellPositioner = new EmptyCellPositioner();

            var cells = new PathCell[content.Columns, content.Rows];

            cells.ForeachIndexed((x, y, cell) => cells[x, y] = new PathCell(x, y));

            int pathLength   = EnsurePathExists(cells);
            var letters      = GenerateLetters(pathLength);
            int maxObstacles = cells.Length - (letters.Count >= pathLength ? (letters.Count) : (pathLength));

            obstaclePositioner.PlaceObstacles(cells, maxObstacles);
            PlaceRemainingLetters(cells, pathLength, letters);
            emptyCellPositioner.PlaceEmptyCells(cells);

            cells.Print();

            GenerateGameObjects(cells, tilesLayout, content, letters);
        }
コード例 #5
0
ファイル: LevelLoader.cs プロジェクト: bkolarov/museum_hunt
        private void AddSideCollisions(TilesLayout.TilesLayoutContent content)
        {
            // add extra height above the layout for the starting vertical position of the character
            // and add the botom when it's supposed to fall off
            float extraHeight = content.Items[0, 0].MeasuredHeight;

            float edgeHalfWidth  = content.Width * 0.5f;
            float edgeHalfHeight = content.Height * 0.5f + extraHeight;

            var colliders = GetComponents <EdgeCollider2D>();

            colliders[0].points = new Vector2[]
            {
                new Vector2(-edgeHalfWidth, edgeHalfHeight),
                new Vector2(-edgeHalfWidth, -edgeHalfHeight)
            };

            colliders[1].points = new Vector2[]
            {
                new Vector2(edgeHalfWidth, -edgeHalfHeight),
                new Vector2(edgeHalfWidth, edgeHalfHeight)
            };
        }
コード例 #6
0
ファイル: LevelLoader.cs プロジェクト: bkolarov/museum_hunt
        private void GenerateGameObjects(PathCell[,] cells, TilesLayout.TilesLayout tilesLayout, TilesLayout.TilesLayoutContent content, List <string> letters)
        {
            RenderContent(tilesLayout, content, cells);

            var letterGenerator = LetterGenerator(letters).GetEnumerator();

            letterGenerator.MoveNext();

            cells.Flatten()
            .Where(cell => cell.CellType == PathCell.Type.LETTER)
            .ToList()
            .ForEach(cell =>
            {
                var gameObject = content.Items[cell.Position.x, cell.Position.y].GameObject;
                var binding    = gameObject.GetComponent(typeof(LetterTileBinding)) as LetterTileBinding;
                binding.Letter = letterGenerator.Current;
                letterGenerator.MoveNext();
            });
        }