170 lines
4.9 KiB
C#
170 lines
4.9 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 : ONSPReflectionZone.cs
|
|
* Content : Add reflection zone volumes to set reflection parameters via snapshots.
|
|
***********************************************************************************/
|
|
|
|
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.");
|
|
}
|
|
}
|
|
}
|