public void OnDrag(PointerEventData eventData) { position = eventData.position; List <IDragReceiver> dragReceivers; bool recordExists = dragReceiversByPointer.TryGetValue(eventData.pointerId, out dragReceivers); if (recordExists) { IDragReceiver dragReceiver = GetCloserObject(dragReceivers); if (dragReceiver != null) { dragReceiver?.OnDrag(InputController.Instance.ScreenToWorldPoint(eventData.position)); } } }
/// <summary> /// Obtener el receptor más cercano /// </summary> /// <param name="dragReceivers"></param> /// <returns></returns> public IDragReceiver GetCloserObject(List <IDragReceiver> dragReceivers) { if (dragReceivers.Count > 0) { IDragReceiver closer = dragReceivers[0]; float closerDistance = float.MaxValue; if (closer != null) { GameObject gameObject = closer.GetGameObject(); if (gameObject) { closerDistance = gameObject.transform.position.z - InputController.Instance.mainCamera.transform.position.z; } else { closer = null; } } for (int i = 1; i < dragReceivers.Count; i++) { float distance = float.MaxValue; if (dragReceivers[i] != null) { GameObject gameObject = dragReceivers[i].GetGameObject(); if (gameObject) { distance = gameObject.transform.position.z - InputController.Instance.mainCamera.transform.position.z; } } if (distance < closerDistance) { closerDistance = distance; closer = dragReceivers[i]; } } return(closer); } return(null); }
public void Register(IDragReceiver receiver) { DragReceivers.Add(receiver); }