Example #1
0
        private Vector2 GetTouchPoint(TouchLocation touchLocation)
        {
            var point = ViewportAdapter?.PointToScreen((int)touchLocation.Position.X, (int)touchLocation.Position.Y)
                        ?? touchLocation.Position.ToPoint();

            return(new Vector2(point.X, point.Y));
        }
Example #2
0
 public TouchEventArgs(ViewportAdapter viewportAdapter, TimeSpan time, TouchLocation location)
 {
     ViewportAdapter  = viewportAdapter;
     RawTouchLocation = location;
     Time             = time;
     Position         = viewportAdapter?.PointToScreen((int)location.Position.X, (int)location.Position.Y)
                        ?? location.Position.ToPoint();
 }
 public MouseEventArgs(ViewportAdapter viewportAdapter, TimeSpan time, MouseState previousState,
                       MouseState currentState,
                       MouseButton button = MouseButton.None)
 {
     PreviousState = previousState;
     CurrentState  = currentState;
     Position      = viewportAdapter?.PointToScreen(currentState.X, currentState.Y)
                     ?? new Point(currentState.X, currentState.Y);
     Button           = button;
     ScrollWheelValue = currentState.ScrollWheelValue;
     ScrollWheelDelta = currentState.ScrollWheelValue - previousState.ScrollWheelValue;
     Time             = time;
 }
Example #4
0
        private void UpdateTouchState()
        {
            var position = ViewportAdapter.PointToScreen(InputManager.TouchPosition());

            if (BoundingRectangle().Intersects(new Rectangle(position, Vector2.One.ToPoint())))
            {
                if (InputManager.TouchDown())
                {
                    _touchedDown = true;
                    TouchStarted?.Invoke(this, position);
                }
                else if (InputManager.TouchUp() && _touchedDown)
                {
                    _touchedDown = false;
                    Tap?.Invoke(this, position);
                    Action?.Invoke(this, position);
                }
            }
            else
            {
                _touchedDown = false;
            }
        }
Example #5
0
        public WpfMouseEventArgs(
            ViewportAdapter viewportAdapter,
            TimeSpan time,
            MouseState previousState,
            MouseState currentState,
            MouseButton button = MouseButton.None)
        {
            this.PreviousState = previousState;
            this.CurrentState  = currentState;
            this.Position      = viewportAdapter != null?viewportAdapter.PointToScreen(currentState.X, currentState.Y) : new Point(currentState.X, currentState.Y);

            this.Button           = button;
            this.ScrollWheelValue = currentState.ScrollWheelValue;
            this.ScrollWheelDelta = currentState.ScrollWheelValue - previousState.ScrollWheelValue;
            this.Time             = time;
        }
        protected override void Update(GameTime gameTime)
        {
            var keyboardState           = Keyboard.GetState();
            var mouseState              = Mouse.GetState();
            var previousViewportAdapter = _currentViewportAdapter;

            if (keyboardState.IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            if (keyboardState.IsKeyDown(Keys.D))
            {
                SwitchAdapter(_defaultViewportAdapter);
            }

            if (keyboardState.IsKeyDown(Keys.S))
            {
                SwitchAdapter(_scalingViewportAdapter);
            }

            if (keyboardState.IsKeyDown(Keys.B))
            {
                SwitchAdapter(_boxingViewportAdapter);
            }

            // if we've changed the viewport adapter mid game we need to reset the viewport back to the window size
            // this wouldn't normally be required if you're only ever using one viewport adapter
            if (previousViewportAdapter != _currentViewportAdapter)
            {
                GraphicsDevice.Viewport = new Viewport(0, 0, Window.ClientBounds.Width, Window.ClientBounds.Height);
                _currentViewportAdapter.Reset();
            }

            // the viewport adapters can also scale mouse and touch input to the virtual resolution
            _mousePosition = _currentViewportAdapter.PointToScreen(mouseState.X, mouseState.Y);

            base.Update(gameTime);
        }
Example #7
0
        public void Process(int entityId)
        {
            var transform   = _transform2DMapper.Get(entityId);
            var interaction = _interaction2DMapper.Get(entityId);

            // Check for Events
            bool isHovered  = IsEntityHovered(transform, interaction, current_mouseState);
            bool wasHovered = IsEntityHovered(transform, interaction, prev_mouseState);

            // Interaction properties
            bool beingPressed = interaction.BeingPressed;
            bool beingDragged = interaction.BeingDragged;

            // MouseEnter
            if (CheckMouseEnter(isHovered, wasHovered))
            {
                interaction.TriggerEvent("MouseEnter", BuildMouseEvent(entityId));
            }

            // MouseLeave
            if (CheckMouseLeave(isHovered, wasHovered))
            {
                interaction.TriggerEvent("MouseLeave", BuildMouseEvent(entityId));
            }

            // MouseMove
            if (CheckMouseMove(isHovered))
            {
                interaction.TriggerEvent("MouseMove", BuildMouseEvent(entityId));
            }

            // MouseDown
            if (CheckMouseDown(isHovered))
            {
                // Set Being Pressed Property
                if (!beingPressed && current_mouseState.LeftButton == ButtonState.Pressed)
                {
                    interaction.BeingPressed = true;
                }

                interaction.TriggerEvent("MouseDown", BuildMouseEvent(entityId));
            }

            // MouseUp
            if (CheckMouseUp(isHovered))
            {
                interaction.TriggerEvent("MouseUp", BuildMouseEvent(entityId));
            }

            // Click
            if (CheckClick(beingPressed, isHovered))
            {
                interaction.TriggerEvent("Click", BuildMouseEvent(entityId));
            }

            // DragStart
            if (CheckDragStart(beingDragged, beingPressed, isHovered))
            {
                // Set Being Dragged Property
                interaction.BeingDragged = true;

                if (interaction.IsDraggable)
                {
                    _draggingEntity = entityId;

                    var mousePosition =
                        _viewportAdapter == null ?
                        current_mouseState.Position : _viewportAdapter.PointToScreen(current_mouseState.Position);

                    var pos = Vector2
                              .Transform(interaction.Origin, transform.WorldMatrix)
                              .ToPoint();

                    _dragStartPosition = mousePosition - pos;
                }

                interaction.TriggerEvent("DragStart", BuildDragEvent(entityId));
            }

            // DragEnd
            if (CheckDragEnd(beingDragged))
            {
                // Set Being Dragged Property
                interaction.BeingDragged = false;
                _draggingEntity          = -1;
                _dragStartPosition       = Point.Zero;

                interaction.TriggerEvent("DragEnd", BuildDragEvent(entityId));
            }

            // DragMove
            if (CheckDragMove(beingDragged))
            {
                // Move Entity if IsDraggable = true
                if (interaction.IsDraggable)
                {
                    var mousePosition =
                        _viewportAdapter == null ?
                        current_mouseState.Position : _viewportAdapter.PointToScreen(current_mouseState.Position);

                    var newPos = (mousePosition - _dragStartPosition).ToVector2();

                    newPos -= (transform.WorldPosition - transform.Position);

                    transform.Position = newPos;
                }

                interaction.TriggerEvent("DragMove", BuildDragEvent(entityId));
            }

            // DragEnter


            // DragLeave

            // Drop

            // BeingPressed - Check if Released
            if (beingPressed && current_mouseState.LeftButton == ButtonState.Released)
            {
                interaction.BeingPressed = false;
            }
        }
        private void SetUpInput()
        {
            _eventDrivenInput = new MonoGameInput(this);

            var up    = new Vector2(0, -250);
            var right = new Vector2(250, 0);

            //camera movment
            _eventDrivenInput.KeyDown += (sender, keyDown) =>
            {
                switch (keyDown.Key)
                {
                case Keys.Escape:
                    Exit();
                    break;

                case Keys.Q:
                    _cameraRotation += 1;
                    break;

                case Keys.W:
                    _cameraRotation -= 1;
                    break;

                case Keys.Up:
                    _cameraDirection += up;
                    break;

                case Keys.Down:
                    _cameraDirection += -up;
                    break;

                case Keys.Left:
                    _cameraDirection += -right;
                    break;

                case Keys.Right:
                    _cameraDirection += right;
                    break;
                }
            };

            _eventDrivenInput.KeyUp += (sender, keyUp) =>
            {
                switch (keyUp.Key)
                {
                case Keys.Q:
                    _cameraRotation -= 1;
                    break;

                case Keys.W:
                    _cameraRotation += 1;
                    break;

                case Keys.Up:
                    _cameraDirection -= up;
                    break;

                case Keys.Down:
                    _cameraDirection -= -up;
                    break;

                case Keys.Left:
                    _cameraDirection -= -right;
                    break;

                case Keys.Right:
                    _cameraDirection -= right;
                    break;
                }
            };

            // zoom
            _eventDrivenInput.MouseWheel += (sender, mouseEvent) =>
            {
                _camera.Zoom += mouseEvent.Delta.Value * 0.0001f;
            };

            // look at
            _eventDrivenInput.MouseUp += (sender, mouseUp) =>
            {
                if (mouseUp.Button == MouseButton.Left)
                {
                    var p = _viewportAdapter.PointToScreen(mouseUp.X, mouseUp.Y);
                    Trace.WriteLine(string.Format("{0},{1} => {2},{3}", mouseUp.X, mouseUp.Y, p.X, p.Y));
                }
            };
        }