private void OnEnable() { //get target reference mct = (MarchingCubesTerrain)target; //INIT Toolbar textures = new Texture[5]; textures[TOOLS_MESH_ID] = Resources.Load <Texture>("MarchingCubes/Mesh"); textures[TOOLS_FOLIAGE_ID] = Resources.Load <Texture>("MarchingCubes/Foliage"); textures[TOOLS_CHUNK_ID] = Resources.Load <Texture>("MarchingCubes/Chunk"); textures[TOOLS_SAVELOAD_ID] = Resources.Load <Texture>("MarchingCubes/File"); textures[TOOLS_SETTINGS_ID] = Resources.Load <Texture>("MarchingCubes/Settings"); }
public static void CreateVoxelTerrain() { GameObject terrainGo = new GameObject(); terrainGo.name = newTerrainName; terrainGo.transform.position = new Vector3(0, 0, 0); MarchingCubesTerrain terrain = terrainGo.AddComponent <MarchingCubesTerrain>(); EditorUtility.SetDirty(terrain.gameObject); terrain.AddChunk(new Vector3Int(0, 0, 0)); Selection.activeObject = terrainGo; terrain.Generate(); }
private void OnSceneGUI() { Handles.zTest = UnityEngine.Rendering.CompareFunction.LessEqual; Handles.color = Color.red; Handles.DrawLine(mcc.transform.position, mcc.transform.position + new Vector3(1, 0, 0) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position, mcc.transform.position + new Vector3(0, 1, 0) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position, mcc.transform.position + new Vector3(0, 0, 1) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position + new Vector3(1, 1, 1) * MarchingCubesChunk.size, mcc.transform.position + new Vector3(0, 1, 1) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position + new Vector3(1, 1, 1) * MarchingCubesChunk.size, mcc.transform.position + new Vector3(1, 0, 1) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position + new Vector3(1, 1, 1) * MarchingCubesChunk.size, mcc.transform.position + new Vector3(1, 1, 0) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position + new Vector3(1, 0, 0) * MarchingCubesChunk.size, mcc.transform.position + new Vector3(1, 1, 0) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position + new Vector3(1, 0, 0) * MarchingCubesChunk.size, mcc.transform.position + new Vector3(1, 0, 1) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position + new Vector3(0, 1, 0) * MarchingCubesChunk.size, mcc.transform.position + new Vector3(1, 1, 0) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position + new Vector3(0, 1, 0) * MarchingCubesChunk.size, mcc.transform.position + new Vector3(0, 1, 1) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position + new Vector3(0, 0, 1) * MarchingCubesChunk.size, mcc.transform.position + new Vector3(1, 0, 1) * MarchingCubesChunk.size); Handles.DrawLine(mcc.transform.position + new Vector3(0, 0, 1) * MarchingCubesChunk.size, mcc.transform.position + new Vector3(0, 1, 1) * MarchingCubesChunk.size); // itself if (Handles.Button(Vector3.Scale(mcc.transform.parent.localScale, mcc.transform.position + new Vector3(MarchingCubesChunk.size * 0.5f, MarchingCubesChunk.size * 0.5f, MarchingCubesChunk.size * 0.5f)), Quaternion.identity, MarchingCubesChunk.size / 8, MarchingCubesChunk.size / 16, Handles.SphereHandleCap)) { GameObject parent = mcc.transform.parent.gameObject; parent.GetComponent <MarchingCubesTerrain>().EradicateChunk(mcc.position); Selection.activeGameObject = parent; return; } // posX if (Handles.Button(Vector3.Scale(mcc.transform.parent.localScale, mcc.transform.position + new Vector3(MarchingCubesChunk.size * 0.5f + MarchingCubesChunk.size, MarchingCubesChunk.size * 0.5f, MarchingCubesChunk.size * 0.5f)), Quaternion.identity, MarchingCubesChunk.size / 8, MarchingCubesChunk.size / 16, Handles.SphereHandleCap)) { MarchingCubesTerrain terrain = mcc.transform.parent.GetComponent <MarchingCubesTerrain>(); Vector3Int pos = mcc.position + new Vector3Int(1, 0, 0); if (terrain.ChunkAvailable(pos)) { terrain.EradicateChunk(pos); return; } else { terrain.AddChunk(pos); } } // negX if (Handles.Button(Vector3.Scale(mcc.transform.parent.localScale, mcc.transform.position + new Vector3(-(MarchingCubesChunk.size * 0.5f), MarchingCubesChunk.size * 0.5f, MarchingCubesChunk.size * 0.5f)), Quaternion.identity, MarchingCubesChunk.size / 8, MarchingCubesChunk.size / 16, Handles.SphereHandleCap)) { MarchingCubesTerrain terrain = mcc.transform.parent.GetComponent <MarchingCubesTerrain>(); Vector3Int pos = mcc.position + new Vector3Int(-1, 0, 0); if (terrain.ChunkAvailable(pos)) { terrain.EradicateChunk(pos); return; } else { terrain.AddChunk(pos); } } // posY if (Handles.Button(Vector3.Scale(mcc.transform.parent.localScale, mcc.transform.position + new Vector3(MarchingCubesChunk.size * 0.5f, MarchingCubesChunk.size * 0.5f + MarchingCubesChunk.size, MarchingCubesChunk.size * 0.5f)), Quaternion.identity, MarchingCubesChunk.size / 8, MarchingCubesChunk.size / 16, Handles.SphereHandleCap)) { MarchingCubesTerrain terrain = mcc.transform.parent.GetComponent <MarchingCubesTerrain>(); Vector3Int pos = mcc.position + new Vector3Int(0, 1, 0); if (terrain.ChunkAvailable(pos)) { terrain.EradicateChunk(pos); return; } else { terrain.AddChunk(pos); } } // negY if (Handles.Button(Vector3.Scale(mcc.transform.parent.localScale, mcc.transform.position + new Vector3(MarchingCubesChunk.size * 0.5f, -(MarchingCubesChunk.size * 0.5f), MarchingCubesChunk.size * 0.5f)), Quaternion.identity, MarchingCubesChunk.size / 8, MarchingCubesChunk.size / 16, Handles.SphereHandleCap)) { MarchingCubesTerrain terrain = mcc.transform.parent.GetComponent <MarchingCubesTerrain>(); Vector3Int pos = mcc.position + new Vector3Int(0, -1, 0); if (terrain.ChunkAvailable(pos)) { terrain.EradicateChunk(pos); return; } else { terrain.AddChunk(pos); } } // posZ if (Handles.Button(Vector3.Scale(mcc.transform.parent.localScale, mcc.transform.position + new Vector3(MarchingCubesChunk.size * 0.5f, MarchingCubesChunk.size * 0.5f, MarchingCubesChunk.size * 0.5f + MarchingCubesChunk.size)), Quaternion.identity, MarchingCubesChunk.size / 8, MarchingCubesChunk.size / 16, Handles.SphereHandleCap)) { MarchingCubesTerrain terrain = mcc.transform.parent.GetComponent <MarchingCubesTerrain>(); Vector3Int pos = mcc.position + new Vector3Int(0, 0, 1); if (terrain.ChunkAvailable(pos)) { terrain.EradicateChunk(pos); return; } else { terrain.AddChunk(pos); } } // negZ if (Handles.Button(Vector3.Scale(mcc.transform.parent.localScale, mcc.transform.position + new Vector3(MarchingCubesChunk.size * 0.5f, MarchingCubesChunk.size * 0.5f, -(MarchingCubesChunk.size * 0.5f))), Quaternion.identity, MarchingCubesChunk.size / 16, MarchingCubesChunk.size / 16, Handles.SphereHandleCap)) { MarchingCubesTerrain terrain = mcc.transform.parent.GetComponent <MarchingCubesTerrain>(); Vector3Int pos = mcc.position + new Vector3Int(0, 0, -1); if (terrain.ChunkAvailable(pos)) { terrain.EradicateChunk(pos); return; } else { terrain.AddChunk(pos); } } }