You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
3.1 KiB

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. /// <summary>
  5. /// Class which component which an LogicElementUI can be dragged into should derive from
  6. /// </summary>
  7. public abstract class LogicElementHolder : MonoBehaviour
  8. {
  9. /// <summary>
  10. /// List of all Holders in scene
  11. /// </summary>
  12. private static List<LogicElementHolder> EnabledHolders = new List<LogicElementHolder>();
  13. #region Unity Functions
  14. protected virtual void OnEnable()
  15. {
  16. EnabledHolders.Add(this);
  17. }
  18. protected virtual void OnDisable()
  19. {
  20. EnabledHolders.Remove(this);
  21. }
  22. #endregion
  23. #region Class Funtions
  24. /// <summary>
  25. /// When a LogicElement has started being dragged from this holder
  26. /// </summary>
  27. /// <param name="element">Element which is being dragged</param>
  28. public abstract void OnRemove(LogicElementUI element);
  29. /// <summary>
  30. /// When a logicElement needs to be added back to this holder
  31. /// </summary>
  32. /// <param name="element">Element which is being Added</param>
  33. public abstract void OnAdd(LogicElementUI element);
  34. /// <summary>
  35. /// When a logic Element is hovering over this holder
  36. /// </summary>
  37. /// <param name="element">Element which is hovering</param>
  38. public virtual void OnHover(LogicElementUI element) { }
  39. /// <summary>
  40. /// First frame a logic Element is hovering over this holder
  41. /// </summary>
  42. /// <param name="element">Element which is hovering</param>
  43. public virtual void OnHoverStart(LogicElementUI element) { }
  44. /// <summary>
  45. /// first frame a logic Element is no longer hovering over this holder
  46. /// </summary>
  47. /// <param name="element">Element which is hovering</param>
  48. public virtual void OnHoverEnd(LogicElementUI element) { }
  49. /// <summary>
  50. /// Called when an element in this holder is double clicked
  51. /// </summary>
  52. /// <param name="element">element which was double clicked</param>
  53. public abstract void OnDoubleClick(LogicElementUI element);
  54. #endregion Class Funtions
  55. #region Static Functions
  56. /// <summary>
  57. /// Gets an array of Any element holders a RectTransform is overlapping with
  58. /// </summary>
  59. /// <param name="rt">recttransform to check overlapping</param>
  60. /// <returns>array of Any element holders a rt is overlapping with</returns>
  61. public static LogicElementHolder[] OverlappingElements(RectTransform rt)
  62. {
  63. List<LogicElementHolder> retVal = new List<LogicElementHolder>();
  64. Rect rect = rt.GlobalRect();
  65. Rect holderRect;
  66. foreach (LogicElementHolder holder in EnabledHolders)
  67. {
  68. holderRect = (holder.transform as RectTransform).GlobalRect();
  69. if (rect.Overlaps(holderRect))
  70. retVal.Add(holder);
  71. }
  72. return retVal.ToArray();
  73. }
  74. public static void DebugDrawAll(Color color, float duration = 0.0f, bool depthTest = false)
  75. {
  76. EnabledHolders.ForEach(p => DebugExtensions.DrawRect(p.transform as RectTransform, color,duration, depthTest));
  77. }
  78. #endregion
  79. }