/* * 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 rootObjects = new List(); scene.GetRootGameObjects(rootObjects); HashSet fileNames = new HashSet(); foreach (GameObject go in rootObjects) { var geometryComponents = go.GetComponentsInChildren(); 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"); } }