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); }
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); }
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); }
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)); }