Ejemplo n.º 1
0
        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();
                    }
                }
            }
        }