/************************************************************************************
|
|
Filename : ONSPPropagationSerializationManager.cs
|
|
Content : Functionality for serializing Oculus Audio geometry
|
|
Copyright : Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
|
|
|
|
Licensed under the Oculus SDK Version 3.5 (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/sdk-3.5/
|
|
|
|
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.
|
|
************************************************************************************/
|
|
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");
|
|
}
|
|
}
|