Mercurial > hg > Game > Games
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 } |