using System; using System.IO; using UnityEngine; [AddComponentMenu("Dynamic Bone/Dynamic Bone Plane Collider")] public class DynamicBonePlaneCollider : DynamicBoneColliderBase { public override string TypeName { get { return "dpc"; } } public override void Serialize(BinaryWriter f_bw, int f_nVersion) { base.Serialize(f_bw, f_nVersion); } public override void Deserialize(BinaryReader f_br, int f_nVersion, Transform f_trBodyBoneRoot) { base.Deserialize(f_br, f_nVersion, f_trBodyBoneRoot); } private void OnValidate() { } public override bool Collide(ref Vector3 particlePosition, float particleRadius) { Vector3 vector = Vector3.up; DynamicBoneColliderBase.Direction direction = this.m_Direction; if (direction != DynamicBoneColliderBase.Direction.X) { if (direction != DynamicBoneColliderBase.Direction.Y) { if (direction == DynamicBoneColliderBase.Direction.Z) { vector = base.transform.forward; } } else { vector = base.transform.up; } } else { vector = base.transform.right; } Vector3 inPoint = base.transform.TransformPoint(this.m_Center); Plane plane = new Plane(vector, inPoint); float distanceToPoint = plane.GetDistanceToPoint(particlePosition); if (this.m_Bound == DynamicBoneColliderBase.Bound.Outside) { if (distanceToPoint < 0f) { particlePosition -= vector * distanceToPoint; return true; } } else if (distanceToPoint > 0f) { particlePosition -= vector * distanceToPoint; return true; } return false; } }