private static Vector3 ProjectHandlebarGivenConstraint(RotationConstraintType constraint, Vector3 handlebarRotation)
        {
            Vector3 result = handlebarRotation;

            switch (constraint)
            {
            case RotationConstraintType.XAxisOnly:
                result.x = 0;
                break;

            case RotationConstraintType.YAxisOnly:
                result.y = 0;
                break;

            case RotationConstraintType.ZAxisOnly:
                result.z = 0;
                break;

            case RotationConstraintType.None:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(constraint), constraint, null);
            }
            return(result);
        }
        /// <summary>
        /// Returns corresponding AxisFlags for given RotationConstraintType
        /// </summary>
        public static AxisFlags ConvertToAxisFlags(RotationConstraintType type)
        {
            switch (type)
            {
            case RotationConstraintType.XAxisOnly:
                return(AxisFlags.YAxis | AxisFlags.ZAxis);

            case RotationConstraintType.YAxisOnly:
                return(AxisFlags.XAxis | AxisFlags.ZAxis);

            case RotationConstraintType.ZAxisOnly:
                return(AxisFlags.XAxis | AxisFlags.YAxis);

            default:
                return(0);
            }
        }
        /// <summary>
        /// Update the rotation based on input.
        /// </summary>
        /// <returns>Desired rotation</returns>
        public Quaternion Update(Dictionary <uint, Vector3> handsPressedMap, Quaternion currentRotation, RotationConstraintType rotationConstraint)
        {
            var handlebarDirection = ProjectHandlebarGivenConstraint(rotationConstraint, GetHandlebarDirection(handsPressedMap));

            return(Quaternion.FromToRotation(startHandlebar, handlebarDirection) * startRotation);
        }
 /// <summary>
 /// Setup the rotation logic.
 /// </summary>
 public void Setup(Dictionary <uint, Vector3> handsPressedMap, Transform t, RotationConstraintType rotationConstraint)
 {
     startHandlebar = ProjectHandlebarGivenConstraint(rotationConstraint, GetHandlebarDirection(handsPressedMap));
     startRotation  = t.rotation;
 }
Пример #5
0
 /// <summary>
 /// Setup the rotation logic.
 /// </summary>
 /// <param name="handsPressedMap"></param>
 public void Setup(Dictionary <uint, Vector3> handsPressedMap)
 {
     currentRotationConstraint = initialRotationConstraint;
     previousHandlebarRotation = GetHandlebarDirection(handsPressedMap);
 }
Пример #6
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="rotationConstraint"></param>
 public TwoHandRotateLogic(RotationConstraintType rotationConstraint)
 {
     initialRotationConstraint = rotationConstraint;
 }