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();
        }
示例#3
0
        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);
                }
            }
        }