public void UnRegisterListener(SceneRaycastHitListener listener) { if (!transformToListenerDownState.TryGetValue(listener.transform, out SceneRaycastHitListener _)) { throw new ArgumentException("Listener <" + listener.gameObject.name + "> was not registered."); } transformToListenerDownState.Remove(listener.transform); }
public void RegisterListener(SceneRaycastHitListener listener) { if (transformToListenerDownState.TryGetValue(listener.transform, out SceneRaycastHitListener _)) { throw new ArgumentException("Listener <" + listener.gameObject.name + "> has already been registered."); } transformToListenerDownState.Add(listener.transform, listener); }
private void Update() { if (Camera.main == null) { return; } secElapsedBetweenRaycasts += Time.deltaTime; Vector2 touchPosition; TouchPhase touchPhaseAndPosition = GetTouchPhaseAndPosition(out touchPosition); int num; switch (touchPhaseAndPosition) { case TouchPhase.Canceled: return; default: num = ((touchPhaseAndPosition == TouchPhase.Ended) ? 1 : 0); break; case TouchPhase.Began: num = 1; break; } bool flag = (byte)num != 0; if (secElapsedBetweenRaycasts > minSecBetweenRaycasts) { flag = true; secElapsedBetweenRaycasts -= minSecBetweenRaycasts; } if (!flag) { return; } Ray ray = Camera.main.ScreenPointToRay(touchPosition); int num2 = Physics.RaycastNonAlloc(ray, raycastHits); Array.Sort(raycastHits, (RaycastHit a, RaycastHit b) => a.distance.CompareTo(b.distance)); bool uiWasHit = EventSystem.current.IsPointerOverGameObject(); for (int i = 0; i < num2; i++) { RaycastHit hit = raycastHits[i]; if (transformToListenerDownState.TryGetValue(hit.transform, out SceneRaycastHitListener value)) { int num3; switch (touchPhaseAndPosition) { case TouchPhase.Began: value.DispatchTouchBegan(hit, i, uiWasHit); continue; case TouchPhase.Ended: num3 = ((!value.IsTouchDown) ? 1 : 0); break; default: num3 = 1; break; } if (num3 == 0) { value.DispatchTouchEnded(hit, i, uiWasHit); value.IsTouchDown = false; } else if (touchPhaseAndPosition == TouchPhase.Moved && value.IsTouchDown) { value.DispatchMoved(hit, i, uiWasHit); } else if (touchPhaseAndPosition == TouchPhase.Stationary && value.IsTouchDown) { value.DispatchStationary(hit, i, uiWasHit); } } } if (touchPhaseAndPosition == TouchPhase.Ended) { foreach (KeyValuePair <Transform, SceneRaycastHitListener> item in transformToListenerDownState) { SceneRaycastHitListener value2 = item.Value; value2.IsTouchDown = false; } } }