forked from cgvr/DeltaVR
Initial Commit
This commit is contained in:
164
Assets/Oculus/Spatializer/scripts/helpers/ONSPReflectionZone.cs
Normal file
164
Assets/Oculus/Spatializer/scripts/helpers/ONSPReflectionZone.cs
Normal file
@@ -0,0 +1,164 @@
|
||||
/************************************************************************************
|
||||
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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user