DeltaVR/Assets/Oculus/Spatializer/editor/ONSPPropagationGeometryEditor.cs
2023-05-08 15:56:10 +03:00

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