forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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");
 | 
						|
    }
 | 
						|
}
 |