namespace VRTK { using UnityEngine; public struct CollisionTrackerEventArgs { public bool isTrigger; public Collision collision; public Collider collider; } public delegate void CollisionTrackerEventHandler(object sender, CollisionTrackerEventArgs e); public class VRTK_CollisionTracker : MonoBehaviour { public event CollisionTrackerEventHandler CollisionEnter; public event CollisionTrackerEventHandler CollisionStay; public event CollisionTrackerEventHandler CollisionExit; public event CollisionTrackerEventHandler TriggerEnter; public event CollisionTrackerEventHandler TriggerStay; public event CollisionTrackerEventHandler TriggerExit; protected void OnCollisionEnterEvent(CollisionTrackerEventArgs e) { if (CollisionEnter != null) { CollisionEnter(this, e); } } protected void OnCollisionStayEvent(CollisionTrackerEventArgs e) { if (CollisionStay != null) { CollisionStay(this, e); } } protected void OnCollisionExitEvent(CollisionTrackerEventArgs e) { if (CollisionExit != null) { CollisionExit(this, e); } } protected void OnTriggerEnterEvent(CollisionTrackerEventArgs e) { if (TriggerEnter != null) { TriggerEnter(this, e); } } protected void OnTriggerStayEvent(CollisionTrackerEventArgs e) { if (TriggerStay != null) { TriggerStay(this, e); } } protected void OnTriggerExitEvent(CollisionTrackerEventArgs e) { if (TriggerExit != null) { TriggerExit(this, e); } } protected virtual void OnCollisionEnter(Collision collision) { OnCollisionEnterEvent(SetCollisionTrackerEvent(false, collision, collision.collider)); } protected virtual void OnCollisionStay(Collision collision) { OnCollisionStayEvent(SetCollisionTrackerEvent(false, collision, collision.collider)); } protected virtual void OnCollisionExit(Collision collision) { OnCollisionExitEvent(SetCollisionTrackerEvent(false, collision, collision.collider)); } protected virtual void OnTriggerEnter(Collider collider) { OnTriggerEnterEvent(SetCollisionTrackerEvent(true, null, collider)); } protected virtual void OnTriggerStay(Collider collider) { OnTriggerStayEvent(SetCollisionTrackerEvent(true, null, collider)); } protected virtual void OnTriggerExit(Collider collider) { OnTriggerExitEvent(SetCollisionTrackerEvent(true, null, collider)); } protected virtual CollisionTrackerEventArgs SetCollisionTrackerEvent(bool isTrigger, Collision givenCollision, Collider givenCollider) { CollisionTrackerEventArgs e; e.isTrigger = isTrigger; e.collision = givenCollision; e.collider = givenCollider; return e; } } }