Mercurial > hg > Game > Games
annotate Orchestland/Assets/LeapMotion/DemoResources/Scripts/AerodynamicLeaf.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 |
rev | line source |
---|---|
1
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 /******************************************************************************\ |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 * Copyright (C) Leap Motion, Inc. 2011-2014. * |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 * Leap Motion proprietary. Licensed under Apache 2.0 * |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 * Available at http://www.apache.org/licenses/LICENSE-2.0.html * |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 \******************************************************************************/ |
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 using UnityEngine; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 using System.Collections; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 public class AerodynamicLeaf : MonoBehaviour { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 public float airDragForce = 0.2f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 public float airDragTorque = 0.001f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 // Air to water transition level. |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 public float waterHeight = 0.0f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 public float transitionWidth = 0.2f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 // Water drag. |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 public float waterDrag = 5.0f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 public float waterAngularDrag = 10.0f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 // Water forces. |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 public float waterBuoancyForce = 0.1f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 public float waterDragTorque = 0.002f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 public float waterDragForce = 0.002f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 public float waterSurfaceTorque = 0.002f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 // Water curent. |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 public Vector3 waterCurrentVelocity; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 public float waterCurrentForce = 0.1f; |
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 private float air_drag_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 private float air_angular_drag_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 private float drag_force_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 private float drag_torque_; |
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 void Start() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 air_drag_ = GetComponent<Rigidbody>().drag; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 air_angular_drag_ = GetComponent<Rigidbody>().angularDrag; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 drag_force_ = airDragForce; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 drag_torque_ = airDragTorque; |
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 void DragUpdate() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 Vector3 velocity = GetComponent<Rigidbody>().velocity; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 Vector3 normal = transform.up; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 float dot = Vector3.Dot(velocity, normal); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 GetComponent<Rigidbody>().AddForce(-normal * drag_force_ * dot); |
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 Vector3 cross = Vector3.Cross(velocity, normal); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 GetComponent<Rigidbody>().AddTorque(-drag_torque_ * cross); |
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 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 void AirUpdate() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 GetComponent<Rigidbody>().drag = air_drag_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 GetComponent<Rigidbody>().angularDrag = air_angular_drag_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 drag_force_ = airDragForce; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 drag_torque_ = airDragTorque; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 DragUpdate(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 void WaterUpdate(float level) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 GetComponent<Rigidbody>().drag = waterDrag; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 GetComponent<Rigidbody>().angularDrag = waterAngularDrag; |
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 drag_force_ = waterDragForce; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 drag_torque_ = waterDragTorque; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 DragUpdate(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 float transition = Mathf.Clamp(-level / transitionWidth, 0.0f, 1.0f); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 GetComponent<Rigidbody>().AddForce(new Vector3(0, waterBuoancyForce * transition, 0)); |
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 if (Vector3.Dot(transform.up, Vector3.up) >= 0) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 Vector3 torque_vector = Vector3.Cross(transform.up, Vector3.up); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 GetComponent<Rigidbody>().AddTorque((1 - transition) * waterSurfaceTorque * torque_vector); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 else { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 Vector3 torque_vector = Vector3.Cross(-transform.up, Vector3.up); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 GetComponent<Rigidbody>().AddTorque((1 - transition) * waterSurfaceTorque * torque_vector); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 // Running water current. |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 Vector3 delta_current = waterCurrentVelocity - GetComponent<Rigidbody>().velocity; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 delta_current.y = 0; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 GetComponent<Rigidbody>().AddForce(waterCurrentForce * delta_current); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 float UnitsAboveWater() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 return transform.position.y - waterHeight; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 } |
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 public bool TouchingWater() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 return UnitsAboveWater() < 0; |
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 void FixedUpdate() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 if (TouchingWater()) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 WaterUpdate(UnitsAboveWater()); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 else |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 AirUpdate(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 } |