protected override void HandleTriggerDown(Transform controller, int controllerIndex) { MeshEngine.Mesh mesh = Meshes.GetSelectedMesh(); Vector3 position = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, controller.position) : controller.position; mesh.vertices.CreateAndAddVertexInstanceByWorldPosition(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 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 OnFirstTrigger(Transform controller, int controllerIndex) { this.controllerIndex = controllerIndex; vertexInstances = new List <GameObject>(); mesh.selection.Clear(); center = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, controller.position) : controller.position; centerVertexInstance = mesh.vertices.CreateAndAddVertexInstanceByWorldPosition(center); lastNumberOfSides = 0; transform.position = center; SetSelectable(false); }
public void FirstTrigger(Transform controller, int controllerIndex) { this.controllerIndex = controllerIndex; vertexInstances = new List <GameObject>(); mesh.selection.Clear(); center = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, controller.position) : controller.position; lastNumberOfSides = 0; transform.position = center; vertexCountBeforeSphere = mesh.vertices.vertices.Count; triangleCountBeforeSphere = mesh.triangles.triangles.Count; triangleInstanceCountBeforeSphere = mesh.triangles.triangleInstances.Count; triangleMaterialsCountBeforeSphere = mesh.materials.TriangleMaterialsCount(); SetSelectable(false); }
public void OnFirstTrigger(Transform controller, int controllerIndex) { this.controllerIndex = controllerIndex; mesh.selection.Clear(); Vector3 position = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, controller.position) : controller.position; firstVertexInstance = mesh.vertices.CreateAndAddVertexInstanceByWorldPosition(position); secondVertexInstance = mesh.vertices.CreateAndAddVertexInstanceByWorldPosition(position); thirdVertexInstance = mesh.vertices.CreateAndAddVertexInstanceByWorldPosition(position); fourthVertexInstance = mesh.vertices.CreateAndAddVertexInstanceByWorldPosition(position); SetSelectable(false); CreateTriangles(); SelectVertices(); }
public void UpdatePositions(Transform controller, int controllerIndex) { Vector3 controllerPosition = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, controller.position) : controller.position; Quaternion snappedControllerRotation = Snap.RotationDelta(controller.rotation); Vector3 up = CalculateNormal(center, controllerPosition, controllerPosition + snappedControllerRotation * Vector3.right); int numberOfSides = NumSidesByTwoVectors(controller.up, up); if (numberOfSides != lastNumberOfSides) { DestroyAndRecreateVertices(numberOfSides, controllerPosition, up); } else { MoveVertices(numberOfSides, controllerPosition, up); } lastNumberOfSides = numberOfSides; }
public void UpdatePositions(Transform controller, int controllerIndex) { Vector3 position = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, controller.position) : controller.position; fourthVertexInstance.GetComponent <VertexController>().UpdateLocalPositionFromWorldPosition(position); Vector3 midPoint = MidPoint(firstVertexInstance.transform.position, fourthVertexInstance.transform.position); float distance = Vector3.Distance(midPoint, fourthVertexInstance.transform.position); Vector3 leftPosition = SidePosition(midPoint, distance, -controller.right); Vector3 rightPosition = SidePosition(midPoint, distance, controller.right); Vector3 snappedLeftPosition = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, leftPosition) : leftPosition; Vector3 snappedRightPosition = Settings.SnapEnabled() ? Snap.WorldPosition(mesh.transform, rightPosition) : rightPosition; //Debug.Log("UpdatePositions first=" + firstVertexInstance.transform.position + ",fourth=" + fourthVertexInstance.transform.position + ",midPoint=" + midPoint + ",distance=" + distance + ",left=" + leftPosition + ",right=" + rightPosition); secondVertexInstance.GetComponent <VertexController>().UpdateLocalPositionFromWorldPosition(snappedLeftPosition); thirdVertexInstance.GetComponent <VertexController>().UpdateLocalPositionFromWorldPosition(snappedRightPosition); }