// 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)); } } }