예제 #1
0
        static Option <Vector3> projectToLine(
            Ray ray, Vector3 originPosition, Vector3 shiftedPosition,
            ObjectCloner.LockedAxis lockedAxis, LockedAxis2 secondaryLockedAxis
            ) => projectToPlane(ray, originPosition, shiftedPosition).map(inPlane => {
            var lineP1 = originPosition;
            var lineP2 =
                lockedAxis == ObjectCloner.LockedAxis.X ? new Vector3(
                    originPosition.x,
                    (secondaryLockedAxis == LockedAxis2.B ? originPosition : shiftedPosition).y,
                    (secondaryLockedAxis == LockedAxis2.A ? originPosition : shiftedPosition).z
                    )
        : lockedAxis == ObjectCloner.LockedAxis.Y ? new Vector3(
                    (secondaryLockedAxis == LockedAxis2.A ? originPosition : shiftedPosition).x,
                    originPosition.y,
                    (secondaryLockedAxis == LockedAxis2.B ? originPosition : shiftedPosition).z
                    )
        : new Vector3(
                    (secondaryLockedAxis == LockedAxis2.B ? originPosition : shiftedPosition).x,
                    (secondaryLockedAxis == LockedAxis2.A ? originPosition : shiftedPosition).y,
                    originPosition.z
                    );

            var direction = (lineP2 - lineP1) * 10000;
            Handles.DrawLine(originPosition - direction, originPosition + direction);

            var projected = Vector3.Project(inPlane - originPosition, direction) + originPosition;
            return(projected);
        });
예제 #2
0
        // Determines where on screen we are currently pointing, given that we have one
        // axis locked.
        static Option <Vector3> newObjPosition(
            Vector2 mousePosition, Vector3 originPosition,
            ObjectCloner.LockedAxis lockedAxis, Option <LockedAxis2> secondaryLockedAxis
            )
        {
            var ray             = posInWorld(mousePosition);
            var shiftedPosition = new Vector3(
                lockedAxis == ObjectCloner.LockedAxis.X ? originPosition.x : originPosition.x - 1,
                lockedAxis == ObjectCloner.LockedAxis.Y ? originPosition.y : originPosition.y - 1,
                lockedAxis == ObjectCloner.LockedAxis.Z ? originPosition.z : originPosition.z - 1
                );

            return(secondaryLockedAxis.isSome
        ? projectToLine(ray, originPosition, shiftedPosition, lockedAxis, secondaryLockedAxis.get)
        : projectToPlane(ray, originPosition, shiftedPosition));
        }