SDM_LethalCompany_Mod/ScarletMansion/ScarletMansion/GamePatch/DynamicBone/DynamicBonePlaneCollider.cs

80 lines
No EOL
1.9 KiB
C#

using UnityEngine;
namespace ScarletMansion.GamePatch.DynamicBone {
[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);
}
}
}