void PositionWith(Vector3 handPosition, Quaternion handRotation, Mallet.MalletHand hand)
        {
            if (positioningHand != hand)
            {
                positioningHand   = hand;
                previousPosition  = handPosition;
                previousRotationX = handRotation.eulerAngles.x;
            }

            var pos = keyboard.keyboardWrapper.transform.localPosition;

            keyboard.keyboardWrapper.transform.localPosition = new Vector3(
                pos.x + (handPosition.x - previousPosition.x),
                pos.y + (handPosition.y - previousPosition.y),
                pos.z + (handPosition.z - previousPosition.z)
                );

            var rot = keyboard.keyboardWrapper.transform.eulerAngles;

            keyboard.keyboardWrapper.transform.localRotation = Quaternion.Euler(
                rot.x + (handRotation.eulerAngles.x - previousRotationX),
                rot.y,
                rot.z
                );

            previousPosition  = handPosition;
            previousRotationX = handRotation.eulerAngles.x;
        }
 void ResetState()
 {
     initialHandDistance = -1f;
     initialApplyScale   = 1f;
     positioningHand     = Mallet.MalletHand.None;
 }