protected virtual void SetWidgetHover() { OnHoverEvent handler = OnWidgetHover; if (handler != null) { handler(this); } }
/// <summary> /// This method is in charge of checking collisions, your mouse position in the gui, and fires events based /// on user actions. /// </summary> private void CheckBounds() { bool inBounds = Util.InRect(Scene.MouseX, Scene.MouseY, Scene.CameraX + PosX, Scene.CameraY + PosY, Width, Height); if (inBounds && CheckMouseClick()) { Click(); } else if (!inBounds && Input.Instance.MouseButtonPressed(MouseButton.Left)) { if (!hasOnInactiveFired) { OnInactiveEvent.Invoke(this, null); } isActive = false; } else if (inBounds && !hasClicked) { if (!hasOnHoverFired) { OnHoverEvent.Invoke(this, null); } } else if (!inBounds && !hasClicked) { if (isActive) { if (!hasOnActiveFired) { OnActiveEvent.Invoke(this, null); } } else { if (!hasOnInactiveFired) { OnInactiveEvent.Invoke(this, null); } } } }
public override void Tick() { Ray inputRay = m_camera.ScreenPointToRay(Input.mousePosition); float penetration; if (m_inputPlane.Raycast(inputRay, out penetration)) { //get world input position Vector3 inputPosition = m_inputPlane.ClosestPointOnPlane(inputRay.GetPoint(penetration)); #if UNITY_EDITOR Debug.DrawLine(inputRay.origin, inputPosition); #endif //convert to 'board' space inputPosition -= m_cornerTransform.position; Vector2Int boardInputPosition = new Vector2Int(Mathf.RoundToInt(inputPosition.x / Constants.GridSize), Mathf.RoundToInt(inputPosition.y / Constants.GridSize)); OnHoverEvent.Invoke(boardInputPosition); if (m_firstPieceClicked) { OnHoverEvent.Invoke(m_clickOriginPosition); } //handle mouse drag if (Input.GetMouseButtonDown(0)) { m_dragOriginPosition = boardInputPosition; OnOriginSelectedEvent.Invoke(m_dragOriginPosition); } else if (Input.GetMouseButton(0)) { Vector2Int delta = boardInputPosition - m_dragOriginPosition; if (Mathf.Abs(delta.x) + Mathf.Abs(delta.y) == 1) { //end input state OnStateEnd.Invoke(this); OnSwapEvent.Invoke(new PieceMoveData(-1, m_dragOriginPosition, boardInputPosition)); return; } } //handle click if (Input.GetMouseButtonUp(0)) { if (m_firstPieceClicked) { Vector2Int delta = boardInputPosition - m_clickOriginPosition; if (Mathf.Abs(delta.x) + Mathf.Abs(delta.y) == 1) { OnSwapEvent.Invoke(new PieceMoveData(-1, m_clickOriginPosition, boardInputPosition)); //end input state OnStateEnd.Invoke(this); return; } } m_firstPieceClicked = true; m_clickOriginPosition = boardInputPosition; } } }