Mercurial > hg > Game > Games
annotate Orchestland/Assets/LeapMotion/DemoResources/Scripts/StemMesh.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 StemMesh : 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 const int TRIANGLE_INDICES_PER_QUAD = 6; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 const int VERTICES_PER_QUAD = 4; |
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 public Collider[] segments; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 public int sides = 4; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 public AnimationCurve stemCurve; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 public float growthProgress = 0.0f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 public float stumpDiminishTime = 2.0f; |
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 private Vector3[] vertices_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 private bool[] broken; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 private float stump_width_ = 1.0f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 private bool is_diminishing_ = false; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 void Start () { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 broken = new bool[segments.Length]; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 for (int i = 0; i < broken.Length; ++i) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 broken[i] = false; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 MeshFilter filter = GetComponent<MeshFilter>(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 filter.mesh = new Mesh(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 InitMesh(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 filter.mesh.RecalculateBounds(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 filter.mesh.RecalculateNormals(); |
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 void Update () { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 UpdateMesh(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 MeshFilter filter = GetComponent<MeshFilter>(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 filter.mesh.MarkDynamic(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 filter.mesh.vertices = vertices_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 filter.mesh.RecalculateBounds(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 filter.mesh.RecalculateNormals(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 } |
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 public bool IsBroken() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 if (broken == null) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 return false; |
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 for (int i = 0; i < broken.Length; ++i) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 if (broken[i]) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 return true; |
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 return false; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 public bool IsStumpClear() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 return stump_width_ == 0.0f; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 } |
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 public void RemoveStump() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 is_diminishing_ = true; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 private void InitMesh() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 Mesh mesh = GetComponent<MeshFilter>().mesh; |
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 int num_vertices = sides * segments.Length; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 vertices_ = new Vector3[num_vertices]; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 Vector2[] uv = new Vector2[num_vertices]; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 int[] triangles = new int[TRIANGLE_INDICES_PER_QUAD * (num_vertices - sides)]; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 for (int v = 0; v < num_vertices; ++v) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 vertices_[v] = new Vector3(0, 0, 0); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 uv[v] = new Vector3(0, 0, 0); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 } |
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 int vertex_index = 0; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 for (int seg = 0; seg < segments.Length - 1; ++seg) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 if (segments[seg + 1].GetComponent<HingeJoint>() == null) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 for (int i = 0; i < sides * TRIANGLE_INDICES_PER_QUAD; ++i) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 triangles[vertex_index++] = 0; |
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 else { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 for (int side = 0; side < sides; ++side) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 int next_side = (side + 1) % sides; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 triangles[vertex_index++] = sides * seg + side; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 triangles[vertex_index++] = sides * seg + next_side; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 triangles[vertex_index++] = sides * (seg + 1) + next_side; |
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 triangles[vertex_index++] = sides * seg + side; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 triangles[vertex_index++] = sides * (seg + 1) + next_side; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 triangles[vertex_index++] = sides * (seg + 1) + side; |
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 } |
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 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 mesh.vertices = vertices_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 mesh.uv = uv; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 mesh.triangles = triangles; |
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 protected void Separate(int index) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 for (int i = 0; i < index; ++i) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 segments[i] = null; |
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 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 private void Break(int index) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 for (int i = index; i < segments.Length; ++i) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 segments[i] = null; |
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 } |
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 private void KillStump() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 for (int i = 0; i < broken.Length && !broken[i]; ++i) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 segments[i].GetComponent<Collider>().enabled = false; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 private void UpdateMesh() { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 if (is_diminishing_ && stump_width_ != 0.0f) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 stump_width_ -= Time.deltaTime / stumpDiminishTime; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 stump_width_ = Mathf.Clamp(stump_width_, 0.0f, 1.0f); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 if (stump_width_ == 0.0f) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 KillStump(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 for (int i = 0; i < segments.Length; ++i) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 if (!broken[i] && segments[i].GetComponent<HingeJoint>() == null) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 InitMesh(); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 broken[i] = true; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 int vertex_index = 0; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 float angle = 360.0f / sides; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 bool is_stump = true; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 for (int i = 0; i < segments.Length; ++i) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 float phase = (1.0f * i) / (segments.Length - 1); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 float width = Mathf.Clamp(segments.Length * growthProgress - i, 0.0f, 1.0f); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 is_stump = is_stump && !broken[i]; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 if (is_stump) |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 width *= stump_width_; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 Vector3 offset = new Vector3(width * stemCurve.Evaluate(phase), 0, 0); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 for (int side = 0; side < sides; ++side) { |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 vertices_[vertex_index++] = |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 transform.InverseTransformPoint(segments[i].transform.TransformPoint(offset)); |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 offset = Quaternion.AngleAxis(angle, Vector3.up) * offset; |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
157 } |
f7675884f2a1
Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
158 } |