Ejemplo n.º 1
0
        private void StartGrab(InputSource inputSource, Spatial target)
        {
            if (GrabActive || target == null || !Godot.Object.IsInstanceValid(target))
            {
                return;
            }

            CurrentGrabbedTarget = target;
            _currentInputSource  = inputSource;

            var targetTransform = CurrentGrabbedTarget.GlobalTransform;

            _manipulator = new Spatial()
            {
                Name = "manipulator"
            };
            inputSource.GetTree().Root.AddChild(_manipulator);
            _manipulator.GlobalTransform = targetTransform;

            _previousParent = CurrentGrabbedTarget.GetParent();
            _previousParent.RemoveChild(CurrentGrabbedTarget);
            _manipulator.AddChild(CurrentGrabbedTarget);
            CurrentGrabbedTarget.GlobalTransform = targetTransform;

            _manipulatorPosInToolSpace       = _currentInputSource.ToLocal(_manipulator.GlobalTransform.origin);
            _manipulatorupInToolSpace        = _currentInputSource.ToLocal(_manipulator.GlobalTransform.basis.y);
            _manipulatorLookAtPosInToolSpace = _currentInputSource.ToLocal(_manipulator.GlobalTransform.origin - _manipulator.GlobalTransform.basis.z);
        }