// 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;
    }
Exemple #2
0
        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);
        }