SteamVR
This commit is contained in:
Executable
+81
@@ -0,0 +1,81 @@
|
||||
//========= Copyright 2014, Valve Corporation, All rights reserved. ===========
|
||||
//
|
||||
// Purpose: Base class for fading things based on SteamVR events
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
public abstract class SteamVR_Status : MonoBehaviour
|
||||
{
|
||||
public string message; // name of event to respond to
|
||||
public float duration, fade;
|
||||
|
||||
protected float timer;
|
||||
protected bool status;
|
||||
|
||||
public enum Mode
|
||||
{
|
||||
OnTrue,
|
||||
OnFalse,
|
||||
WhileTrue,
|
||||
WhileFalse
|
||||
}
|
||||
|
||||
public Mode mode;
|
||||
|
||||
protected abstract void SetAlpha(float a);
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
SteamVR_Utils.Event.Listen(message, OnEvent);
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
SteamVR_Utils.Event.Remove(message, OnEvent);
|
||||
}
|
||||
|
||||
void OnEvent(params object[] args)
|
||||
{
|
||||
status = (bool)args[0];
|
||||
if (status)
|
||||
{
|
||||
if (mode == Mode.OnTrue)
|
||||
timer = duration;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mode == Mode.OnFalse)
|
||||
timer = duration;
|
||||
}
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (mode == Mode.OnTrue || mode == Mode.OnFalse)
|
||||
{
|
||||
timer -= Time.deltaTime;
|
||||
if (timer < 0.0f)
|
||||
{
|
||||
SetAlpha(0.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
var a = 1.0f;
|
||||
if (timer < fade)
|
||||
a = timer / fade;
|
||||
if (timer > duration - fade)
|
||||
a = Mathf.InverseLerp(duration, duration - fade, timer);
|
||||
SetAlpha(a);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var show = (mode == Mode.WhileTrue && status == true) || (mode == Mode.WhileFalse && status == false);
|
||||
timer = show ? Mathf.Min(fade, timer + Time.deltaTime) : Mathf.Max(0.0f, timer - Time.deltaTime);
|
||||
SetAlpha(timer / fade);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user