Esempio n. 1
0
        private void CalculateTouchMessages(TouchCollection newTouchState)
        {
            if (TouchStateHasChanged(newTouchState))
            {
                // Current touch points
                for (int i = 0; i < Math.Min(newTouchState.Count, MAXIMUM_SUPPORTED_TOUCH_POINTS); i++)
                {
                    var touch = newTouchState[i];
                    CalculatePointerMessages(new Vector2(touch.Position.X, touch.Position.Y),
                                             PointerNewlyPressed(touch),
                                             PointerNewlyReleased(touch));
                }

                //// Releasing of previous touch points
                foreach (var touch in _oldTouchState.Where(oldT => newTouchState.Where(newT => newT.Id == oldT.Id).Count() == 0))
                {
                    CalculatePointerMessages(new Vector2(touch.Position.X, touch.Position.Y),
                                             false,
                                             true);
                }
            }
        }
Esempio n. 2
0
        public bool AreaClick(Rectangle area)
        {
            if (_touchState.Count > 0)
            {
                return(_touchState.Where((t, i) =>
                                         area.Contains(t.Position) &&
                                         (t.State == TouchLocationState.Released &&
                                          _oldTouchState[i].State == TouchLocationState.Moved)).Any());
            }

            if (area.Contains(_mouseState.Position) &&
                _mouseState.LeftButton == ButtonState.Released &&
                _oldMouseState.LeftButton == ButtonState.Pressed)
            {
                return(true);
            }

            return(false);
        }
Esempio n. 3
0
        private void CalculateTouchMessages(TouchCollection newTouchState)
        {
            if (TouchStateHasChanged(newTouchState))
            {
                // Current touch points
                for (int i = 0; i < Math.Min(newTouchState.Count, MAXIMUM_SUPPORTED_TOUCH_POINTS); i++)
                {
                    var touch = newTouchState[i];
                    CalculatePointerMessages(new Vector2(touch.Position.X, touch.Position.Y),
                        PointerNewlyPressed(touch),
                        PointerNewlyReleased(touch));
                }

                //// Releasing of previous touch points
                foreach (var touch in _oldTouchState.Where(oldT => newTouchState.Where(newT => newT.Id == oldT.Id).Count() == 0))
                {
                    CalculatePointerMessages(new Vector2(touch.Position.X, touch.Position.Y),
                        false,
                        true);
                }
            }
        }
Esempio n. 4
0
        internal static void update_input_state(
            Services.Input.IInputService inputService)
        {
            if (inputService != null)
            {
                // Buttons
                foreach (Inputs input in InputEnums)
                {
                    inputService.update_input(
                        input,
                        pressed(input),
                        triggered(input),
                        released(input),
                        repeated(input));
                }

                // Mouse
                inputService.update_mouse(
                    new Vector2(MouseState.X, MouseState.Y),
                    MouseDownLocs,
                    ControlScheme != ControlSchemes.Mouse ? 0 :
                    MouseState.ScrollWheelValue - LastMouseState.ScrollWheelValue);
                foreach (MouseButtons input in MouseEnums)
                {
                    if (input != MouseButtons.None)
                    {
                        inputService.update_input(
                            input,
                            mouse_pressed(input),
                            mouse_triggered(input),
                            mouse_released(input),
                            MouseButtonClicks.HasEnumFlag(input) &&
                            IsControllingOnscreenMouse);
                    }
                }

#if __MOBILE__ || TOUCH_EMULATION
                // Touch
                if (!GameActive)
                {
                    inputService.update_touch(
                        false, false, false, Vector2.Zero, Vector2.Zero);
                }
                else
                {
                    var touch_presses = _touchCollection
                                        .Where(x => x.State == TouchLocationState.Pressed ||
                                               x.State == TouchLocationState.Moved);
                    var touch_triggers = _touchCollection
                                         .Where(x => x.State == TouchLocationState.Pressed);
                    var touch_releases = _touchCollection
                                         .Where(x => x.State == TouchLocationState.Released);

                    Vector2 touch_press_loc = touch_presses.Any() ? (touch_presses
                                                                     .Aggregate(Vector2.Zero, (a, b) => a + b.Position) /
                                                                     touch_presses.Count()) :
                                              Vector2.Zero;
                    Vector2 touch_release_loc = touch_releases.Any() ? (touch_releases
                                                                        .Aggregate(Vector2.Zero, (a, b) => a + b.Position) /
                                                                        touch_releases.Count()) :
                                                Vector2.Zero;

                    inputService.update_touch(
                        touch_presses.Any(),
                        touch_triggers.Any(),
                        touch_releases.Any(),
                        touch_press_loc,
                        touch_release_loc);
                    foreach (TouchGestures input in GestureEnums)
                    {
                        Maybe <GestureSample> sample;
                        sample = convert_gesture(input);
                        if (sample.IsSomething)
                        {
                            inputService.update_input(input, sample);
                        }
                    }
                }
#else
                inputService.update_touch(
                    false, false, false, Vector2.Zero, Vector2.Zero);
#endif
            }
        }