public void BuildTemplatePrefabs(GridCell cell) { GridCell[] neighborCells = GridManager.Instance.GetCellOrthogonalNeighbors(cell); switch (decorationMode) { case DecorationMode.SinglePrefab: decorationSinglePrefab.BuildPrefab(cell); break; case DecorationMode.PrefabList: decorationPrefabList.BuildPrefab(cell); break; } if (isAPath) { int[] modeDir = GetPathDirection(cell, neighborCells); pathData.BuildPrefab(cell, modeDir[1], modeDir[0]); return; } if (isARiver) { int[] modeDir = GetRiverDirection(cell, neighborCells); riverData.BuildPrefab(cell, modeDir[1], modeDir[0] == 1 ? true : false); return; } switch (cellMode) { case CellMode.SinglePrefab: singlePrefab.BuildPrefab(cell); break; case CellMode.PrefabList: prefabList.BuildPrefab(cell); break; } if (wallMode != WallMode.None) { for (int i = 0; i < neighborCells.Length; i++) { if (neighborCells[i] == null) { continue; } if (neighborCells[i].height <= cell.height) { continue; } for (int n = 0; n < neighborCells[i].height - cell.height; n++) { switch (wallMode) { case WallMode.SinglePrefab: wallSinglePrefab.BuildPrefab(cell, i, n); break; case WallMode.PrefabList: wallPrefabList.BuildPrefab(cell, i, n); break; } } } } switch (railingMode) { case RailingMode.SinglePrefab: for (int i = 0; i < neighborCells.Length; i++) { if (neighborCells[i] == null) { railingSinglePrefab.BuildPrefab(cell, i); } else if (neighborCells[i].cellTemplate.stairMode != StairMode.None) { continue; } else if (neighborCells[i].height < cell.height) { railingSinglePrefab.BuildPrefab(cell, i); } } break; case RailingMode.PrefabList: for (int i = 0; i < neighborCells.Length; i++) { if (neighborCells[i] == null) { railingPrefabList.BuildPrefab(cell, i); } else if (neighborCells[i].cellTemplate.stairMode != StairMode.None) { continue; } else if (neighborCells[i].height < cell.height) { railingPrefabList.BuildPrefab(cell, i); } } break; } switch (obstacleMode) { case ObstacleMode.SinglePrefab: obstacleSinglePrefab.BuildPrefab(cell); break; case ObstacleMode.PrefabList: obstaclePrefabList.BuildPrefab(cell); break; } int dir; switch (stairMode) { case StairMode.SinglePrefab: dir = GetStairDirection(cell, neighborCells); if (dir < 0) { break; } stairSinglePrefab.BuildPrefab(cell, neighborCells, dir); break; case StairMode.PrefabList: dir = GetStairDirection(cell, neighborCells); if (dir < 0) { break; } stairPrefabList.BuildPrefab(cell, neighborCells, dir); break; } }