コード例 #1
0
        /// <summary>
        /// Updates the internal adminstrates and triggers events where required.
        /// </summary>
        void HandleOnStep()
        {
            //mouse can enter/leave target without moving (the target may move!)
            bool isOnTarget = _target.collider.Enabled && _target.HitTestPoint(MyGame.WorldMousePosition.x, MyGame.WorldMousePosition.y);

            if (isOnTarget && !_wasOnTarget)
            {
                OnMouseOverTarget?.Invoke(_target, MouseEventType.MouseOverTarget);
            }
            else if (!isOnTarget && _wasOnTarget)
            {
                OnMouseOffTarget?.Invoke(_target, MouseEventType.MouseOffTarget);
            }

            //did we just press the mouse down?
            if (!_wasMouseDown && Input.GetMouseButton(0))
            {
                OnMouseDown?.Invoke(_target, MouseEventType.MouseDown);
                if (isOnTarget)
                {
                    OnMouseDownOnTarget?.Invoke(_target, MouseEventType.MouseDownOnTarget);
                }
                _wasMouseDown         = true;
                _wasMouseDownOnTarget = isOnTarget;

                _offset   = _target.TransformPoint(0, 0);
                _offset.x = _offset.x - Input.mouseX;
                _offset.y = _offset.y - Input.mouseY;
            }
            else if (_wasMouseDown && !Input.GetMouseButton(0))
            {
                OnMouseUp?.Invoke(_target, MouseEventType.MouseUp);
                if (isOnTarget)
                {
                    OnMouseUpOnTarget?.Invoke(_target, MouseEventType.MouseUpOnTarget);
                }
                if (isOnTarget && _wasMouseDownOnTarget)
                {
                    OnMouseClick?.Invoke(_target, MouseEventType.MouseClick);
                }

                _wasMouseDown         = false;
                _wasMouseDownOnTarget = false;
                _offset.x             = _offset.y = 0;
            }

            if (_lastX != Input.mouseX || _lastY != Input.mouseY)
            {
                _lastX = Input.mouseX;
                _lastY = Input.mouseY;
                if (OnMouseMove != null)
                {
                    OnMouseMove(_target, MouseEventType.MouseMove);
                }
                if (isOnTarget)
                {
                    OnMouseMoveOnTarget?.Invoke(_target, MouseEventType.MouseMoveOnTarget);
                }
            }

            _wasOnTarget = isOnTarget;
        }
コード例 #2
0
ファイル: MouseHandler.cs プロジェクト: Stepup2000/SlimeGame
        /// <summary>
        /// Updates the internal adminstrates and triggers events where required.
        /// </summary>
        void HandleOnStep()
        {
            //mouse can enter/leave target without moving (the target may move!)
            bool isOnTarget = _target.HitTestPoint(Input.mouseX, Input.mouseY);

            if (isOnTarget && !_wasOnTarget)
            {
                if (OnMouseOverTarget != null)
                {
                    OnMouseOverTarget(_target, MouseEventType.MouseOverTarget);
                }
            }
            else if (!isOnTarget && _wasOnTarget)
            {
                if (OnMouseOffTarget != null)
                {
                    OnMouseOffTarget(_target, MouseEventType.MouseOffTarget);
                }
            }

            //did we just press the mouse down?
            if (!_wasMouseDown && Input.GetMouseButton(0))
            {
                if (OnMouseDown != null)
                {
                    OnMouseDown(_target, MouseEventType.MouseDown);
                }
                if (isOnTarget && OnMouseDownOnTarget != null)
                {
                    OnMouseDownOnTarget(_target, MouseEventType.MouseDownOnTarget);
                }
                _wasMouseDown         = true;
                _wasMouseDownOnTarget = isOnTarget;

                _offset   = _target.TransformPoint(0, 0);
                _offset.x = _offset.x - Input.mouseX;
                _offset.y = _offset.y - Input.mouseY;
            }
            else if (_wasMouseDown && !Input.GetMouseButton(0))
            {
                if (OnMouseUp != null)
                {
                    OnMouseUp(_target, MouseEventType.MouseUp);
                }
                if (isOnTarget && OnMouseUpOnTarget != null)
                {
                    OnMouseUpOnTarget(_target, MouseEventType.MouseUpOnTarget);
                }
                if (isOnTarget && _wasMouseDownOnTarget && OnMouseClick != null)
                {
                    OnMouseClick(_target, MouseEventType.MouseClick);
                }

                _wasMouseDown         = false;
                _wasMouseDownOnTarget = false;
                _offset.x             = _offset.y = 0;
            }

            if (_lastX != Input.mouseX || _lastY != Input.mouseY)
            {
                _lastX = Input.mouseX;
                _lastY = Input.mouseY;
                if (OnMouseMove != null)
                {
                    OnMouseMove(_target, MouseEventType.MouseMove);
                }
                if (isOnTarget && OnMouseMoveOnTarget != null)
                {
                    OnMouseMoveOnTarget(_target, MouseEventType.MouseMoveOnTarget);
                }
            }

            _wasOnTarget = isOnTarget;
        }