comparison 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
comparison
equal deleted inserted replaced
0:347d21cdfc22 1:f7675884f2a1
1 using UnityEngine;
2 using System.Collections;
3 using System.Collections.Generic;
4 using LMWidgets;
5
6 public class SliderDemo : SliderBase
7 {
8 // ASSUME: Active Bar is a transform-sibling of SliderDemo
9 public GameObject activeBar = null;
10 // ASSUME: topLayer, midLayer & botLayer are transform-children of SliderDemo
11 public SliderDemoGraphics topLayer = null;
12 public SliderDemoGraphics midLayer = null;
13 public SliderDemoGraphics botLayer = null;
14 public GameObject dot = null;
15 public int numberOfDots = 0;
16
17 public Color BotLayerPressedColor = new Color(0.0f, 1.0f, 1.0f, 1.0f);
18 public Color BotLayerReleasedColor = new Color(0.0f, 0.25f, 0.25f, 0.5f);
19 public Color DotsOnColor = new Color(0.0f, 1.0f, 1.0f, 1.0f);
20 public Color DotsOffColor = new Color(0.0f, 0.25f, 0.25f, 0.5f);
21
22 private List<GameObject> dots = new List<GameObject>();
23
24 protected override void sliderPressed()
25 {
26 base.sliderPressed();
27 PressedGraphics();
28 }
29
30 protected override void sliderReleased()
31 {
32 base.sliderReleased();
33 ReleasedGraphics();
34 }
35
36 private void PressedGraphics()
37 {
38 topLayer.SetBloomGain(5.0f);
39 botLayer.SetBloomGain(4.0f);
40 botLayer.SetColor(BotLayerPressedColor);
41 }
42
43 private void ReleasedGraphics()
44 {
45 topLayer.SetBloomGain(2.0f);
46 botLayer.SetBloomGain(2.0f);
47 botLayer.SetColor(BotLayerReleasedColor);
48 }
49
50 protected override void onInteractionDisabled ()
51 {
52 base.onInteractionDisabled ();
53 topLayer.SetActive (false);
54 midLayer.SetActive (false);
55
56 // Turn off active bar.
57 Renderer[] renderers = activeBar.GetComponentsInChildren<Renderer> ();
58 foreach (Renderer renderer in renderers)
59 {
60 renderer.enabled = false;
61 }
62 }
63
64 protected override void onInteractionEnabled ()
65 {
66 base.onInteractionEnabled ();
67 topLayer.SetActive (true);
68 midLayer.SetActive (true);
69
70 // Turn on active bar.
71 Renderer[] renderers = activeBar.GetComponentsInChildren<Renderer> ();
72 foreach (Renderer renderer in renderers)
73 {
74 renderer.enabled = true;
75 }
76 }
77
78 // Updates the slider handle graphics
79 private void UpdateGraphics()
80 {
81 float handleFraction = GetHandleFraction();
82 Vector3 topPosition = transform.localPosition;
83 topPosition.x = 0f;
84 topPosition.y = 0f;
85 topPosition.z -= (1.0f - handleFraction) * 0.25f;
86 topPosition.z = Mathf.Min(topPosition.z, -0.003f); // -0.003 is so midLayer will never intersect with top or bot layer
87 topLayer.transform.localPosition = topPosition;
88
89 Vector3 botPosition = transform.localPosition;
90 botPosition.x = 0f;
91 topPosition.y = 0f;
92 botPosition.z = -0.001f;
93 botLayer.transform.localPosition = botPosition;
94
95 midLayer.transform.localPosition = (topPosition + botPosition) / 2.0f;
96
97 if (activeBar)
98 {
99 UpdateActiveBar();
100 }
101 if (numberOfDots > 0)
102 {
103 UpdateDots();
104 }
105 }
106
107 // Updates the active bar behind the handle
108 private void UpdateActiveBar()
109 {
110 Vector3 activeBarPosition = activeBar.transform.localPosition;
111 activeBarPosition.x = (transform.localPosition.x + lowerLimit.transform.localPosition.x) / 2.0f;
112 activeBar.transform.localPosition = activeBarPosition;
113 Vector3 activeBarScale = activeBar.transform.localScale;
114 activeBarScale.x = Mathf.Abs(transform.localPosition.x - lowerLimit.transform.localPosition.x);
115 activeBar.transform.localScale = activeBarScale;
116 Renderer[] renderers = activeBar.GetComponentsInChildren<Renderer>();
117 foreach (Renderer renderer in renderers)
118 {
119 renderer.material.SetFloat("_Gain", 3.0f);
120 }
121
122 if (GetSliderFraction() > 99.0f)
123 {
124 Renderer[] upper_limit_renderers = upperLimit.GetComponentsInChildren<Renderer>();
125 foreach (Renderer renderer in upper_limit_renderers)
126 {
127 renderer.enabled = true;
128 }
129 }
130 else
131 {
132 Renderer[] upper_limit_renderers = upperLimit.GetComponentsInChildren<Renderer>();
133 foreach (Renderer renderer in upper_limit_renderers)
134 {
135 renderer.enabled = false;
136 }
137 }
138 }
139
140 // Updates the dots above the slider
141 private void UpdateDots()
142 {
143 for (int i = 0; i < dots.Count; ++i)
144 {
145 if (dots[i].transform.localPosition.x < transform.localPosition.x)
146 {
147 Renderer[] renderers = dots[i].GetComponentsInChildren<Renderer>();
148 foreach (Renderer renderer in renderers)
149 {
150 renderer.material.color = DotsOnColor;
151 renderer.material.SetFloat("_Gain", 3.0f);
152 }
153 }
154 else
155 {
156 Renderer[] renderers = dots[i].GetComponentsInChildren<Renderer>();
157 foreach (Renderer renderer in renderers)
158 {
159 renderer.material.color = DotsOffColor;
160 renderer.material.SetFloat("_Gain", 1.0f);
161 }
162 }
163 }
164 }
165
166 protected override void Awake()
167 {
168 base.Awake();
169 // Initiate the graphics for the handle
170 ReleasedGraphics();
171
172 // Initiate the dots
173 if (numberOfDots > 0)
174 {
175 float lower_limit = lowerLimit.transform.localPosition.x;
176 float upper_limit = upperLimit.transform.localPosition.x;
177 float length = upper_limit - lower_limit;
178 float increments = length / numberOfDots;
179
180 for (float x = lower_limit + increments / 2.0f; x < upper_limit; x += increments)
181 {
182 GameObject new_dot = Instantiate(dot) as GameObject;
183 new_dot.transform.parent = transform;
184 new_dot.transform.localPosition = new Vector3(x, 1.0f, m_localTriggerDistance);
185 new_dot.transform.localRotation = dot.transform.localRotation;
186 new_dot.transform.localScale = Vector3.one;
187 new_dot.transform.parent = transform.parent;
188 dots.Add(new_dot);
189 }
190 Destroy(dot);
191 UpdateDots();
192 }
193
194 // Initiate the graphics for the active bar
195 if (activeBar)
196 {
197 UpdateActiveBar();
198 }
199 }
200
201 protected override void FixedUpdate()
202 {
203 base.FixedUpdate();
204 UpdateGraphics();
205 }
206 }