Pro_Unit

TriggerLayersActions

Dec 11th, 2018
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.53 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3.  
  4. using UnityEngine;
  5. using UnityEngine.Events;
  6.  
  7. namespace GameCore
  8. {
  9.     [RequireComponent (typeof (Collider))]
  10.     public class TriggerLayersActions : MonoBehaviour
  11.     {
  12.         private Collider _collider = null;
  13.         public new Collider collider { get { if (_collider == null) _collider = GetComponent<Collider> (); return _collider; } }
  14.         private void Awake () { collider.isTrigger = true; }
  15.  
  16.         [SerializeField] List<LayersAction> OnEnterTrigger;
  17.         [SerializeField] List<LayersAction> OnExitTrigger;
  18.         public void AddOnEnterAction (LayerMask layermask, UnityEventGameObject action)
  19.         {
  20.             OnEnterTrigger.Add (new LayersAction () { layermask = layermask, action = action });
  21.         }
  22.         public void AddOnExitAction (LayerMask layermask, UnityAction<GameObject> action)
  23.         {
  24.             var LayersAction = OnExitTrigger.Find (ta => ta.layermask == layermask);
  25.             if (LayersAction == null) return;
  26.             LayersAction.action.AddListener (action);
  27.         }
  28.  
  29.         private void OnTriggerEnter (Collider other)
  30.         {
  31.             foreach (var trigger in OnEnterTrigger)
  32.                 trigger.Invoke (other.gameObject);
  33.         }
  34.  
  35.         private void OnTriggerExit (Collider other)
  36.         {
  37.             foreach (var trigger in OnExitTrigger)
  38.                 trigger.Invoke (other.gameObject);
  39.         }
  40.     }
  41.  
  42.     [System.Serializable]
  43.     public class LayersAction
  44.     {
  45.         public LayerMask layermask;
  46.         public UnityEventGameObject action;
  47.         public void Invoke (GameObject go)
  48.         {
  49.             if (layermask == (layermask | (1 << go.layer)))
  50.             {
  51.                 action.Invoke (go);
  52.             }
  53.         }
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment