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; }
/// <summary> /// Setup the rotation logic. /// </summary> /// <param name="handsPressedMap"></param> public void Setup(Dictionary <uint, Vector3> handsPressedMap) { currentRotationConstraint = initialRotationConstraint; previousHandlebarRotation = GetHandlebarDirection(handsPressedMap); }
/// <summary> /// Constructor. /// </summary> /// <param name="rotationConstraint"></param> public TwoHandRotateLogic(RotationConstraintType rotationConstraint) { initialRotationConstraint = rotationConstraint; }