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);
        }
예제 #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);
        }
예제 #3
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);
        }
예제 #4
0
 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);
 }
예제 #5
0
 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);
 }
예제 #6
0
        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();
        }
예제 #7
0
        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;
        }
예제 #8
0
        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);
        }