Exemplo n.º 1
0
    void DrawHandles()
    {
        // draw main grid and and its subdivisions
        Vector3 size = new Vector3(foliage.Terrain.terrainData.size.x, 1f, foliage.Terrain.terrainData.size.z);

        Handles.DrawWireCube(foliage.TerrainCentre, size);

        Utils.Grid.GridPlane grid = foliage.GetGrid();

        if (grid != null)
        {
            foreach (Utils.Grid.TerrainGridNodes n in grid.TerrainGridNode)
            {
                // Gizmos.color = (n.walkable) ? Color.white : Color.red;

                Vector3 handleSize;
                Handles.color = Color.blue;
                foreach (var item in n.gridPlanes)
                {
                    foreach (var node in item.TerrainGridNode)
                    {
                        handleSize = new Vector3(node.Diameter, 0.1f, node.Diameter);
                        Handles.DrawWireCube(node.WorldPos, handleSize);
                    }
                }

                if (n.DistanceFromPlayer > foliage.foliageSettings.foliageFadeDistance)
                {
                    Handles.color = Color.yellow;
                    Handles.DrawLine(n.WorldPos, GameObject.FindGameObjectWithTag("Player").transform.position);
                }

                Handles.color = Color.white;
                handleSize    = new Vector3(grid.NodeDiameter, 0.1f, grid.NodeDiameter);
                Handles.DrawWireCube(n.WorldPos, handleSize);
            }
        }
    }
Exemplo n.º 2
0
        public void Init()
        {
            // get the terrain
            if (!terrain)
            {
                terrain = Terrain.activeTerrain;
            }
            if (terrain == null)
            {
                Debug.LogError("No terrain selected"); return;
            }

            // get terrain centre
            Vector3 size = terrain.terrainData.size;

            terrainCentre = new Vector3(size.x / 2, 0f, size.z / 2);

            grid = new Utils.Grid.GridPlane();
            Vector2 gridSize = new Vector2(terrain.terrainData.size.x, terrain.terrainData.size.z);

            grid.CreateGrid(gridSize, 1000 / foliageSettings.gridNodeDivisons, terrainCentre);

            Utils.Grid.TerrainGridNodes node;
            for (int x = 0; x < grid.TerrainGridNode.Length / foliageSettings.gridNodeDivisons; x++)
            {
                for (int y = 0; y < grid.TerrainGridNode.Length / foliageSettings.gridNodeDivisons; y++)
                {
                    node = grid.TerrainGridNode[x, y];

                    // add a subdivision to this node
                    Vector2 subGridSize          = new Vector2(node.Diameter, node.Diameter);
                    Utils.Grid.GridPlane subGrid = new Utils.Grid.GridPlane();
                    subGrid.CreateGrid(subGridSize, node.Diameter / foliageSettings.subGrid_0_Divisions, node.WorldPos);
                    node.gridPlanes.Add(subGrid);
                }
            }
        }