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

109 lines
3.7 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 : ONSPPropagationSerializationManager.cs
* Content : Functionality for serializing Oculus Audio geometry
***********************************************************************************/
using UnityEditor;
using UnityEditor.Build;
using UnityEngine;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;
using System.Collections.Generic;
public enum PlayModeState
{
Stopped,
Playing,
Paused
}
class ONSPPropagationSerializationManager
{
static ONSPPropagationSerializationManager()
{
EditorSceneManager.sceneSaving += OnSceneSaving;
}
public int callbackOrder { get { return 0; } }
public void OnPreprocessBuild(BuildTarget target, string path)
{
Debug.Log("ONSPPropagationSerializationManager.OnPreprocessBuild for target " + target + " at path " + path);
}
[MenuItem("Oculus/Spatializer/Build audio geometry for current scene")]
public static void BuildAudioGeometryForCurrentScene()
{
BuildAudioGeometryForScene(EditorSceneManager.GetActiveScene());
}
[MenuItem("Oculus/Spatializer/Rebuild audio geometry all scenes")]
public static void RebuildAudioGeometryForAllScenes()
{
Debug.Log("Rebuilding geometry for all scenes");
System.IO.Directory.Delete(ONSPPropagationGeometry.GeometryAssetPath, true);
for (int i = 0; i < EditorSceneManager.sceneCount; ++i)
{
BuildAudioGeometryForScene(EditorSceneManager.GetSceneAt(i));
}
}
public static void OnSceneSaving(Scene scene, string path)
{
BuildAudioGeometryForScene(scene);
}
private static void BuildAudioGeometryForScene(Scene scene)
{
Debug.Log("Building audio geometry for scene " + scene.name);
List<GameObject> rootObjects = new List<GameObject>();
scene.GetRootGameObjects(rootObjects);
HashSet<string> fileNames = new HashSet<string>();
foreach (GameObject go in rootObjects)
{
var geometryComponents = go.GetComponentsInChildren<ONSPPropagationGeometry>();
foreach (ONSPPropagationGeometry geo in geometryComponents)
{
if (geo.fileEnabled)
{
if (!geo.WriteFile())
{
Debug.LogError("Failed writing geometry for " + geo.gameObject.name);
}
else
{
if (!fileNames.Add(geo.filePathRelative))
{
Debug.LogWarning("Duplicate file name detected: " + geo.filePathRelative);
}
}
}
}
}
Debug.Log("Successfully built " + fileNames.Count + " geometry objects");
}
}