123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- using System;
- using UnityEngine;
- using Valve.VR;
- public class SteamVR_Fade : MonoBehaviour
- {
- public static void Start(Color newColor, float duration, bool fadeOverlay = false)
- {
- SteamVR_Utils.Event.Send("fade", new object[]
- {
- newColor,
- duration,
- fadeOverlay
- });
- }
- public static void View(Color newColor, float duration)
- {
- CVRCompositor compositor = OpenVR.Compositor;
- if (compositor != null)
- {
- compositor.FadeToColor(duration, newColor.r, newColor.g, newColor.b, newColor.a, false);
- }
- }
- public void OnStartFade(params object[] args)
- {
- Color color = (Color)args[0];
- float num = (float)args[1];
- this.fadeOverlay = (args.Length > 2 && (bool)args[2]);
- if (num > 0f)
- {
- this.targetColor = color;
- this.deltaColor = (this.targetColor - this.currentColor) / num;
- }
- else
- {
- this.currentColor = color;
- }
- }
- private void OnEnable()
- {
- if (SteamVR_Fade.fadeMaterial == null)
- {
- SteamVR_Fade.fadeMaterial = new Material(Shader.Find("Custom/SteamVR_Fade"));
- }
- SteamVR_Utils.Event.Listen("fade", new SteamVR_Utils.Event.Handler(this.OnStartFade));
- SteamVR_Utils.Event.Send("fade_ready", new object[0]);
- }
- private void OnDisable()
- {
- SteamVR_Utils.Event.Remove("fade", new SteamVR_Utils.Event.Handler(this.OnStartFade));
- }
- private void OnPostRender()
- {
- if (this.currentColor != this.targetColor)
- {
- if (Mathf.Abs(this.currentColor.a - this.targetColor.a) < Mathf.Abs(this.deltaColor.a) * Time.deltaTime)
- {
- this.currentColor = this.targetColor;
- this.deltaColor = new Color(0f, 0f, 0f, 0f);
- }
- else
- {
- this.currentColor += this.deltaColor * Time.deltaTime;
- }
- if (this.fadeOverlay)
- {
- SteamVR_Overlay instance = SteamVR_Overlay.instance;
- if (instance != null)
- {
- instance.alpha = 1f - this.currentColor.a;
- }
- }
- }
- if (this.currentColor.a > 0f && SteamVR_Fade.fadeMaterial)
- {
- GL.PushMatrix();
- GL.LoadOrtho();
- SteamVR_Fade.fadeMaterial.SetPass(0);
- GL.Begin(7);
- GL.Color(this.currentColor);
- GL.Vertex3(0f, 0f, 0f);
- GL.Vertex3(1f, 0f, 0f);
- GL.Vertex3(1f, 1f, 0f);
- GL.Vertex3(0f, 1f, 0f);
- GL.End();
- GL.PopMatrix();
- }
- }
- private Color currentColor = new Color(0f, 0f, 0f, 0f);
- private Color targetColor = new Color(0f, 0f, 0f, 0f);
- private Color deltaColor = new Color(0f, 0f, 0f, 0f);
- private bool fadeOverlay;
- private static Material fadeMaterial;
- }
|