public void Update(IEnumerable <GameObject> targetObjects) { if (SharedHotkeys == null || SharedSettings == null) { return; } if (_state == State.Inactive) { if (_sharedHotkeys.ToggleGrab.IsActiveInFrame()) { Begin(targetObjects); } } else if (_sharedHotkeys.ToggleGrab.IsActiveInFrame()) { End(); } if (IsActive) { State oldState = _state; IInputDevice inputDevice = RTInputDevice.Get.Device; if (SharedHotkeys.EnableOffsetFromAnchor.IsActive()) { if (_state != State.ActiveOffsetFromAnchor && inputDevice.CreateDeltaCapture(inputDevice.GetPositionYAxisUp(), out _deltaCaptureId)) { StoreGrabTargetsAnchorVectorSnapshots(); _state = State.ActiveOffsetFromAnchor; } } else if (SharedHotkeys.EnableAnchorAdjust.IsActive()) { _state = State.ActiveAnchorAdjust; } else if (SharedHotkeys.EnableRotation.IsActive()) { _state = State.ActiveRotate; } else if (SharedHotkeys.EnableRotationAroundAnchor.IsActive()) { _state = State.ActiveRotateAroundAnchor; } else if (SharedHotkeys.EnableScaling.IsActive()) { if (_state != State.ActiveScale && inputDevice.CreateDeltaCapture(inputDevice.GetPositionYAxisUp(), out _deltaCaptureId)) { StoreGrabTargetsWorldScaleSnapshots(); _state = State.ActiveScale; } } else if (SharedHotkeys.EnableOffsetFromSurface.IsActive()) { _state = State.ActiveOffsetFromSurface; } else { _state = State.ActiveSnapToSurface; } if (_state != State.ActiveScale && _state != State.ActiveOffsetFromAnchor) { inputDevice.RemoveDeltaCapture(_deltaCaptureId); } if (_state != State.ActiveOffsetFromAnchor && _state != State.ActiveRotateAroundAnchor) { if (!IdentifyGrabSurface()) { return; } } if ((oldState == State.ActiveOffsetFromAnchor && _state != State.ActiveOffsetFromAnchor) || (oldState == State.ActiveRotateAroundAnchor && _state != State.ActiveRotateAroundAnchor)) { CalculateGrabTargetsAnchorVectors(); } if (_state == State.ActiveSnapToSurface && SharedHotkeys.NextAlignmentAxis.IsActiveInFrame()) { SwitchToNextAlignmentAxis(); } if (RTInputDevice.Get.Device.WasMoved()) { if (_state == State.ActiveOffsetFromAnchor) { OffsetTargetsFromAnchor(); } else if (_state == State.ActiveAnchorAdjust) { CalculateGrabTargetsAnchorVectors(); } else if (_state == State.ActiveSnapToSurface) { SnapTargetsToSurface(); } else if (_state == State.ActiveRotate) { RotateTargets(); } else if (_state == State.ActiveRotateAroundAnchor) { RotateTargetsAroundAnchor(); } else if (_state == State.ActiveScale) { ScaleTargets(); } else if (_state == State.ActiveOffsetFromSurface) { OffsetTargetsFromSurface(); } } } }