Ejemplo n.º 1
0
        public void SelectionDragStart(Transform controller, int controllerIndex, GameObject instanceOfOrigin, bool allowSnap = true, bool forceDrag = false)
        {
            FakeTransform transformToUse = WhichTransform(controller, instanceOfOrigin);
            int           index          = FindOrCreateDragsIndexOfControllerIndex(controllerIndex);

            //Debug.Log("SelectionDragStart[" + GetInstanceID() + "] controllerIndex=" + controllerIndex + ",index=" + index);
            if (index > 0)
            {
                drags.RemoveAt(index);
                return; // only one controller may drag at a time.
            }
            if (!forceDrag && !draggableModes.Contains(Mode.mode))
            {
                drags.RemoveAt(index);
                return; // only allow dragging vertices in vertex mode
            }

            drags[index].preDragPosition        = transform.position;
            drags[index].dragPoint              = transformToUse.position;
            drags[index].transform              = transformToUse;
            drags[index].startTransformRotation = controller.rotation;
            lastPosition = transform.localPosition;
            Vector3 preSnapPosition = transformToUse.position - drags[index].dragPoint + drags[index].preDragPosition;
            Vector3 position        = Settings.SnapEnabled() && allowSnap?Snap.WorldPosition(mesh.transform, preSnapPosition) : preSnapPosition;

            UpdateLocalPositionFromWorldPosition(position);
        }
Ejemplo n.º 2
0
        public void SelectionDragEnd(Transform controller, int controllerIndex, GameObject instanceOfOrigin, bool allowSnap = true)
        {
            FakeTransform transformToUse = WhichTransform(controller, instanceOfOrigin);
            int           index          = DragsIndexOfControllerIndex(controllerIndex);

            //Debug.Log("SelectionDragEnd[" + GetInstanceID() + "] controllerIndex=" + controllerIndex + ",index=" + index);
            if (index == -1 || index > 0)
            {
                return;                           // only one controller may drag at a time.
            }
            drags[index].transform = transformToUse;
            Vector3 preSnapPosition = transformToUse.position - drags[index].dragPoint + drags[index].preDragPosition;
            Vector3 position        = Settings.SnapEnabled() && allowSnap?Snap.WorldPosition(mesh.transform, preSnapPosition) : preSnapPosition;

            UpdateLocalPositionFromWorldPosition(position);
            if (instanceOfOrigin != gameObject)
            {
                RotateAroundTransform(drags[index]);
                UpdateLocalPositionFromWorldPosition(transform.position);
            }
            else
            {
                // no rotation
            }

            lastPosition = Vector3.zero;
            GetComponent <Selectable>().SetSelected(false);
            drags.RemoveAt(index);
        }
Ejemplo n.º 3
0
        public FakeTransform WhichTransform(Transform controller, GameObject instanceOfOrigin)
        {
            Transform     whichTransform = instanceOfOrigin == gameObject ? controller : instanceOfOrigin.transform;
            FakeTransform fakeTransform  = new FakeTransform();

            fakeTransform.position = whichTransform.position;
            fakeTransform.rotation = controller.rotation;
            return(fakeTransform);
        }
Ejemplo n.º 4
0
 public static FakeTransform FromFakeTransform(this Transform parent, FakeTransform fakeTransform, bool local = false)
 {
     if (local)
     {
         parent.localPosition = fakeTransform.position;
         parent.localRotation = fakeTransform.rotation;
         parent.localScale    = fakeTransform.scale;
     }
     else
     {
         parent.position   = fakeTransform.position;
         parent.rotation   = fakeTransform.rotation;
         parent.localScale = fakeTransform.scale;
     }
     return(new FakeTransform(parent, local));
 }