Set/get lean to/from network data.

This commit is contained in:
Andrzej Kapolka 2013-06-11 18:06:05 -07:00
parent 82f03ffd8e
commit 7ef2a2c5d9

View file

@ -289,11 +289,9 @@ void Avatar::updateHeadFromGyros(float deltaTime, SerialInterface* serialInterfa
// Update torso lean distance based on accelerometer data
glm::vec3 estimatedPosition = serialInterface->getEstimatedPosition();
const float TORSO_LENGTH = 0.5f;
const float MAX_LEAN_RADIANS = PIf / 4;
_skeleton.joint[AVATAR_JOINT_TORSO].rotation = glm::quat(glm::vec3(
glm::clamp(atanf(estimatedPosition.z / TORSO_LENGTH), -MAX_LEAN_RADIANS, MAX_LEAN_RADIANS),
0.0f,
glm::clamp(atanf(-estimatedPosition.x / TORSO_LENGTH), -MAX_LEAN_RADIANS, MAX_LEAN_RADIANS)));
const float MAX_LEAN = 45.0f;
_head.setLeanSideways(glm::clamp(glm::degrees(atanf(-estimatedPosition.x / TORSO_LENGTH)), -MAX_LEAN, MAX_LEAN));
_head.setLeanForward(glm::clamp(glm::degrees(atanf(estimatedPosition.z / TORSO_LENGTH)), -MAX_LEAN, MAX_LEAN));
}
float Avatar::getAbsoluteHeadYaw() const {
@ -355,6 +353,10 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) {
// update balls
if (_balls) { _balls->simulate(deltaTime); }
// update torso rotation based on head lean
_skeleton.joint[AVATAR_JOINT_TORSO].rotation = glm::quat(glm::radians(glm::vec3(
_head.getLeanForward(), 0.0f, _head.getLeanSideways())));
// update avatar skeleton
_skeleton.update(deltaTime, getOrientation(), _position);