Mercurial > hg > Game > Games
diff Orchestland/Assets/LeapMotion/Widgets/Scripts/DemoScripts/SliderDemo.cs @ 1:f7675884f2a1
Add Orchestland project
author | Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2015 23:09:20 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orchestland/Assets/LeapMotion/Widgets/Scripts/DemoScripts/SliderDemo.cs Fri Jul 17 23:09:20 2015 +0900 @@ -0,0 +1,206 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using LMWidgets; + +public class SliderDemo : SliderBase +{ + // ASSUME: Active Bar is a transform-sibling of SliderDemo + public GameObject activeBar = null; + // ASSUME: topLayer, midLayer & botLayer are transform-children of SliderDemo + public SliderDemoGraphics topLayer = null; + public SliderDemoGraphics midLayer = null; + public SliderDemoGraphics botLayer = null; + public GameObject dot = null; + public int numberOfDots = 0; + + public Color BotLayerPressedColor = new Color(0.0f, 1.0f, 1.0f, 1.0f); + public Color BotLayerReleasedColor = new Color(0.0f, 0.25f, 0.25f, 0.5f); + public Color DotsOnColor = new Color(0.0f, 1.0f, 1.0f, 1.0f); + public Color DotsOffColor = new Color(0.0f, 0.25f, 0.25f, 0.5f); + + private List<GameObject> dots = new List<GameObject>(); + + protected override void sliderPressed() + { + base.sliderPressed(); + PressedGraphics(); + } + + protected override void sliderReleased() + { + base.sliderReleased(); + ReleasedGraphics(); + } + + private void PressedGraphics() + { + topLayer.SetBloomGain(5.0f); + botLayer.SetBloomGain(4.0f); + botLayer.SetColor(BotLayerPressedColor); + } + + private void ReleasedGraphics() + { + topLayer.SetBloomGain(2.0f); + botLayer.SetBloomGain(2.0f); + botLayer.SetColor(BotLayerReleasedColor); + } + + protected override void onInteractionDisabled () + { + base.onInteractionDisabled (); + topLayer.SetActive (false); + midLayer.SetActive (false); + + // Turn off active bar. + Renderer[] renderers = activeBar.GetComponentsInChildren<Renderer> (); + foreach (Renderer renderer in renderers) + { + renderer.enabled = false; + } + } + + protected override void onInteractionEnabled () + { + base.onInteractionEnabled (); + topLayer.SetActive (true); + midLayer.SetActive (true); + + // Turn on active bar. + Renderer[] renderers = activeBar.GetComponentsInChildren<Renderer> (); + foreach (Renderer renderer in renderers) + { + renderer.enabled = true; + } + } + + // Updates the slider handle graphics + private void UpdateGraphics() + { + float handleFraction = GetHandleFraction(); + Vector3 topPosition = transform.localPosition; + topPosition.x = 0f; + topPosition.y = 0f; + topPosition.z -= (1.0f - handleFraction) * 0.25f; + topPosition.z = Mathf.Min(topPosition.z, -0.003f); // -0.003 is so midLayer will never intersect with top or bot layer + topLayer.transform.localPosition = topPosition; + + Vector3 botPosition = transform.localPosition; + botPosition.x = 0f; + topPosition.y = 0f; + botPosition.z = -0.001f; + botLayer.transform.localPosition = botPosition; + + midLayer.transform.localPosition = (topPosition + botPosition) / 2.0f; + + if (activeBar) + { + UpdateActiveBar(); + } + if (numberOfDots > 0) + { + UpdateDots(); + } + } + + // Updates the active bar behind the handle + private void UpdateActiveBar() + { + Vector3 activeBarPosition = activeBar.transform.localPosition; + activeBarPosition.x = (transform.localPosition.x + lowerLimit.transform.localPosition.x) / 2.0f; + activeBar.transform.localPosition = activeBarPosition; + Vector3 activeBarScale = activeBar.transform.localScale; + activeBarScale.x = Mathf.Abs(transform.localPosition.x - lowerLimit.transform.localPosition.x); + activeBar.transform.localScale = activeBarScale; + Renderer[] renderers = activeBar.GetComponentsInChildren<Renderer>(); + foreach (Renderer renderer in renderers) + { + renderer.material.SetFloat("_Gain", 3.0f); + } + + if (GetSliderFraction() > 99.0f) + { + Renderer[] upper_limit_renderers = upperLimit.GetComponentsInChildren<Renderer>(); + foreach (Renderer renderer in upper_limit_renderers) + { + renderer.enabled = true; + } + } + else + { + Renderer[] upper_limit_renderers = upperLimit.GetComponentsInChildren<Renderer>(); + foreach (Renderer renderer in upper_limit_renderers) + { + renderer.enabled = false; + } + } + } + + // Updates the dots above the slider + private void UpdateDots() + { + for (int i = 0; i < dots.Count; ++i) + { + if (dots[i].transform.localPosition.x < transform.localPosition.x) + { + Renderer[] renderers = dots[i].GetComponentsInChildren<Renderer>(); + foreach (Renderer renderer in renderers) + { + renderer.material.color = DotsOnColor; + renderer.material.SetFloat("_Gain", 3.0f); + } + } + else + { + Renderer[] renderers = dots[i].GetComponentsInChildren<Renderer>(); + foreach (Renderer renderer in renderers) + { + renderer.material.color = DotsOffColor; + renderer.material.SetFloat("_Gain", 1.0f); + } + } + } + } + + protected override void Awake() + { + base.Awake(); + // Initiate the graphics for the handle + ReleasedGraphics(); + + // Initiate the dots + if (numberOfDots > 0) + { + float lower_limit = lowerLimit.transform.localPosition.x; + float upper_limit = upperLimit.transform.localPosition.x; + float length = upper_limit - lower_limit; + float increments = length / numberOfDots; + + for (float x = lower_limit + increments / 2.0f; x < upper_limit; x += increments) + { + GameObject new_dot = Instantiate(dot) as GameObject; + new_dot.transform.parent = transform; + new_dot.transform.localPosition = new Vector3(x, 1.0f, m_localTriggerDistance); + new_dot.transform.localRotation = dot.transform.localRotation; + new_dot.transform.localScale = Vector3.one; + new_dot.transform.parent = transform.parent; + dots.Add(new_dot); + } + Destroy(dot); + UpdateDots(); + } + + // Initiate the graphics for the active bar + if (activeBar) + { + UpdateActiveBar(); + } + } + + protected override void FixedUpdate() + { + base.FixedUpdate(); + UpdateGraphics(); + } +}