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