Firstborn/Assets/DynamicBone/Scripts/DynamicBonePlaneCollider.cs
Schaken-Mods 959e80cf72 assets upload
assets upload description.
2023-03-28 12:16:30 -05:00

95 lines
2.1 KiB
C#

using UnityEngine;
[AddComponentMenu("Dynamic Bone/Dynamic Bone Plane Collider")]
public class DynamicBonePlaneCollider : DynamicBoneColliderBase
{
// prepare data
Plane m_Plane;
void OnValidate()
{
}
public override void Prepare()
{
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);
m_Plane.SetNormalAndPosition(normal, p);
}
public override bool Collide(ref Vector3 particlePosition, float particleRadius)
{
float d = m_Plane.GetDistanceToPoint(particlePosition);
if (m_Bound == Bound.Outside)
{
if (d < 0)
{
particlePosition -= m_Plane.normal * d;
return true;
}
}
else
{
if (d > 0)
{
particlePosition -= m_Plane.normal * d;
return true;
}
}
/* // consider particleRadius
if (m_Bound == Bound.Outside)
{
if (d < particleRadius)
{
particlePosition += m_Plane.normal * (particleRadius - d);
return true;
}
}
else
{
if (d > -particleRadius)
{
particlePosition -= m_Plane.normal * (particleRadius + d);
return true;
}
}
*/
return false;
}
void OnDrawGizmosSelected()
{
if (!enabled)
return;
Prepare();
if (m_Bound == Bound.Outside)
{
Gizmos.color = Color.yellow;
}
else
{
Gizmos.color = Color.magenta;
}
Vector3 p = transform.TransformPoint(m_Center);
Gizmos.DrawLine(p, p + m_Plane.normal);
}
}