void Start() { var context = this.DefaultInputContext(); var ios = TouchFeedback.Setup(context, draw, this); // Reset by finger release Observable.Merge(ios[0].OnEnd, ios[1].OnEnd).Subscribe(_ => { text.text = ""; text2.text = ""; }).AddTo(this); var ro = RectangleObservable.From(ios[0], ios[1]); // Rectangle ro.RepeatUntilDestroy(this).Subscribe(rect => { Debug.Log($"Rect: {rect}"); text.text = rect.ToString(); }).AddTo(this); // Pinch In/Out Detection ro.PinchSequence() .RepeatUntilDestroy(this) .Subscribe(diff => { Debug.Log($"Horizontal: {diff.x}, Vertical: {diff.y}"); string th = ""; string tv = ""; if (diff.x < 0) { th = $"<color=red>dX={diff.x}</color>"; } else if (diff.x > 0) { th = $"<color=blue>dX={diff.x}</color>"; } else { th = $"{diff.x}"; } if (diff.y < 0) { tv = $"<color=red>dY={diff.y}</color>"; } else if (diff.y > 0) { tv = $"<color=blue>dY={diff.y}</color>"; } else { tv = $"{diff.x}"; } text2.text = $"{th}, {tv}"; }).AddTo(this); }
/// <summary> /// Initialisiert das Anzeigen von Berührungspunkten auf der /// Oberfläche /// </summary> /// <param name="tl"></param> private void InitializeTouchFeedback(TouchListener tl) { _tfeedback = new TouchFeedback(); _tfeedback.Init(this); tl.TouchMove += (s, e) => { _tfeedback.CaptureTouch(e.Value); }; }
public TouchInjectProviderHandler() { TouchFeedback feedback = Settings.Default.pointer_customCursor ? TouchFeedback.NONE : TouchFeedback.INDIRECT; if (!TCD.System.TouchInjection.TouchInjector.InitializeTouchInjection((uint)maxTouchPoints, feedback)) { throw new Exception("Can not initialize touch injection"); } SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; }
public TouchInjectProviderHandler() { Version win8version = new Version(6, 2, 9200, 0); if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version >= win8version) { TouchFeedback feedback = Settings.Default.pointer_customCursor ? TouchFeedback.NONE : TouchFeedback.INDIRECT; if (!TCD.System.TouchInjection.TouchInjector.InitializeTouchInjection((uint)maxTouchPoints, feedback)) { throw new Exception("Can not initialize touch injection"); } SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; contactQueue = new Queue <WiiContact>(); enabled = true; } else { MainWindow.Current.ShowMessage("You will need to install Virtual input drivers to be able to use touch output on Windows 7", MainWindow.MessageType.Info); } }
public static extern bool InitializeTouchInjection(uint maxCount = 256, TouchFeedback feedbackMode = TouchFeedback.DEFAULT);
public static void Initialize(uint maxContacts, TouchFeedback touchFeedbackMode) { NativeMethods.InitializeTouchInjection(maxContacts, touchFeedbackMode); }
public static extern bool InitializeTouchInjection(uint maxCount, TouchFeedback dwMode);
public static extern bool InitializeTouchInjection(uint maxCount = 5, TouchFeedback feedbackMode = TouchFeedback.NONE);
void Start() { var context = this.DefaultInputContext(); TouchFeedback.Setup(context, draw, this); var touch0 = context.GetObservable(0); var touch1 = context.GetObservable(1); touch0.Any().Where(e => e.type != InputEventType.Move).Subscribe(e => { Debug.Log(e); }).AddTo(this); touch1.Any().Where(e => e.type != InputEventType.Move).Subscribe(e => { Debug.Log(e); }).AddTo(this); // Stop Rotation by keep touch touch0.Keep(100, () => _rigidbody.angularVelocity.x > 0 || _rigidbody.angularVelocity.y > 0 || _rigidbody.angularVelocity.z > 0) .Subscribe(_ => { Debug.Log("break"); var m = _rigidbody.angularVelocity.magnitude; _rigidbody.angularVelocity = (m < 0.1f) ? Vector3.zero : _rigidbody.angularVelocity * 0.1f; }).AddTo(this); // Rotate by Touch Operation var hratio = -180.0f / Screen.width; var vratio = -180.0f / Screen.height; touch0.Difference() .Where(_ => !touch1.IsBegin) .Subscribe(v2 => { var rot = v2.ToEulerAngle(hratio, vratio); _target.Rotate(rot, Space.World); }).AddTo(this); // Rotate Animation by Swipe operation touch0.TakeLastVerocities(4) .Subscribe(vs => { var average = new Vector2 { x = vs.Average(vi => vi.vector.x), y = vs.Average(vi => vi.vector.y) }; Debug.Log($"vector = {average}"); var mag = average.magnitude; if (mag > 0.1f) { var torque = average.ToEulerAngle(hratio, vratio) * mag; _rigidbody.AddTorque(torque, ForceMode.VelocityChange); Debug.Log($"magnitude = {mag}, torque={torque}"); if (draw != null) { TouchFeedback.DrawSwipeArrow(draw, vs.First()[email protected], average, $"{average}, {mag}"); } } }).AddTo(this); // Reset var orig_rotate = _target.rotation; var orig_scale = _target.localScale; touch0.DoubleSequence(200).Subscribe(_ => { _target.rotation = orig_rotate; _target.localScale = orig_scale; }).AddTo(this); // Scale Object by Mouse Wheel var camera = Camera.main; (context as IMouseWheelObservable)?.Wheel.Subscribe(v => { var scale = _target.localScale + Vector3.one * v.wheel; if (0.1 < scale.x && scale.x < 10) { _target.localScale += Vector3.one * v.wheel; } }).AddTo(this); // Scale Object by Pinch Operation RectangleObservable.From(touch0, touch1) .PinchSequence() .RepeatUntilDestroy(this) .Subscribe(diff => { if (diff.x > 0 && diff.y > 0) { var v = Mathf.Max(diff.x / Screen.width, diff.y / Screen.height); var scale = _target.localScale + Vector3.one * v * 10; if (scale.x < 10) { _target.localScale = scale; Debug.Log($"pinch-out: diff={diff}, v={v}, localScale={_target.localScale}"); } } else if (diff.x < 0 && diff.y < 0) { var v = Mathf.Min(diff.x / Screen.width, diff.y / Screen.height); var scale = _target.localScale + Vector3.one * v * 10; if (scale.x > 0.1) { _target.localScale = scale; Debug.Log($"pinch-in: diff={diff}, v={v}, localScale={_target.localScale}"); } } }).AddTo(this); }
public static extern bool InitializeTouchInjection(uint maxCount = 256, TouchFeedback feedbackMode = TouchFeedback.DEFAULT);
public static void Initialize(uint maxContacts, TouchFeedback touchFeedbackMode) { NativeMethods.InitializeTouchInjection(maxContacts, touchFeedbackMode); }