public void UpdateMouse() { if (widgets == null) { return; } int i = 0; OGWidget w; // Click if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(2) || GetTouch() == TouchPhase.Began) { OGWidget topWidget = null; for (i = 0; i < mouseOver.Count; i++) { w = mouseOver[i]; if ((w.GetType() != typeof(OGScrollView) || (w as OGScrollView).touchControl) && (topWidget == null || w.transform.position.z < topWidget.transform.position.z) && w.isSelectable) { topWidget = w; } } if (downWidget && downWidget != topWidget) { downWidget.OnMouseCancel(); } if (topWidget != null && topWidget.CheckMouseOver() && !topWidget.isDisabled) { topWidget.OnMouseDown(); downWidget = topWidget; } // Release } else if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(2) || GetTouch() == TouchPhase.Ended || GetTouch() == TouchPhase.Canceled) { if (downWidget) { // Draggable if (downWidget.resetAfterDrag && downWidget.GetType() != typeof(OGScrollView)) { downWidget.transform.position = downWidget.dragOrigPos; downWidget.dragOffset = Vector3.zero; downWidget.dragOrigPos = Vector3.zero; } // Mouse over if ((downWidget.CheckMouseOver() || GetTouch() == TouchPhase.Ended) && !downWidget.isDisabled && downWidget.CheckMouseOver()) { downWidget.OnMouseUp(); // Mouse out } else { downWidget.OnMouseCancel(); } } // Dragging } else if (GetDragging() != Vector2.zero) { if (downWidget != null && !downWidget.isDisabled) { if (downWidget.clipTo && downWidget.clipTo.GetType() == typeof(OGScrollView) && (downWidget.clipTo as OGScrollView).touchControl) { OGWidget thisWidget = downWidget; thisWidget.OnMouseCancel(); downWidget = thisWidget.clipTo; } downWidget.OnMouseDrag(); if (downWidget.isDraggable && downWidget.GetType() != typeof(OGScrollView)) { Vector3 mousePos = Input.mousePosition; mousePos.y = screenHeight - mousePos.y; if (downWidget.dragOffset == Vector3.zero) { if (downWidget.resetAfterDrag) { downWidget.dragOrigPos = downWidget.transform.position; } downWidget.dragOffset = downWidget.transform.position - mousePos; } Vector3 newPos = downWidget.transform.position; newPos = mousePos + downWidget.dragOffset; downWidget.transform.position = newPos; } } } // Escape key if (Input.GetKeyDown(KeyCode.Escape)) { if (downWidget != null) { downWidget.OnMouseCancel(); ReleaseWidget(); } } }