forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			127 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 | 
						|
 * All rights reserved.
 | 
						|
 *
 | 
						|
 * Licensed under the Oculus SDK License Agreement (the "License");
 | 
						|
 * you may not use the Oculus SDK except in compliance with the License,
 | 
						|
 * which is provided at the time of installation or download, or which
 | 
						|
 * otherwise accompanies this software in either electronic or hard copy form.
 | 
						|
 *
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 * https://developer.oculus.com/licenses/oculussdk/
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, the Oculus SDK
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
 | 
						|
/************************************************************************************
 | 
						|
 * Filename    :   ONSPPropagationGeometryEditor.cs
 | 
						|
 * Content     :   Geometry editor class
 | 
						|
                Attach to geometry to define material properties
 | 
						|
 ***********************************************************************************/
 | 
						|
 | 
						|
//#define ENABLE_DEBUG_EXPORT_OBJ
 | 
						|
 | 
						|
using UnityEngine;
 | 
						|
using UnityEditor;
 | 
						|
 | 
						|
[CustomEditor(typeof(ONSPPropagationGeometry))] 
 | 
						|
public class ONSPPropagationGeometryEditor : Editor
 | 
						|
{
 | 
						|
	public override void OnInspectorGUI()
 | 
						|
	{
 | 
						|
        ONSPPropagationGeometry mesh = (ONSPPropagationGeometry)target;
 | 
						|
		
 | 
						|
		EditorGUI.BeginChangeCheck();
 | 
						|
		
 | 
						|
		bool newIncludeChildMeshes = EditorGUILayout.Toggle( new GUIContent("Include Child Meshes","Include all child meshes into single geometry instance"), mesh.includeChildMeshes );
 | 
						|
 | 
						|
        Separator();
 | 
						|
 | 
						|
        #if UNITY_EDITOR
 | 
						|
        string newFilePath = mesh.filePath;
 | 
						|
		bool editedPath = false;
 | 
						|
		bool writeMesh = false;
 | 
						|
		EditorGUI.BeginDisabledGroup( Application.isPlaying );
 | 
						|
		bool newFileEnabled = EditorGUILayout.Toggle( new GUIContent("File Enabled","If set, the serialized mesh file is used as the mesh data source"), mesh.fileEnabled );
 | 
						|
		EditorGUILayout.LabelField( new GUIContent("File Path:","The path to the serialized mesh file, relative to the StreamingAssets directory" ),
 | 
						|
                                    new GUIContent(mesh.filePathRelative != null ? mesh.filePathRelative : ""));
 | 
						|
		
 | 
						|
		EditorGUILayout.BeginHorizontal();
 | 
						|
		EditorGUILayout.PrefixLabel( " " );
 | 
						|
		if ( GUILayout.Button("Set Path") )
 | 
						|
		{
 | 
						|
            if (!System.IO.Directory.Exists(Application.streamingAssetsPath))
 | 
						|
            {
 | 
						|
                System.IO.Directory.CreateDirectory(Application.streamingAssetsPath);
 | 
						|
            }
 | 
						|
 | 
						|
            string directory = Application.streamingAssetsPath;
 | 
						|
            string fileName = mesh.gameObject.name + "." + ONSPPropagationGeometry.GEOMETRY_FILE_EXTENSION;
 | 
						|
 | 
						|
            if (newFilePath != "")
 | 
						|
            {
 | 
						|
                directory = System.IO.Path.GetDirectoryName(newFilePath);
 | 
						|
                fileName = System.IO.Path.GetFileName(newFilePath);
 | 
						|
            }
 | 
						|
 | 
						|
			newFilePath = EditorUtility.SaveFilePanel(
 | 
						|
                "Save baked mesh to file", directory, fileName,
 | 
						|
                ONSPPropagationGeometry.GEOMETRY_FILE_EXTENSION);
 | 
						|
			
 | 
						|
			// If the user canceled, use the old path.
 | 
						|
			if ( newFilePath == null || newFilePath.Length == 0 )
 | 
						|
				newFilePath = mesh.filePath;
 | 
						|
			else
 | 
						|
				editedPath = true;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( GUILayout.Button("Bake Mesh to File") )
 | 
						|
			writeMesh = true;
 | 
						|
		
 | 
						|
		EditorGUILayout.EndHorizontal();
 | 
						|
 | 
						|
#if ENABLE_DEBUG_EXPORT_OBJ
 | 
						|
        // this allows you to export the geometry to a .obj for viewing
 | 
						|
        // in an external model viewer for debugging/validation
 | 
						|
        if ( GUILayout.Button("Write to .obj (debug)") )
 | 
						|
            mesh.WriteToObj();
 | 
						|
#endif
 | 
						|
 | 
						|
		EditorGUI.EndDisabledGroup();
 | 
						|
		
 | 
						|
        #endif
 | 
						|
		
 | 
						|
		if ( EditorGUI.EndChangeCheck() )
 | 
						|
		{
 | 
						|
			Undo.RecordObject( mesh, "Edited OVRAudioMesh" );
 | 
						|
 | 
						|
			mesh.includeChildMeshes = newIncludeChildMeshes;
 | 
						|
			mesh.fileEnabled = newFileEnabled;
 | 
						|
 | 
						|
            newFilePath = newFilePath.Replace(Application.streamingAssetsPath + "/", "");
 | 
						|
 | 
						|
			if ( editedPath )
 | 
						|
                mesh.filePathRelative = newFilePath;
 | 
						|
			
 | 
						|
			if ( editedPath || writeMesh )
 | 
						|
				mesh.WriteFile();
 | 
						|
		}
 | 
						|
 | 
						|
		if ( Application.isPlaying && GUILayout.Button("Upload Mesh") )
 | 
						|
			mesh.UploadGeometry();
 | 
						|
    }
 | 
						|
    void Separator()
 | 
						|
    {
 | 
						|
        GUI.color = new Color(1, 1, 1, 0.25f);
 | 
						|
        GUILayout.Box("", "HorizontalSlider", GUILayout.Height(16));
 | 
						|
        GUI.color = Color.white;
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 |