Mercurial > hg > Game > Games
diff Orchestland/Assets/OVR/Scripts/Util/OVRScreenFade.cs @ 3:0030a1b971fb default tip
merge
author | Yuta ANSE <e135745@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2015 23:23:43 +0900 |
parents | f7675884f2a1 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orchestland/Assets/OVR/Scripts/Util/OVRScreenFade.cs Fri Jul 17 23:23:43 2015 +0900 @@ -0,0 +1,122 @@ +/************************************************************************************ + +Copyright : Copyright 2014 Oculus VR, LLC. All Rights reserved. + +Licensed under the Oculus VR Rift SDK License Version 3.2 (the "License"); +you may not use the Oculus VR Rift 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 + +http://www.oculusvr.com/licenses/LICENSE-3.2 + +Unless required by applicable law or agreed to in writing, the Oculus VR 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. + +************************************************************************************/ + +using UnityEngine; +using System.Collections; // required for Coroutines + +/// <summary> +/// Fades the screen from black after a new scene is loaded. +/// </summary> +public class OVRScreenFade : MonoBehaviour +{ + /// <summary> + /// How long it takes to fade. + /// </summary> + public float fadeTime = 2.0f; + + /// <summary> + /// The initial screen color. + /// </summary> + public Color fadeColor = new Color(0.01f, 0.01f, 0.01f, 1.0f); + + /// <summary> + /// The shader to use when rendering the fade. + /// </summary> + public Shader fadeShader = null; + + private Material fadeMaterial = null; + private bool isFading = false; + + /// <summary> + /// Initialize. + /// </summary> + void Awake() + { + // create the fade material + fadeMaterial = (fadeShader != null) ? new Material(fadeShader) : new Material(Shader.Find("Transparent/Diffuse")); + } + + /// <summary> + /// Starts the fade in + /// </summary> + void OnEnable() + { + StartCoroutine(FadeIn()); + } + + /// <summary> + /// Starts a fade in when a new level is loaded + /// </summary> + void OnLevelWasLoaded(int level) + { + StartCoroutine(FadeIn()); + } + + /// <summary> + /// Cleans up the fade material + /// </summary> + void OnDestroy() + { + if (fadeMaterial != null) + { + Destroy(fadeMaterial); + } + } + + /// <summary> + /// Fades alpha from 1.0 to 0.0 + /// </summary> + IEnumerator FadeIn() + { + float elapsedTime = 0.0f; + Color color = fadeMaterial.color = fadeColor; + isFading = true; + while (elapsedTime < fadeTime) + { + yield return new WaitForEndOfFrame(); + elapsedTime += Time.deltaTime; + color.a = 1.0f - Mathf.Clamp01(elapsedTime / fadeTime); + fadeMaterial.color = color; + } + isFading = false; + } + + /// <summary> + /// Renders the fade overlay when attached to a camera object + /// </summary> + void OnPostRender() + { + if (isFading) + { + fadeMaterial.SetPass(0); + GL.PushMatrix(); + GL.LoadOrtho(); + GL.Color(fadeMaterial.color); + GL.Begin(GL.QUADS); + GL.Vertex3(0f, 0f, -12f); + GL.Vertex3(0f, 1f, -12f); + GL.Vertex3(1f, 1f, -12f); + GL.Vertex3(1f, 0f, -12f); + GL.End(); + GL.PopMatrix(); + } + } +}