private void OnMouseStuff(object sender, MouseEventArgs args) { if (args.RoutedEvent == UIElement.PreviewMouseUpEvent || (args.RoutedEvent == UIElement.PreviewMouseDownEvent && args.Source == null) || (args.RoutedEvent == UIElement.PreviewMouseMoveEvent && args.Source == null && args.LeftButton == MouseButtonState.Released)) { MultitouchWindow.RemoveMouseListener(_attachedElement, OnMouseStuff); } else if (args.RoutedEvent == UIElement.PreviewMouseDownEvent) { MultitouchWindow.AddMouseListener(_attachedElement, OnMouseStuff); _pts[-1] = new FlickData() { DownPoint = args.GetPosition(_attachedElement) }; } else if (args.RoutedEvent == UIElement.PreviewMouseMoveEvent) { if (!_pts.ContainsKey(-1)) { return; } Point current = args.GetPosition(_attachedElement); FlickData data = _pts[-1]; Vector change = Point.Subtract(current, data.DownPoint); double delta = change.Length; if (data.BeginTime == 0 && delta > BeginThreshold) { data.BeginTime = args.Timestamp; } if (data.BeginTime != 0 && delta > EndThreshold && (args.Timestamp - data.BeginTime) < RequiredFlickSpeed.TotalMilliseconds) { MultitouchWindow.RemoveMouseListener(_attachedElement, OnMouseStuff); _pts.Remove(-1); FlickEventArgs fargs = new FlickEventArgs(change / delta); if (Flick != null) { Flick(_attachedElement, fargs); } if (fargs.AlignedDirection.X != 0 && HorizontalFlick != null) { HorizontalFlick(_attachedElement, fargs); } if (fargs.AlignedDirection.Y != 0 && VerticalFlick != null) { VerticalFlick(_attachedElement, fargs); } } } }
public void OnEndFlick(FlickData flickData) { /** フリック処理の後片付け **/ _rigidbody2D.velocity = flickData.FlickDirection * -_flickPower; flickArrow.transform.localScale = Vector3.one; flickArrowRoot.gameObject.SetActive(value: false); _isFlickEnd = true; IsFlickable = false; }
public void Move() { if (Input.GetMouseButtonDown(button: 0)) { _startFlickPos = GetWorldMousePos(); OnStartFlick?.Invoke(_startFlickPos); } else if (Input.GetMouseButtonUp(button: 0)) { Vector3 endFlickPos = GetWorldMousePos(); FlickData flickData = new FlickData(startPos: _startFlickPos, endPos: endFlickPos); OnEndFlick?.Invoke(flickData); } else if (Input.GetMouseButton(button: 0)) { OnFlicking?.Invoke(GetWorldMousePos()); } }