ValeTouchReceiver RaycastForReceiver(Vector3 localizedScreenPosition) { //Debug.Log(localizedScreenPosition); Vector3 mouseWorldPos = raycastCamera.ScreenToWorldPoint(localizedScreenPosition + Vector3.forward * raycastCamera.nearClipPlane); //Debug.Log(mouseWorldPos); Collider2D collider = Physics2D.OverlapArea(mouseWorldPos - mousetipSize / 2, mouseWorldPos + mousetipSize / 2, layers); if (collider == null) { return(null); } ValeTouchReceiver hitMouseInteractable = collider.GetComponent <ValeTouchReceiver>(); if (hitMouseInteractable != null) { return(hitMouseInteractable); } return(null); }
void ProcessTouchEventsOnReceivers(ValeTouchReceiver newlyActivatedReceiver) { if (newlyActivatedReceiver != null) { newlyActivatedReceiver.onTouchDown.Invoke(); } if (activatedReceiver != null) { if (touchEnabled) { foreach (Touch touch in Input.touches) { if (touch.fingerId == touchID) { if (touch.phase == TouchPhase.Ended) { activatedReceiver.onTouchUp.Invoke(); activatedReceiver = newlyActivatedReceiver; } } } } else { if (Input.GetMouseButtonUp(0)) { activatedReceiver.onTouchUp.Invoke(); activatedReceiver = newlyActivatedReceiver; } } } if (activatedReceiver == null && newlyActivatedReceiver != null) { activatedReceiver = newlyActivatedReceiver; } }
void Update() { hasActiveTouch = false; ValeTouchReceiver newlyActivatedReceiver = null; if (isWindowMode) { UpdateScreenRelationship(); if (touchEnabled) { foreach (Touch touch in Input.touches) { if (!screenBounds.Value.Contains(touch.position)) { continue; } if (!hasActiveTouch) { activeTouch = touch; hasActiveTouch = true; } if (touch.phase == TouchPhase.Began) { newlyActivatedReceiver = RaycastForReceiver(LocalizeScreenPosition(touch.position)); } if (newlyActivatedReceiver != null) { touchID = touch.fingerId; break; } } } else if (Input.GetMouseButtonDown(0)) { if (screenBounds.Value.Contains(Input.mousePosition)) { newlyActivatedReceiver = RaycastForReceiver(mousePosition); } } } else { if (touchEnabled) { foreach (Touch touch in Input.touches) { if (!hasActiveTouch) { activeTouch = touch; hasActiveTouch = true; } if (touch.phase == TouchPhase.Began) { newlyActivatedReceiver = RaycastForReceiver(touch.position); } if (newlyActivatedReceiver != null) { touchID = touch.fingerId; break; } } } else if (Input.GetMouseButtonDown(0)) { newlyActivatedReceiver = RaycastForReceiver(Input.mousePosition); } } ProcessTouchEventsOnReceivers(newlyActivatedReceiver); UpdateTouchGlobalEvents(); }