summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-14 10:15:19 +0800
committerchai <chaifix@163.com>2020-10-14 10:15:19 +0800
commit4056f06baea18d3c5ae23c4a022fc6ae6b135bb2 (patch)
treeec33414096256b2df270ef43452ee21be55179df /Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs
parent104ca96a6581bddf48b769abdcb84842459260c3 (diff)
+dynamic bone
Diffstat (limited to 'Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs')
-rw-r--r--Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs76
1 files changed, 76 insertions, 0 deletions
diff --git a/Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs b/Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs
new file mode 100644
index 00000000..7265d26a
--- /dev/null
+++ b/Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs
@@ -0,0 +1,76 @@
+using UnityEngine;
+
+[AddComponentMenu("Dynamic Bone/Dynamic Bone Plane Collider")]
+public class DynamicBonePlaneCollider : DynamicBoneColliderBase
+{
+ void OnValidate()
+ {
+ }
+
+ public override bool Collide(ref Vector3 particlePosition, float particleRadius)
+ {
+ Vector3 normal = Vector3.up;
+ switch (m_Direction)
+ {
+ case Direction.X:
+ normal = transform.right;
+ break;
+ case Direction.Y:
+ normal = transform.up;
+ break;
+ case Direction.Z:
+ normal = transform.forward;
+ break;
+ }
+
+ Vector3 p = transform.TransformPoint(m_Center);
+ Plane plane = new Plane(normal, p);
+ float d = plane.GetDistanceToPoint(particlePosition);
+
+ if (m_Bound == Bound.Outside)
+ {
+ if (d < 0)
+ {
+ particlePosition -= normal * d;
+ return true;
+ }
+ }
+ else
+ {
+ if (d > 0)
+ {
+ particlePosition -= normal * d;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void OnDrawGizmosSelected()
+ {
+ if (!enabled)
+ return;
+
+ if (m_Bound == Bound.Outside)
+ Gizmos.color = Color.yellow;
+ else
+ Gizmos.color = Color.magenta;
+
+ Vector3 normal = Vector3.up;
+ switch (m_Direction)
+ {
+ case Direction.X:
+ normal = transform.right;
+ break;
+ case Direction.Y:
+ normal = transform.up;
+ break;
+ case Direction.Z:
+ normal = transform.forward;
+ break;
+ }
+
+ Vector3 p = transform.TransformPoint(m_Center);
+ Gizmos.DrawLine(p, p + normal);
+ }
+}