// Headset Fade|Presence|70020
namespace VRTK
{
using UnityEngine;
///
/// Event Payload
///
/// A float that is the duration for the fade/unfade process has remaining.
/// The current Transform of the object that the Headset Fade script is attached to (Camera).
public struct HeadsetFadeEventArgs
{
public float timeTillComplete;
public Transform currentTransform;
}
///
/// Event Payload
///
/// this object
///
public delegate void HeadsetFadeEventHandler(object sender, HeadsetFadeEventArgs e);
///
/// Provides the ability to change the colour of the headset view to a specified colour over a given duration.
///
///
/// **Script Usage:**
/// * Place the `VRTK_HeadsetFade` script on any active scene GameObject.
///
///
/// `VRTK/Examples/011_Camera_HeadSetCollisionFading` has collidable walls around the play area and if the user puts their head into any of the walls then the headset will fade to black.
///
[AddComponentMenu("VRTK/Scripts/Presence/VRTK_HeadsetFade")]
public class VRTK_HeadsetFade : MonoBehaviour
{
///
/// Emitted when the user's headset begins to fade to a given colour.
///
public event HeadsetFadeEventHandler HeadsetFadeStart;
///
/// Emitted when the user's headset has completed the fade and is now fully at the given colour.
///
public event HeadsetFadeEventHandler HeadsetFadeComplete;
///
/// Emitted when the user's headset begins to unfade back to a transparent colour.
///
public event HeadsetFadeEventHandler HeadsetUnfadeStart;
///
/// Emitted when the user's headset has completed unfading and is now fully transparent again.
///
public event HeadsetFadeEventHandler HeadsetUnfadeComplete;
protected Transform headset;
protected bool isTransitioning = false;
protected bool isFaded = false;
public virtual void OnHeadsetFadeStart(HeadsetFadeEventArgs e)
{
if (HeadsetFadeStart != null)
{
HeadsetFadeStart(this, e);
}
}
public virtual void OnHeadsetFadeComplete(HeadsetFadeEventArgs e)
{
if (HeadsetFadeComplete != null)
{
HeadsetFadeComplete(this, e);
}
}
public virtual void OnHeadsetUnfadeStart(HeadsetFadeEventArgs e)
{
if (HeadsetUnfadeStart != null)
{
HeadsetUnfadeStart(this, e);
}
}
public virtual void OnHeadsetUnfadeComplete(HeadsetFadeEventArgs e)
{
if (HeadsetUnfadeComplete != null)
{
HeadsetUnfadeComplete(this, e);
}
}
///
/// The IsFaded method returns true if the headset is currently fading or has completely faded and returns false if it is completely unfaded.
///
/// Returns `true` if the headset is currently fading or faded.
public virtual bool IsFaded()
{
return isFaded;
}
///
/// The IsTransitioning method returns true if the headset is currently fading or unfading and returns false if it is completely faded or unfaded.
///
/// Returns `true` if the headset is currently in the process of fading or unfading.
public virtual bool IsTransitioning()
{
return isTransitioning;
}
///
/// The Fade method initiates a change in the colour of the headset view to the given colour over a given duration.
///
/// The colour to fade the headset view to.
/// The time in seconds to take to complete the fade transition.
public virtual void Fade(Color color, float duration)
{
isFaded = false;
isTransitioning = true;
VRTK_SDK_Bridge.HeadsetFade(color, duration);
OnHeadsetFadeStart(SetHeadsetFadeEvent(headset, duration));
CancelInvoke("UnfadeComplete");
Invoke("FadeComplete", duration);
}
///
/// The Unfade method initiates the headset to change colour back to a transparent colour over a given duration.
///
/// The time in seconds to take to complete the unfade transition.
public virtual void Unfade(float duration)
{
isFaded = true;
isTransitioning = true;
VRTK_SDK_Bridge.HeadsetFade(Color.clear, duration);
OnHeadsetUnfadeStart(SetHeadsetFadeEvent(headset, duration));
CancelInvoke("FadeComplete");
Invoke("UnfadeComplete", duration);
}
protected virtual void Awake()
{
VRTK_SDKManager.AttemptAddBehaviourToToggleOnLoadedSetupChange(this);
}
protected virtual void OnEnable()
{
headset = VRTK_DeviceFinder.HeadsetCamera();
isTransitioning = false;
isFaded = false;
VRTK_SharedMethods.AddCameraFade();
}
protected virtual void OnDestroy()
{
VRTK_SDKManager.AttemptRemoveBehaviourToToggleOnLoadedSetupChange(this);
}
protected virtual HeadsetFadeEventArgs SetHeadsetFadeEvent(Transform currentTransform, float duration)
{
HeadsetFadeEventArgs e;
e.timeTillComplete = duration;
e.currentTransform = currentTransform;
return e;
}
protected virtual void FadeComplete()
{
isFaded = true;
isTransitioning = false;
OnHeadsetFadeComplete(SetHeadsetFadeEvent(headset, 0f));
}
protected virtual void UnfadeComplete()
{
isFaded = false;
isTransitioning = false;
OnHeadsetUnfadeComplete(SetHeadsetFadeEvent(headset, 0f));
}
}
}