2024-10-18 16:04:50 +02:00

128 lines
3.7 KiB
C#

using UnityEngine;
using UnityEngine.EventSystems;
namespace FMODUnity
{
public abstract class EventHandler : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler
{
public string CollisionTag = "";
protected virtual void Start()
{
HandleGameEvent(EmitterGameEvent.ObjectStart);
}
protected virtual void OnDestroy()
{
HandleGameEvent(EmitterGameEvent.ObjectDestroy);
}
private void OnEnable()
{
HandleGameEvent(EmitterGameEvent.ObjectEnable);
}
private void OnDisable()
{
HandleGameEvent(EmitterGameEvent.ObjectDisable);
}
#if UNITY_PHYSICS_EXIST
private void OnTriggerEnter(Collider other)
{
if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag) || (other.attachedRigidbody && other.attachedRigidbody.CompareTag(CollisionTag)))
{
HandleGameEvent(EmitterGameEvent.TriggerEnter);
}
}
private void OnTriggerExit(Collider other)
{
if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag) || (other.attachedRigidbody && other.attachedRigidbody.CompareTag(CollisionTag)))
{
HandleGameEvent(EmitterGameEvent.TriggerExit);
}
}
#endif
#if UNITY_PHYSICS2D_EXIST
private void OnTriggerEnter2D(Collider2D other)
{
if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag))
{
HandleGameEvent(EmitterGameEvent.TriggerEnter2D);
}
}
private void OnTriggerExit2D(Collider2D other)
{
if (string.IsNullOrEmpty(CollisionTag) || other.CompareTag(CollisionTag))
{
HandleGameEvent(EmitterGameEvent.TriggerExit2D);
}
}
#endif
private void OnCollisionEnter()
{
HandleGameEvent(EmitterGameEvent.CollisionEnter);
}
private void OnCollisionExit()
{
HandleGameEvent(EmitterGameEvent.CollisionExit);
}
private void OnCollisionEnter2D()
{
HandleGameEvent(EmitterGameEvent.CollisionEnter2D);
}
private void OnCollisionExit2D()
{
HandleGameEvent(EmitterGameEvent.CollisionExit2D);
}
private void OnMouseEnter()
{
HandleGameEvent(EmitterGameEvent.ObjectMouseEnter);
}
private void OnMouseExit()
{
HandleGameEvent(EmitterGameEvent.ObjectMouseExit);
}
private void OnMouseDown()
{
HandleGameEvent(EmitterGameEvent.ObjectMouseDown);
}
private void OnMouseUp()
{
HandleGameEvent(EmitterGameEvent.ObjectMouseUp);
}
public void OnPointerEnter(PointerEventData eventData)
{
HandleGameEvent(EmitterGameEvent.UIMouseEnter);
}
public void OnPointerExit(PointerEventData eventData)
{
HandleGameEvent(EmitterGameEvent.UIMouseExit);
}
public void OnPointerDown(PointerEventData eventData)
{
HandleGameEvent(EmitterGameEvent.UIMouseDown);
}
public void OnPointerUp(PointerEventData eventData)
{
HandleGameEvent(EmitterGameEvent.UIMouseUp);
}
protected abstract void HandleGameEvent(EmitterGameEvent gameEvent);
}
}