away.js calls MyAvatar.centerBody, however centerBody is only meaningful in HMD mode.
To guard against this, MyAvatar::centerBody is now a no-op if the application is not in HMD mode.
Previously hitting ' a.k.a. reset sensors, would teleport you to the last
position you were in before you switched into desktop mode, or the spawn location.
This fixes that behavior but not re-centering the avatar while in desktop mode.
The internal MyAvatar:_sensorToWorldMatrix was being updated properly, however
the MyAvatar::_sensorToWorldMatrixCache was not. To fix this I've introduced
a new "mode" to updateSensorToWorldMatrix that does not change the sensorToWorldMatrix at all,
but properly copies the value to the cache and also updates hand controller poses etc.
Basically, when using the third person camera in HMD mode. If the controllers are shown.
They should be shown in front of the users camera, not in front of the users avatar.
To accomplish this, two new faux joint indices are introduced.
CAMERA_RELATIVE_CONTROLLER_RIGHTHAND_INDEX and CAMERA_RELATIVE_CONTROLLER_LEFTHAND_INDEX.
These joint indices can be used for Overlay parenting. (But not for entity parenting because they are not transmitted over the network).
They can also be queried for by using the MyAvatar.getAbsoluteJointRotationInObjectFrame() call.
These new indices are now used by the controllerDisplay.js for the hand controller rendering.
They are also used by system/libraries/controllers.js as the origin for hand controller grabbing and interaction lasers.
Reverse the order we acquire the entityTree & holdActions locks, to avoid deadlocks when the network thread also acquires them.
The network thread does this when hold actions from other avatars are received.
In the game loop, physics occurs before avatar update.
Before this PR, when the avatar is moved during avatar update, near grabbed objects will not pick up this move until one frame later, when
the physics is run on the next update.
After this PR, near grabbed objects are adjusted to reflect any position or rotation change that occurred during the avatar update.
* follow helper lean re-centering / reconciliation now modifies bodySensorMatrix, NOT the character controller.
* The character controller now always follows the bodySensorMatrix (in world space).
This decouples the lean re-centering velocity from the velocity used to move the character controller.
We can now independently tune these things separately.
* Navigation walk speed has been reduced
* Tuned IdleToWalk timescale and interp time to reduce foot sliding
* Tuned fwd, back and lateral characteristicSpeeds to better match the
animations. This reduces foot sliding when moving forward and backward.
* Reduced rig state machine hysteresis to 1/60th of a second.
This is fixed by using the pre-action velocity from CharacterController, which does not include any motors or follow velocity.
This pre-action velocity reflects the actual rigid body velocity after collision constraints are resolved.
This should prevent the character f
We know properly account for the offset of the head due to clamping from a small maxHipsOffset.
This means the hands should look more natural when you are out-of-body and are moving your hand controllers.
A AnimContext class was introduced. This context is passed into every node during evaluation/overlay.
It holds non-animVar "global" data passed from the application.
You can do this by parenting an entity to an avatar's -2 joint index.
This will mean that the entity will follow the avatar as it moves in the world, but
will not follow the avatar's position as it moves in sensor space. Essentially, this
gives you the ability to place objects in the user's physical room.
WebTablets now are located in this feature and no longer jitter.
* Removed MyAvatar.reset() access from JavaScript
* Added HMD.centerUI() to JavaScript, which can be used to reset the 3D UI sphere around the current HMD orientation.
* Added MyAvatar.clearIKJOintLimitHistory() which can be used to reset any remembered IK joint limit history.
* Added MyAvatar.centerBody() which can be used to instantly re-orient the avatar's so that the hips and toes
are facing the same direction as the current HMD orientation.
away.js now uses the above new API's instead of MyAvatar.reset()
* When the overlay is hidden because your head is too close to the sphere,
instead of coming back immediately, it waits until the avatar's velocity is near zero
for a period of time.
* Hooked up jump and fly to MyAvatar::hasDriveInput()
* Added an internal state machine to OverlayConductor to manage hiding/showing transitions.
* The overlay menu state is now tied directly to the overlay, so it will change state as the
overlay is dynamically hidden/shown from code.
* Removed slot going directly from MenuOption::Overlays directly to OverlayConductor::setEnable().
Previously the HUD fading in/out would also recenter the hmd sensor and the avatar, which caused many problems including:
* The user's view could shift vertically.
* Your avatar would briefly go into t-pose
* other users would see your avatar go into t-pose.
Now we now move the UI sphere instead, which results in a much smoother experience.
MyAvatar: added hasDriveInput method.
OverlayConductor:
* removed avatar and sensor reset, instead the overlay's modelTransform is changed.
* revived STANDING mode, which is active if myAvatar->getClearOverlayWhenDriving() is true and you are wearing an HMD.
* SITTING & FLAT mode should be unchanged.
* Instead of using avatar velocity to fade out/fade in the hud, We use the presense or absanse of avatar drive input.
* Additionally, we check distance to the UI sphere, and quickly recenter the hud if the users head is too close to the actual hud sphere.
CompositorHelper:
* Bug fixes for ray picks not using the modelTransform.
HmdDisplayPlugin:
* Bug fixes for rendering not using the modelTransform.
Used to disable the 'room-scale' avatar re-centering code.
Disabling this can prevent sliding when the avatar is supposed to be sitting or mounted on a stationary object.
Also, removed a bunch of old, unused leaning and torso twisting code.