Advertisement
Guest User

Untitled

a guest
Jan 30th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.44 KB | None | 0 0
  1.  public class DragEventSender : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
  2.     {
  3.         /// <summary>
  4.         /// This object will recieve events if the current object is dragged horizontally.
  5.         /// </summary>
  6.         [SerializeField]
  7.         private GameObject m_HorizontalTargetObject;
  8.         /// <summary>
  9.         /// This object will recieve events if the current object is dragged horizontally.
  10.         /// </summary>
  11.         public GameObject horizontalTargetObject
  12.         {
  13.             get { return m_HorizontalTargetObject; }
  14.             set { m_HorizontalTargetObject = value; }
  15.         }
  16.  
  17.         /// <summary>
  18.         /// This object will recieve events if the current object is dragged to the left.
  19.         /// </summary>
  20.         [SerializeField]
  21.         private GameObject m_LeftTargetObject;
  22.         /// <summary>
  23.         /// This object will recieve events if the current object is dragged to the left.
  24.         /// </summary>
  25.         public GameObject leftTargetObject
  26.         {
  27.             get { return m_LeftTargetObject; }
  28.             set { m_LeftTargetObject = value; }
  29.         }
  30.  
  31.         /// <summary>
  32.         /// This object will recieve events if the current object is dragged to the right.
  33.         /// </summary>
  34.         [SerializeField]
  35.         private GameObject m_RightTargetObject;
  36.         /// <summary>
  37.         /// This object will recieve events if the current object is dragged to the right.
  38.         /// </summary>
  39.         public GameObject rightTargetObject
  40.         {
  41.             get { return m_RightTargetObject; }
  42.             set { m_RightTargetObject = value; }
  43.         }
  44.  
  45.         /// <summary>
  46.         /// This object will recieve events if the current object is dragged vertically.
  47.         /// </summary>
  48.         [SerializeField]
  49.         private GameObject m_VerticalTargetObject;
  50.         /// <summary>
  51.         /// This object will recieve events if the current object is dragged vertically.
  52.         /// </summary>
  53.         /// <value>
  54.         /// The vertical target object.
  55.         /// </value>
  56.         public GameObject verticalTargetObject
  57.         {
  58.             get { return m_VerticalTargetObject; }
  59.             set { m_VerticalTargetObject = value; }
  60.         }
  61.  
  62.         /// <summary>
  63.         /// This object will recieve events if the current object is dragged up.
  64.         /// </summary>
  65.         [SerializeField]
  66.         private GameObject m_UpTargetObject;
  67.         /// <summary>
  68.         /// This object will recieve events if the current object is dragged up.
  69.         /// </summary>
  70.         public GameObject upTargetObject
  71.         {
  72.             get { return m_UpTargetObject; }
  73.             set { m_UpTargetObject = value; }
  74.         }
  75.  
  76.         /// <summary>
  77.         /// This object will recieve events if the current object is dragged down.
  78.         /// </summary>
  79.         [SerializeField]
  80.         private GameObject m_DownTargetObject;
  81.         /// <summary>
  82.         /// This object will recieve events if the current object is dragged down.
  83.         /// </summary>
  84.         public GameObject downTargetObject
  85.         {
  86.             get { return m_DownTargetObject; }
  87.             set { m_DownTargetObject = value; }
  88.         }
  89.  
  90.         /// <summary>
  91.         /// This object will recieve events regardless of whether the current object is dragged horizontally or vertically.
  92.         /// </summary>
  93.         [SerializeField]
  94.         private GameObject m_AnyDirectionTargetObject;
  95.         /// <summary>
  96.         /// This object will recieve events regardless of whether the current object is dragged horizontally or vertically.
  97.         /// </summary>
  98.         /// <value>
  99.         /// Any direction target object.
  100.         /// </value>
  101.         public GameObject anyDirectionTargetObject
  102.         {
  103.             get { return m_AnyDirectionTargetObject; }
  104.             set { m_AnyDirectionTargetObject = value; }
  105.         }
  106.  
  107.         /// <summary>
  108.         /// On the last OnBeginDrag event, was the current object dragged horizontally?
  109.         /// </summary>
  110.         private bool m_CurrentDragIsHorizontal;
  111.  
  112.         /// <summary>
  113.         /// On the last OnBeginDrag event, was the current object dragged to the left?
  114.         /// </summary>
  115.         private bool m_CurrentDragIsLeft;
  116.  
  117.         /// <summary>
  118.         /// On the last OnBeginDrag event, was the current object dragged up?
  119.         /// </summary>
  120.         private bool m_CurrentDragIsUp;
  121.  
  122.         /// <summary>
  123.         /// Should horizontal drags in either direction send to the same object?
  124.         /// </summary>
  125.         [SerializeField]
  126.         private bool m_CombineLeftAndRight = true;
  127.         /// <summary>
  128.         /// Should horizontal drags in either direction send to the same object?
  129.         /// </summary>
  130.         public bool combineLeftAndRight
  131.         {
  132.             get { return m_CombineLeftAndRight; }
  133.             set { m_CombineLeftAndRight = value; }
  134.         }
  135.  
  136.         /// <summary>
  137.         /// Should vertical drags in either direction send to the same object?
  138.         /// </summary>
  139.         [SerializeField]
  140.         private bool m_CombineUpAndDown = true;
  141.         /// <summary>
  142.         /// Should vertical drags in either direction send to the same object?
  143.         /// </summary>
  144.         public bool combineUpAndDown
  145.         {
  146.             get { return m_CombineUpAndDown; }
  147.             set { m_CombineUpAndDown = value; }
  148.         }
  149.  
  150.         /// <summary>
  151.         /// When draging is occuring this will be called every time the cursor is moved.
  152.         /// </summary>
  153.         /// <param name="eventData">Current event data.</param>
  154.         public void OnDrag(PointerEventData eventData)
  155.         {
  156.             if (m_CurrentDragIsHorizontal)
  157.             {
  158.                 if (m_CombineLeftAndRight)
  159.                 {
  160.                     if (m_HorizontalTargetObject != null)
  161.                     {
  162.                         ExecuteEvents.ExecuteHierarchy(m_HorizontalTargetObject, eventData, ExecuteEvents.dragHandler);
  163.                     }
  164.                 }
  165.                 else
  166.                 {
  167.                     m_CurrentDragIsLeft = eventData.delta.x < 0;
  168.  
  169.                     if (m_CurrentDragIsLeft)
  170.                     {
  171.                         if (m_LeftTargetObject != null)
  172.                         {
  173.                             ExecuteEvents.ExecuteHierarchy(m_LeftTargetObject, eventData, ExecuteEvents.dragHandler);
  174.                         }
  175.                     }
  176.                     else
  177.                     {
  178.                         if (m_RightTargetObject != null)
  179.                         {
  180.                             ExecuteEvents.ExecuteHierarchy(m_RightTargetObject, eventData, ExecuteEvents.dragHandler);
  181.                         }
  182.                     }
  183.                 }
  184.             }
  185.             else
  186.             {
  187.                 if (m_CombineUpAndDown)
  188.                 {
  189.                     if (m_VerticalTargetObject != null)
  190.                     {
  191.                         ExecuteEvents.ExecuteHierarchy(m_VerticalTargetObject, eventData, ExecuteEvents.dragHandler);
  192.                     }
  193.                 }
  194.                 else
  195.                 {
  196.                     m_CurrentDragIsUp = eventData.delta.y > 0;
  197.  
  198.                     if (m_CurrentDragIsUp)
  199.                     {
  200.                         if (m_UpTargetObject != null)
  201.                         {
  202.                             ExecuteEvents.ExecuteHierarchy(m_UpTargetObject, eventData, ExecuteEvents.dragHandler);
  203.                         }
  204.                     }
  205.                     else
  206.                     {
  207.                         if (m_DownTargetObject != null)
  208.                         {
  209.                             ExecuteEvents.ExecuteHierarchy(m_DownTargetObject, eventData, ExecuteEvents.dragHandler);
  210.                         }
  211.                     }
  212.                 }
  213.             }
  214.  
  215.             if (m_AnyDirectionTargetObject != null)
  216.             {
  217.                 ExecuteEvents.ExecuteHierarchy(m_AnyDirectionTargetObject, eventData, ExecuteEvents.dragHandler);
  218.             }
  219.         }
  220.  
  221.         /// <summary>
  222.         /// Called by a BaseInputModule before a drag is started.
  223.         /// </summary>
  224.         /// <param name="eventData">Current event data.</param>
  225.         public void OnBeginDrag(PointerEventData eventData)
  226.         {
  227.             m_CurrentDragIsHorizontal = Mathf.Abs(eventData.delta.x) > Mathf.Abs(eventData.delta.y);
  228.  
  229.             if (m_CurrentDragIsHorizontal)
  230.             {
  231.                 if (m_CombineLeftAndRight)
  232.                 {
  233.                     if (m_HorizontalTargetObject != null)
  234.                     {
  235.                         ExecuteEvents.ExecuteHierarchy(m_HorizontalTargetObject, eventData, ExecuteEvents.beginDragHandler);
  236.                     }
  237.                 }
  238.                 else
  239.                 {
  240.                     m_CurrentDragIsLeft = eventData.delta.x < 0;
  241.  
  242.                     if (m_CurrentDragIsLeft)
  243.                     {
  244.                         if (m_LeftTargetObject != null)
  245.                         {
  246.                             ExecuteEvents.ExecuteHierarchy(m_LeftTargetObject, eventData, ExecuteEvents.beginDragHandler);
  247.                         }
  248.                     }
  249.                     else
  250.                     {
  251.                         if (m_RightTargetObject != null)
  252.                         {
  253.                             ExecuteEvents.ExecuteHierarchy(m_RightTargetObject, eventData, ExecuteEvents.beginDragHandler);
  254.                         }
  255.                     }
  256.                 }
  257.             }
  258.             else
  259.             {
  260.                 if (m_CombineUpAndDown)
  261.                 {
  262.                     if (m_VerticalTargetObject != null)
  263.                     {
  264.                         ExecuteEvents.ExecuteHierarchy(m_VerticalTargetObject, eventData, ExecuteEvents.beginDragHandler);
  265.                     }
  266.                 }
  267.                 else
  268.                 {
  269.                     m_CurrentDragIsUp = eventData.delta.y > 0;
  270.  
  271.                     if (m_CurrentDragIsUp)
  272.                     {
  273.                         if (m_UpTargetObject != null)
  274.                         {
  275.                             ExecuteEvents.ExecuteHierarchy(m_UpTargetObject, eventData, ExecuteEvents.beginDragHandler);
  276.                         }
  277.                     }
  278.                     else
  279.                     {
  280.                         if (m_DownTargetObject != null)
  281.                         {
  282.                             ExecuteEvents.ExecuteHierarchy(m_DownTargetObject, eventData, ExecuteEvents.beginDragHandler);
  283.                         }
  284.                     }
  285.                 }
  286.             }
  287.  
  288.             if (m_AnyDirectionTargetObject != null)
  289.             {
  290.                 ExecuteEvents.ExecuteHierarchy(m_AnyDirectionTargetObject, eventData, ExecuteEvents.beginDragHandler);
  291.             }
  292.         }
  293.  
  294.         /// <summary>
  295.         /// Called by a BaseInputModule when a drag is ended.
  296.         /// </summary>
  297.         /// <param name="eventData">Current event data.</param>
  298.         public void OnEndDrag(PointerEventData eventData)
  299.         {
  300.             if (m_CurrentDragIsHorizontal)
  301.             {
  302.                 if (m_CombineLeftAndRight)
  303.                 {
  304.                     if (m_HorizontalTargetObject != null)
  305.                     {
  306.                         ExecuteEvents.ExecuteHierarchy(m_HorizontalTargetObject, eventData, ExecuteEvents.endDragHandler);
  307.                     }
  308.                 }
  309.                 else
  310.                 {
  311.                     m_CurrentDragIsLeft = eventData.delta.x < 0;
  312.  
  313.                     if (m_CurrentDragIsLeft)
  314.                     {
  315.                         if (m_LeftTargetObject != null)
  316.                         {
  317.                             ExecuteEvents.ExecuteHierarchy(m_LeftTargetObject, eventData, ExecuteEvents.endDragHandler);
  318.                         }
  319.                     }
  320.                     else
  321.                     {
  322.                         if (m_RightTargetObject != null)
  323.                         {
  324.                             ExecuteEvents.ExecuteHierarchy(m_RightTargetObject, eventData, ExecuteEvents.endDragHandler);
  325.                         }
  326.                     }
  327.                 }
  328.             }
  329.             else
  330.             {
  331.                 if (m_CombineUpAndDown)
  332.                 {
  333.                     if (m_VerticalTargetObject != null)
  334.                     {
  335.                         ExecuteEvents.ExecuteHierarchy(m_VerticalTargetObject, eventData, ExecuteEvents.endDragHandler);
  336.                     }
  337.                 }
  338.                 else
  339.                 {
  340.                     m_CurrentDragIsUp = eventData.delta.y > 0;
  341.  
  342.                     if (m_CurrentDragIsUp)
  343.                     {
  344.                         if (m_UpTargetObject != null)
  345.                         {
  346.                             ExecuteEvents.ExecuteHierarchy(m_UpTargetObject, eventData, ExecuteEvents.endDragHandler);
  347.                         }
  348.                     }
  349.                     else
  350.                     {
  351.                         if (m_DownTargetObject != null)
  352.                         {
  353.                             ExecuteEvents.ExecuteHierarchy(m_DownTargetObject, eventData, ExecuteEvents.endDragHandler);
  354.                         }
  355.                     }
  356.                 }
  357.             }
  358.  
  359.             if (m_AnyDirectionTargetObject != null)
  360.             {
  361.                 ExecuteEvents.ExecuteHierarchy(m_AnyDirectionTargetObject, eventData, ExecuteEvents.endDragHandler);
  362.             }
  363.         }
  364.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement