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; }
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(); }); }
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); }