public override void Update(VrUpdateArgs args) { var session = args.Session; var input = session.SemanticInput(); Matrix4 pointer = PointerFilter(session.RightController.PointerTransform); var hitResult = GetClosestHit(pointer.Translation); //KNARK: Review Deletebutton usage (used to capture on down, execute on up) /*if(input.SelectClick || input.DeleteClick) * { * _pressedAt = pointer; * } * else */if (input.IsSelectPressed && !_dragging) { _dragging = true; _hitResult = hitResult; var eventArgs = new VrEventArgs(pointer, _hitResult); BeginDrag?.Invoke(eventArgs); if (eventArgs.CreatedObject != null) { _hitResult = eventArgs.CreatedObject(); } } else if (_dragging && input.IsSelectPressed) { DeltaDrag?.Invoke(new VrEventArgs(pointer, _hitResult)); } else if (!input.IsSelectPressed && _dragging) { _dragging = false; EndDrag?.Invoke(new VrEventArgs(pointer, _hitResult)); } //else if (_gripPressed && !session.RightController.InputState.GripPressed // && CloseEnough(_pressedAt, pointer)) else if (input.DeleteClick) { AlternateClick?.Invoke(new VrEventArgs(pointer, hitResult)); } else if (hitResult != null) { HoverObject?.Invoke(new VrEventArgs(pointer, hitResult)); } }
public VrEventArgs(Matrix4 frame, IHitResult hitResult) { Frame = frame; HitResult = hitResult; }