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); } } }
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); }
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 } }