// Use this for initialization void Start() { gridLine = new LinkedList <GameObject>(); visibleGrid = new GameObject[visibleGridSize]; playerPos = startingPosition; for (int i = 0 - (visibleGridSize / 2); i < visibleGridSize / 2; i++) { GameObject temp = Instantiate(cube, new Vector3(startingPosition + (i * cubeWidth), 0, 0), Quaternion.identity); temp.GetComponent <BasicGroundBehavior>().effectivePosition = new BasicGroundBehavior.EffectivePositionPoint(i, 0); gridLine.AddLast(temp); if (i == 0) { currentCube = gridLine.Last; } } LinkedGrid testGrid = new LinkedGrid(); /* testGrid.AddFirstColumn(visibleGrid); * List<GameObject> testList = new List<GameObject>(); * for(int i = 0 - (visibleGridSize / 2); i< visibleGridSize / 2; i++) { * GameObject temp = Instantiate(cube, new Vector3(cubeWidth * 2, 0, startingPosition + (i * cubeWidth)), Quaternion.identity); * temp.GetComponent<BasicGroundBehavior>().effectivePosition = new BasicGroundBehavior.EffectivePositionPoint(1, i); * testList.Add(temp); * } * testGrid.AddColumn(testList.ToArray());*/ gridLine.CopyTo(visibleGrid, 0); testGrid.AddTopRow(visibleGrid); List <GameObject> testList = new List <GameObject>(); for (int i = 0 - (visibleGridSize / 2); i < visibleGridSize / 2; i++) { GameObject temp = Instantiate(cube, new Vector3(startingPosition + (i * cubeWidth), 0, cubeWidth), Quaternion.identity); temp.GetComponent <BasicGroundBehavior>().effectivePosition = new BasicGroundBehavior.EffectivePositionPoint(i, 1); testList.Add(temp); } testGrid.AddRow(testList.ToArray()); testGrid.MoveRightColumnLeft(); Debug.Log("bottomRowmembers " + testGrid.BottomRow.Length.ToString()); foreach (LinkedGrid.GridNode node in testGrid.TopRow) { Debug.Log(node.Data); node.Data.transform.position -= new Vector3(0, 0, -cubeWidth * 2); } BasicGroundBehavior.gridManager = this; }
private void TestVisualPlusTileMap() { Init(); var tileMap = new Grid <Tile <TileWorldData> >(islandLength, islandWidth); var visualGrid = isoVisualGenerator.GenerateMesh(islandLength, islandWidth); var heightMap = mapGenerator.ApplySphereMask( mapGenerator.GenerateHeightMap(islandLength, islandWidth)); tileMap.ForEachSet((x, y) => { var tile = new Tile <TileWorldData>(x, y); // Установка высоты tile.TileData.Height = heightMap[x, y]; // Установка биома var biomeList = CheckBiomePoint(Biomes, tile.TileData.Height); var nearestBiome = GetNearestBiome(biomeList, tile.TileData.Height); tile.TileData.Color = nearestBiome.TileColor; tile.TileData.Type = nearestBiome.GetTileType(tile); visualGrid[x, y].GetProxy() .SetColor("_Color", tile.TileData.Color) .Apply(); return(tile); }); // Линкуем все тайлы между собой tileMap = LinkedGrid <Tile <TileWorldData> > .ToLinkedGrid(tileMap); var checkMap = new int[tileMap.Width, tileMap.Height]; var groupsTemplate = CreateTileGroups(); var groups = new List <TileGroup>(); Tile <TileWorldData> entryTile = null; var exc = 0; // Пока не все тайлы обработаны while ((entryTile = SearchCheckMap(tileMap, checkMap)) != null) { if (++exc > 1_00) { throw new StackOverflowException(); } // Группа, которой подходит входной тайл var groupTemplate = groupsTemplate.FirstOrDefault(x => x.TileValidateFunction(entryTile)); if (groupTemplate == null) { Debug.LogError("Тайл не подошел ни одной группе!"); break; } // Создаем новую группу из шаблона var group = groupTemplate.CreateTemplate(); // Группируем оставшиеся тайлы group.Group(entryTile, checkMap); groups.Add(group); } PrintGroupMap(textureMesh0, groups); var heatMap = mapGenerator.GenerateHeatMap(islandLength, islandWidth); }