Mercurial > hg > Game > Games
annotate Orchestland/Assets/LeapMotion/Widgets/Scripts/Button/ButtonBase.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 |
rev | line source |
---|---|
1
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 using UnityEngine; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 using System; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 using System.Collections; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 namespace LMWidgets |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 public abstract class ButtonBase : LeapPhysicsSpring, BinaryInteractionHandler<bool> |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 // Binary Interaction Handler - Fires when interaction with the widget starts. |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 public event EventHandler<LMWidgets.EventArg<bool>> StartHandler; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 // Binary Interaction Handler - Fires when interaction with the widget ends. |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 public event EventHandler<LMWidgets.EventArg<bool>> EndHandler; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 public float triggerDistance = 0.025f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 public float cushionThickness = 0.005f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 protected float scaled_spring_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 protected float scaled_trigger_distance_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 protected float scaled_cushion_thickness_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 protected float min_distance_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 protected float max_distance_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 protected float m_localTriggerDistance; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 protected float m_localCushionThickness; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 protected bool m_isPressed = false; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 protected virtual void buttonReleased () |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 FireButtonEnd (); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 protected virtual void buttonPressed () |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 FireButtonStart (); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 protected void FireButtonStart (bool value = true) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 EventHandler<LMWidgets.EventArg<bool>> handler = StartHandler; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 if (handler != null) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 handler (this, new LMWidgets.EventArg<bool> (value)); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 protected void FireButtonEnd (bool value = false) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 EventHandler<LMWidgets.EventArg<bool>> handler = EndHandler; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 if (handler != null) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 handler (this, new LMWidgets.EventArg<bool> (value)); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 /// <summary> |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 /// Returns the fraction of position of the button between rest and trigger. 0.0 = At Rest. 1.0 = At Triggered Distance. |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 /// </summary> |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 /// <returns>fraction</returns> |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 public float GetFraction() |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 if (triggerDistance == 0.0f) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 return 0.0f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 else |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 float fraction = transform.localPosition.z / m_localTriggerDistance; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 return Mathf.Clamp(fraction, 0.0f, 1.0f); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 /// <summary> |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 /// Constrain the button to the z-axis |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 /// </summary> |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 protected override void ApplyConstraints() |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 Vector3 localPosition = transform.localPosition; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 localPosition.x = 0.0f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 localPosition.y = 0.0f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 localPosition.z = Mathf.Max(localPosition.z, 0.0f); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 transform.localPosition = localPosition; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 /// <summary> |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 /// Check if the button is being pressed or not |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 /// </summary> |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 private void CheckTrigger() |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 float scale = transform.lossyScale.z; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 m_localTriggerDistance = triggerDistance / scale; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 m_localCushionThickness = Mathf.Clamp(cushionThickness / scale, 0.0f, m_localTriggerDistance - 0.001f); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 if (m_isPressed == false) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 if (transform.localPosition.z > m_localTriggerDistance) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 m_isPressed = true; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 buttonPressed(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 else if (m_isPressed == true) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 if (transform.localPosition.z < (m_localTriggerDistance - m_localCushionThickness)) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 m_isPressed = false; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 buttonReleased(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 protected virtual void Start() |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 cushionThickness = Mathf.Clamp(cushionThickness, 0.0f, triggerDistance - 0.001f); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 protected virtual void Update() |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 CheckTrigger(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 } |