forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			165 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
/************************************************************************************
 | 
						|
Filename    :   ONSPReflectionZone.cs
 | 
						|
Content     :   Add reflection zone volumes to set reflection parameters via snapshots.
 | 
						|
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 UnityEngine;
 | 
						|
using UnityEngine.Audio;
 | 
						|
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
 | 
						|
public struct ReflectionSnapshot
 | 
						|
{
 | 
						|
    public  AudioMixerSnapshot mixerSnapshot;
 | 
						|
    public  float              fadeTime;
 | 
						|
}
 | 
						|
 | 
						|
public class ONSPReflectionZone : MonoBehaviour 
 | 
						|
{
 | 
						|
    public AudioMixerSnapshot mixerSnapshot = null;
 | 
						|
    public float fadeTime                   = 0.0f;
 | 
						|
 | 
						|
	// Push/pop list
 | 
						|
    private static Stack<ReflectionSnapshot> snapshotList        = new Stack<ReflectionSnapshot>();
 | 
						|
    private static ReflectionSnapshot        currentSnapshot     = new ReflectionSnapshot();
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Start this instance.
 | 
						|
	/// </summary>
 | 
						|
	void Start () 
 | 
						|
	{
 | 
						|
	}
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Update this instance.
 | 
						|
	/// </summary>
 | 
						|
	void Update () 
 | 
						|
	{
 | 
						|
	}
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Raises the trigger enter event.
 | 
						|
	/// </summary>
 | 
						|
	/// <param name="other">Other.</param>
 | 
						|
	void OnTriggerEnter(Collider other) 
 | 
						|
	{
 | 
						|
		if(CheckForAudioListener(other.gameObject) == true)
 | 
						|
		{
 | 
						|
            PushCurrentMixerShapshot();
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Raises the trigger exit event.
 | 
						|
	/// </summary>
 | 
						|
	/// <param name="other">Other.</param>
 | 
						|
	void OnTriggerExit(Collider other)
 | 
						|
	{
 | 
						|
		if(CheckForAudioListener(other.gameObject) == true)
 | 
						|
		{
 | 
						|
			PopCurrentMixerSnapshot();			
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	// * * * * * * * * * * * * *
 | 
						|
	// Private functions
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Checks for audio listener.
 | 
						|
	/// </summary>
 | 
						|
	/// <returns><c>true</c>, if for audio listener was checked, <c>false</c> otherwise.</returns>
 | 
						|
	/// <param name="gameObject">Game object.</param>
 | 
						|
	bool CheckForAudioListener(GameObject gameObject)
 | 
						|
	{
 | 
						|
		AudioListener al = gameObject.GetComponentInChildren<AudioListener>();
 | 
						|
		if(al != null)
 | 
						|
			return true;
 | 
						|
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
	
 | 
						|
	/// <summary>
 | 
						|
	/// Pushs the current mixer snapshot onto the snapshot stack
 | 
						|
	/// </summary>
 | 
						|
	void PushCurrentMixerShapshot()
 | 
						|
	{
 | 
						|
        ReflectionSnapshot css = currentSnapshot;
 | 
						|
        snapshotList.Push(css);	
 | 
						|
 | 
						|
		// Set the zone reflection values
 | 
						|
		// NOTE: There will be conditions that might need resolution when dealing with volumes that 
 | 
						|
		// overlap. Best practice is to never have volumes half-way inside other volumes; larger
 | 
						|
		// volumes should completely contain smaller volumes
 | 
						|
		SetReflectionValues();
 | 
						|
	}
 | 
						|
 | 
						|
    	/// <summary>
 | 
						|
	/// Pops the current reflection values from reflectionsList stack.
 | 
						|
	/// </summary>
 | 
						|
	void PopCurrentMixerSnapshot()
 | 
						|
	{
 | 
						|
        ReflectionSnapshot snapshot = snapshotList.Pop();
 | 
						|
 | 
						|
		// Set the popped reflection values
 | 
						|
        SetReflectionValues(ref snapshot);
 | 
						|
	}
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Sets the reflection values. This is done when entering a zone (use zone values).
 | 
						|
	/// </summary>
 | 
						|
	void SetReflectionValues()
 | 
						|
	{
 | 
						|
        if (mixerSnapshot != null)
 | 
						|
        {
 | 
						|
            Debug.Log("Setting off snapshot " + mixerSnapshot.name);
 | 
						|
            mixerSnapshot.TransitionTo(fadeTime);
 | 
						|
 | 
						|
            // Set the current snapshot to be equal to this one
 | 
						|
            currentSnapshot.mixerSnapshot = mixerSnapshot;
 | 
						|
            currentSnapshot.fadeTime      = fadeTime;
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            Debug.Log("Mixer snapshot not set - Please ensure play area has at least one encompassing snapshot.");
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
	/// <summary>
 | 
						|
	/// Sets the reflection values. This is done when exiting a zone (use popped values).
 | 
						|
	/// </summary>
 | 
						|
	/// <param name="rm">Rm.</param>
 | 
						|
    void SetReflectionValues(ref ReflectionSnapshot mss)
 | 
						|
	{
 | 
						|
        if(mss.mixerSnapshot != null)
 | 
						|
        {
 | 
						|
            Debug.Log("Setting off snapshot " + mss.mixerSnapshot.name);
 | 
						|
            mss.mixerSnapshot.TransitionTo(mss.fadeTime);
 | 
						|
 | 
						|
            // Set the current snapshot to be equal to this one
 | 
						|
            currentSnapshot.mixerSnapshot = mss.mixerSnapshot;
 | 
						|
            currentSnapshot.fadeTime = mss.fadeTime;
 | 
						|
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            Debug.Log("Mixer snapshot not set - Please ensure play area has at least one encompassing snapshot.");
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |