A game about forced loneliness, made by TACStudios
at master 358 lines 12 kB view raw
1using System; 2using System.Collections.Generic; 3using UnityEngine.Events; 4using UnityEngine.Serialization; 5 6namespace UnityEngine.EventSystems 7{ 8 [AddComponentMenu("Event/Event Trigger")] 9 /// <summary> 10 /// Receives events from the EventSystem and calls registered functions for each event. 11 /// </summary> 12 /// <remarks> 13 /// The EventTrigger can be used to specify functions you wish to be called for each EventSystem event. 14 /// You can assign multiple functions to a single event and whenever the EventTrigger receives that event it will call those functions in the order they were provided. 15 /// 16 /// NOTE: Attaching this component to a GameObject will make that object intercept ALL events, and no events will propagate to parent objects. 17 /// </remarks> 18 /// <example> 19 /// There are two ways to intercept events: You could extend EventTrigger, and override the functions for the events you are interested in intercepting; as shown in this example: 20 /// <code> 21 /// <![CDATA[ 22 /// using UnityEngine; 23 /// using UnityEngine.EventSystems; 24 /// 25 /// public class EventTriggerExample : EventTrigger 26 /// { 27 /// public override void OnBeginDrag(PointerEventData data) 28 /// { 29 /// Debug.Log("OnBeginDrag called."); 30 /// } 31 /// 32 /// public override void OnCancel(BaseEventData data) 33 /// { 34 /// Debug.Log("OnCancel called."); 35 /// } 36 /// 37 /// public override void OnDeselect(BaseEventData data) 38 /// { 39 /// Debug.Log("OnDeselect called."); 40 /// } 41 /// 42 /// public override void OnDrag(PointerEventData data) 43 /// { 44 /// Debug.Log("OnDrag called."); 45 /// } 46 /// 47 /// public override void OnDrop(PointerEventData data) 48 /// { 49 /// Debug.Log("OnDrop called."); 50 /// } 51 /// 52 /// public override void OnEndDrag(PointerEventData data) 53 /// { 54 /// Debug.Log("OnEndDrag called."); 55 /// } 56 /// 57 /// public override void OnInitializePotentialDrag(PointerEventData data) 58 /// { 59 /// Debug.Log("OnInitializePotentialDrag called."); 60 /// } 61 /// 62 /// public override void OnMove(AxisEventData data) 63 /// { 64 /// Debug.Log("OnMove called."); 65 /// } 66 /// 67 /// public override void OnPointerClick(PointerEventData data) 68 /// { 69 /// Debug.Log("OnPointerClick called."); 70 /// } 71 /// 72 /// public override void OnPointerDown(PointerEventData data) 73 /// { 74 /// Debug.Log("OnPointerDown called."); 75 /// } 76 /// 77 /// public override void OnPointerEnter(PointerEventData data) 78 /// { 79 /// Debug.Log("OnPointerEnter called."); 80 /// } 81 /// 82 /// public override void OnPointerExit(PointerEventData data) 83 /// { 84 /// Debug.Log("OnPointerExit called."); 85 /// } 86 /// 87 /// public override void OnPointerUp(PointerEventData data) 88 /// { 89 /// Debug.Log("OnPointerUp called."); 90 /// } 91 /// 92 /// public override void OnScroll(PointerEventData data) 93 /// { 94 /// Debug.Log("OnScroll called."); 95 /// } 96 /// 97 /// public override void OnSelect(BaseEventData data) 98 /// { 99 /// Debug.Log("OnSelect called."); 100 /// } 101 /// 102 /// public override void OnSubmit(BaseEventData data) 103 /// { 104 /// Debug.Log("OnSubmit called."); 105 /// } 106 /// 107 /// public override void OnUpdateSelected(BaseEventData data) 108 /// { 109 /// Debug.Log("OnUpdateSelected called."); 110 /// } 111 /// } 112 /// ]]> 113 ///</code> 114 /// or you can specify individual delegates: 115 /// <code> 116 /// <![CDATA[ 117 /// using UnityEngine; 118 /// using UnityEngine.EventSystems; 119 /// 120 /// 121 /// public class EventTriggerDelegateExample : MonoBehaviour 122 /// { 123 /// void Start() 124 /// { 125 /// EventTrigger trigger = GetComponent<EventTrigger>(); 126 /// EventTrigger.Entry entry = new EventTrigger.Entry(); 127 /// entry.eventID = EventTriggerType.PointerDown; 128 /// entry.callback.AddListener((data) => { OnPointerDownDelegate((PointerEventData)data); }); 129 /// trigger.triggers.Add(entry); 130 /// } 131 /// 132 /// public void OnPointerDownDelegate(PointerEventData data) 133 /// { 134 /// Debug.Log("OnPointerDownDelegate called."); 135 /// } 136 /// } 137 /// ]]> 138 ///</code> 139 /// </example> 140 public class EventTrigger : 141 MonoBehaviour, 142 IPointerEnterHandler, 143 IPointerExitHandler, 144 IPointerDownHandler, 145 IPointerUpHandler, 146 IPointerClickHandler, 147 IInitializePotentialDragHandler, 148 IBeginDragHandler, 149 IDragHandler, 150 IEndDragHandler, 151 IDropHandler, 152 IScrollHandler, 153 IUpdateSelectedHandler, 154 ISelectHandler, 155 IDeselectHandler, 156 IMoveHandler, 157 ISubmitHandler, 158 ICancelHandler 159 { 160 [Serializable] 161 /// <summary> 162 /// UnityEvent class for Triggers. 163 /// </summary> 164 public class TriggerEvent : UnityEvent<BaseEventData> 165 {} 166 167 [Serializable] 168 /// <summary> 169 /// An Entry in the EventSystem delegates list. 170 /// </summary> 171 /// <remarks> 172 /// It stores the callback and which event type should this callback be fired. 173 /// </remarks> 174 public class Entry 175 { 176 /// <summary> 177 /// What type of event is the associated callback listening for. 178 /// </summary> 179 public EventTriggerType eventID = EventTriggerType.PointerClick; 180 181 /// <summary> 182 /// The desired TriggerEvent to be Invoked. 183 /// </summary> 184 public TriggerEvent callback = new TriggerEvent(); 185 } 186 187 [FormerlySerializedAs("delegates")] 188 [SerializeField] 189 private List<Entry> m_Delegates; 190 191 [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] 192 [Obsolete("Please use triggers instead (UnityUpgradable) -> triggers", true)] 193 public List<Entry> delegates { get { return triggers; } set { triggers = value; } } 194 195 protected EventTrigger() 196 {} 197 198 /// <summary> 199 /// All the functions registered in this EventTrigger 200 /// </summary> 201 public List<Entry> triggers 202 { 203 get 204 { 205 if (m_Delegates == null) 206 m_Delegates = new List<Entry>(); 207 return m_Delegates; 208 } 209 set { m_Delegates = value; } 210 } 211 212 private void Execute(EventTriggerType id, BaseEventData eventData) 213 { 214 for (int i = 0; i < triggers.Count; ++i) 215 { 216 var ent = triggers[i]; 217 if (ent.eventID == id && ent.callback != null) 218 ent.callback.Invoke(eventData); 219 } 220 } 221 222 /// <summary> 223 /// Called by the EventSystem when the pointer enters the object associated with this EventTrigger. 224 /// </summary> 225 public virtual void OnPointerEnter(PointerEventData eventData) 226 { 227 Execute(EventTriggerType.PointerEnter, eventData); 228 } 229 230 /// <summary> 231 /// Called by the EventSystem when the pointer exits the object associated with this EventTrigger. 232 /// </summary> 233 public virtual void OnPointerExit(PointerEventData eventData) 234 { 235 Execute(EventTriggerType.PointerExit, eventData); 236 } 237 238 /// <summary> 239 /// Called by the EventSystem every time the pointer is moved during dragging. 240 /// </summary> 241 public virtual void OnDrag(PointerEventData eventData) 242 { 243 Execute(EventTriggerType.Drag, eventData); 244 } 245 246 /// <summary> 247 /// Called by the EventSystem when an object accepts a drop. 248 /// </summary> 249 public virtual void OnDrop(PointerEventData eventData) 250 { 251 Execute(EventTriggerType.Drop, eventData); 252 } 253 254 /// <summary> 255 /// Called by the EventSystem when a PointerDown event occurs. 256 /// </summary> 257 public virtual void OnPointerDown(PointerEventData eventData) 258 { 259 Execute(EventTriggerType.PointerDown, eventData); 260 } 261 262 /// <summary> 263 /// Called by the EventSystem when a PointerUp event occurs. 264 /// </summary> 265 public virtual void OnPointerUp(PointerEventData eventData) 266 { 267 Execute(EventTriggerType.PointerUp, eventData); 268 } 269 270 /// <summary> 271 /// Called by the EventSystem when a Click event occurs. 272 /// </summary> 273 public virtual void OnPointerClick(PointerEventData eventData) 274 { 275 Execute(EventTriggerType.PointerClick, eventData); 276 } 277 278 /// <summary> 279 /// Called by the EventSystem when a Select event occurs. 280 /// </summary> 281 public virtual void OnSelect(BaseEventData eventData) 282 { 283 Execute(EventTriggerType.Select, eventData); 284 } 285 286 /// <summary> 287 /// Called by the EventSystem when a new object is being selected. 288 /// </summary> 289 public virtual void OnDeselect(BaseEventData eventData) 290 { 291 Execute(EventTriggerType.Deselect, eventData); 292 } 293 294 /// <summary> 295 /// Called by the EventSystem when a new Scroll event occurs. 296 /// </summary> 297 public virtual void OnScroll(PointerEventData eventData) 298 { 299 Execute(EventTriggerType.Scroll, eventData); 300 } 301 302 /// <summary> 303 /// Called by the EventSystem when a Move event occurs. 304 /// </summary> 305 public virtual void OnMove(AxisEventData eventData) 306 { 307 Execute(EventTriggerType.Move, eventData); 308 } 309 310 /// <summary> 311 /// Called by the EventSystem when the object associated with this EventTrigger is updated. 312 /// </summary> 313 public virtual void OnUpdateSelected(BaseEventData eventData) 314 { 315 Execute(EventTriggerType.UpdateSelected, eventData); 316 } 317 318 /// <summary> 319 /// Called by the EventSystem when a drag has been found, but before it is valid to begin the drag. 320 /// </summary> 321 public virtual void OnInitializePotentialDrag(PointerEventData eventData) 322 { 323 Execute(EventTriggerType.InitializePotentialDrag, eventData); 324 } 325 326 /// <summary> 327 /// Called before a drag is started. 328 /// </summary> 329 public virtual void OnBeginDrag(PointerEventData eventData) 330 { 331 Execute(EventTriggerType.BeginDrag, eventData); 332 } 333 334 /// <summary> 335 /// Called by the EventSystem once dragging ends. 336 /// </summary> 337 public virtual void OnEndDrag(PointerEventData eventData) 338 { 339 Execute(EventTriggerType.EndDrag, eventData); 340 } 341 342 /// <summary> 343 /// Called by the EventSystem when a Submit event occurs. 344 /// </summary> 345 public virtual void OnSubmit(BaseEventData eventData) 346 { 347 Execute(EventTriggerType.Submit, eventData); 348 } 349 350 /// <summary> 351 /// Called by the EventSystem when a Cancel event occurs. 352 /// </summary> 353 public virtual void OnCancel(BaseEventData eventData) 354 { 355 Execute(EventTriggerType.Cancel, eventData); 356 } 357 } 358}