void GetTouchHit(Vector3 _mousePos) { mCurFrameIsHitUI = NguiEx.IsHitUI(m_IgnoreNgui, m_IgnoreNguiColliderList); if (!mCurFrameIsHitUI) { mRay = m_Camera.ScreenPointToRay(_mousePos); if (Physics.Raycast(mRay, out mHit, Mathf.Infinity, m_LayerMask)) { mTouchCurHitListener = mHit.collider.gameObject.GetComponent <InputExListener>(); if (mTouchCurHitListener != null) { isHit = true; } else { isHit = false; } } else { isHit = false; } } else { isHit = false; } }
static public InputExListener Get(GameObject go) { InputExListener listener = go.GetComponent <InputExListener>(); if (listener != null) { return(listener); } else { listener = go.AddComponent <InputExListener>(); return(listener); } }
void GetMouseHit(Vector3 _mousePos) { mMouseCurMousePos = _mousePos; if (m_MouseHoverEnableOnlyMove ? (mMouseCurMousePos != mMouseOldMousePos) : true) { mCurFrameIsHitUI = NguiEx.IsHitUI(m_IgnoreNgui, m_IgnoreNguiColliderList); if (!mCurFrameIsHitUI) { mRay = m_Camera.ScreenPointToRay(mMouseCurMousePos); if (Physics.Raycast(mRay, out mHit, Mathf.Infinity, m_LayerMask)) { mMouseCurHitListener = mHit.collider.gameObject.GetComponent <InputExListener>(); if (mMouseCurHitListener != null) { isHit = true; } else { isHit = false; } } else { isHit = false; } } else { isHit = false; } if (m_MouseHoverEnableOnlyMove) { mMouseOldMousePos = mMouseCurMousePos; } } }
void TouchMethod() { mCurTouchCount = Input.touchCount; if (mTouchDoubleClickTesting) { if (mCurTouchDoubleClickTestTime <= m_TouchDoubleClickTime) { mCurTouchDoubleClickTestTime += Time.deltaTime; } else { mTouchDoubleClickTesting = false; } } if (mCurTouchCount >= 1) { switch (Input.GetTouch(0).phase) { case TouchPhase.Began: #region Begin GetTouchHit(Input.GetTouch(0).position); if (!mTouchDoubleClickTesting) { mCurTouchDoubleClickTestTime = 0f; mTouchDoubleClickTesting = true; if (isHit) { //Click mTouchCurHitListener.TouchClick(); //Press Start if (mTouchOldPressListener != null) { mTouchOldPressListener.TouchPress(false); } mTouchCurHitListener.TouchPress(true); mTouchOldPressListener = mTouchCurHitListener; } } else { if (mCurTouchDoubleClickTestTime <= m_TouchDoubleClickTime) { mTouchDoubleClickTesting = false; GetTouchHit(Input.GetTouch(0).position); if (isHit) { // Double Click mTouchCurHitListener.TouchDoubleClick(); } else { if (onTouch_DoubleClickNull != null) { onTouch_DoubleClickNull(); } } } } break; #endregion case TouchPhase.Stationary: #region Stationary if (mTouchLongPressTesting) { mCurTouchLongPressTime += Time.deltaTime; if (mCurTouchLongPressTime >= m_TouchLongPressTime) { mTouchLongPressTesting = false; if (isHit) { //Long Press mTouchCurHitListener.TouchLongPress(); mCurTouchLongPressTime = 0f; } } } else { mTouchLongPressTesting = true; mCurTouchLongPressTime = 0f; } break; #endregion case TouchPhase.Moved: if (mTouchLongPressTesting) { mTouchLongPressTesting = false; } break; case TouchPhase.Ended: #region Ended if (mTouchOldPressListener != null) { mTouchOldPressListener.TouchPress(false); mTouchOldPressListener = null; } break; #endregion } } else { if (mTouchOldPressListener != null) { mTouchOldPressListener.TouchPress(false); mTouchOldPressListener = null; } } }
void MouseMethod() { GetMouseHit(Input.mousePosition); #region Mouse Press if (Input.GetMouseButtonDown(0)) { if (isHit) { mMouseCurHitPressListener = mMouseCurHitListener; if (mMouseCurHitPressListener != null) { mMouseCurHitPressListener.MouseOnPress(true); mMousePressing = true; } } } else if (Input.GetMouseButtonUp(0) || Input.GetMouseButton(1) || Input.GetMouseButton(2)) { if (mMouseCurHitPressListener != null) { mMouseCurHitPressListener.MouseOnPress(false); mMousePressing = false; mMouseCurHitPressListener = null; } } #endregion #region Mouse Hover if (!mMousePressing && isHit) { mMouseCurHitHoverListener = mMouseCurHitListener; if (mMouseOldHitHoverListener == null) { mMouseCurHitHoverListener.MouseOnHover(true, mHit); mMouseOldHitHoverListener = mMouseCurHitHoverListener; } else { if (mMouseCurHitHoverListener != mMouseOldHitHoverListener) { mMouseCurHitHoverListener.MouseOnHover(true, mHit); mMouseOldHitHoverListener.MouseOnHover(false, mHit); mMouseOldHitHoverListener = mMouseCurHitHoverListener; } } } else { if (mMouseOldHitHoverListener != null) { mMouseOldHitHoverListener.MouseOnHover(false, mHit); mMouseOldHitHoverListener = null; } } #endregion #region Mouse Click Double Click if (mMouseIsTestDoubleClick) { mMouseTestDoubleClickTime += Time.deltaTime; if (mMouseTestDoubleClickTime <= m_MouseDoubleClickTime) { if (Input.GetMouseButtonDown(0)) { if (isHit) { mMouseCurDoubleClickHitListener.MouseOnDoubleClick(); } else { if (onMouse_DoubleClickNull != null) { onMouse_DoubleClickNull(); } } } } else { mMouseIsTestDoubleClick = false; mMouseIsTestEndDoubleClick = true; } } if (!mMouseIsTestEndDoubleClick) { if (!mMouseIsTestDoubleClick && Input.GetMouseButtonDown(0)) { if (isHit) { mMouseCurClickHitListener = mMouseCurHitListener; mMouseCurClickHitListener.MouseOnClick(); } mMouseCurDoubleClickHitListener = mMouseCurHitListener; mMouseIsTestDoubleClick = true; mMouseTestDoubleClickTime = 0f; } } else { mMouseIsTestEndDoubleClick = false; } #endregion }
void Start() { InputExListener.Get(m_TestGO).onMouseClick += delegate(GameObject _go) { print("CC " + _go.name); }; InputExListener.Get(m_TestGO).onMouseDoubleClick += delegate(GameObject _go) { print("DC " + _go.name); }; InputExListener.Get(m_TestGO).onMousePress += delegate(GameObject _go, bool _isPress) { print("PP" + _go.name + " " + _isPress.ToString()); }; InputExListener.Get(m_TestGO).onMouseHover += delegate(GameObject _go, bool _isPress) { print("Hover" + _go.name + " " + _isPress.ToString()); }; InputExListener.Get(m_TestGO).onTouchClick += delegate(GameObject _go) { clickCount++; clickName = _go.name; }; InputExListener.Get(m_TestGO).onTouchDoubleClick += delegate(GameObject _go) { doubleClickCount++; clickName = _go.name; }; InputExListener.Get(m_TestGO).onTouchPress += delegate(GameObject _go, bool _isPress) { if (_isPress) { pressTCount++; clickName = _go.name; } else { pressFCount++; clickName = _go.name; } }; InputExListener.Get(m_TestGO).onTouchLongPress += delegate(GameObject _go) { longPressCount++; clickName = _go.name; }; /// InputExListener.Get(m_TestGO2).onTouchClick += delegate(GameObject _go) { clickCount++; clickName = _go.name; }; InputExListener.Get(m_TestGO2).onTouchDoubleClick += delegate(GameObject _go) { doubleClickCount++; clickName = _go.name; }; InputExListener.Get(m_TestGO2).onTouchPress += delegate(GameObject _go, bool _isPress) { if (_isPress) { pressTCount++; clickName = _go.name; } else { pressFCount++; clickName = _go.name; } }; InputExListener.Get(m_TestGO2).onTouchLongPress += delegate(GameObject _go) { longPressCount++; clickName = _go.name; }; }