//:TODO: This will cause multiple traversals of the paths [perf]. Review. IHitResult GetClosestHit(Vector3 testPoint) { var closestMoveInstruction = _objectDetector.DetectMoveInstruction(testPoint); if (closestMoveInstruction != null) { return(closestMoveInstruction); } var closestPathSegment = _objectDetector.DetectPathSegment(testPoint); if (closestPathSegment != null) { return(closestPathSegment); } return(null); }
public override void Update(VrSession session) { var ctrl = session.RightController; if (_dragMoveInstr != null) { if (ctrl.InputState.TriggerPressed) { //double newZoneVal = } else { _dragMoveInstr = null; } } var ctrlPos = ctrl.PointerTransform.Translation; var hitResult = _detector.DetectMoveInstruction(ctrlPos) as HitResult <RsMoveInstruction>; if (hitResult != null) { //:TODO: Update some preview if (ctrl.InputState.TriggerPressed && !ctrl.PreviousInputState.TriggerPressed) { // Improve? _zoneArg = hitResult.HitObject.InstructionArguments["Z"]; if (_zoneArg == null) { return; } int zoneVal = 0; if (_zoneArg.Name.StartsWith("z") && _zoneArg.Enabled) { int.TryParse(_zoneArg.Value, out zoneVal); } _distOffset = ctrlPos.Distance(hitResult.HitPoint) - zoneVal; _dragMoveInstr = hitResult.HitObject; } } }