From c771c925c8e0330e9cf8356a456ec6eed80203dc Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 27 Jan 2016 11:20:32 -0800 Subject: [PATCH] MyAvatar: copy body velocity + hmd follow velocity onto avatar This was inadvertently removed in a previous PR. https://github.com/highfidelity/hifi/pull/6895 Also, renamed Velocity stat to Speed. --- interface/resources/qml/Stats.qml | 2 +- interface/src/avatar/MyAvatar.cpp | 2 ++ interface/src/ui/Stats.cpp | 2 +- interface/src/ui/Stats.h | 4 ++-- libraries/physics/src/CharacterController.cpp | 8 ++++++++ libraries/physics/src/CharacterController.h | 1 + 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/interface/resources/qml/Stats.qml b/interface/resources/qml/Stats.qml index 2155a11d91..35738c56b1 100644 --- a/interface/resources/qml/Stats.qml +++ b/interface/resources/qml/Stats.qml @@ -136,7 +136,7 @@ Item { Text { color: root.fontColor; font.pixelSize: root.fontSize - text: "Velocity: " + root.velocity.toFixed(1) + text: "Speed: " + root.speed.toFixed(1) } Text { color: root.fontColor; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index e06dce2324..f0acd3f42a 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1042,6 +1042,8 @@ void MyAvatar::harvestResultsFromPhysicsSimulation(float deltaTime) { nextAttitude(position, orientation); _bodySensorMatrix = _follow.postPhysicsUpdate(*this, _bodySensorMatrix); + setVelocity(_characterController.getLinearVelocity() + _characterController.getFollowVelocity()); + // now that physics has adjusted our position, we can update attachements. Avatar::simulateAttachments(deltaTime); } diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index ae9e37b591..1ee26a865d 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -162,7 +162,7 @@ void Stats::updateStats(bool force) { MyAvatar* myAvatar = avatarManager->getMyAvatar(); glm::vec3 avatarPos = myAvatar->getPosition(); STAT_UPDATE(position, QVector3D(avatarPos.x, avatarPos.y, avatarPos.z)); - STAT_UPDATE_FLOAT(velocity, glm::length(myAvatar->getVelocity()), 0.1f); + STAT_UPDATE_FLOAT(speed, glm::length(myAvatar->getVelocity()), 0.1f); STAT_UPDATE_FLOAT(yaw, myAvatar->getBodyYaw(), 0.1f); if (_expanded || force) { SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer); diff --git a/interface/src/ui/Stats.h b/interface/src/ui/Stats.h index fc01fe7f23..bebfbf6f70 100644 --- a/interface/src/ui/Stats.h +++ b/interface/src/ui/Stats.h @@ -47,7 +47,7 @@ class Stats : public QQuickItem { STATS_PROPERTY(int, entitiesPing, 0) STATS_PROPERTY(int, assetPing, 0) STATS_PROPERTY(QVector3D, position, QVector3D(0, 0, 0) ) - STATS_PROPERTY(float, velocity, 0) + STATS_PROPERTY(float, speed, 0) STATS_PROPERTY(float, yaw, 0) STATS_PROPERTY(int, avatarMixerInKbps, 0) STATS_PROPERTY(int, avatarMixerInPps, 0) @@ -138,7 +138,7 @@ signals: void entitiesPingChanged(); void assetPingChanged(); void positionChanged(); - void velocityChanged(); + void speedChanged(); void yawChanged(); void avatarMixerInKbpsChanged(); void avatarMixerInPpsChanged(); diff --git a/libraries/physics/src/CharacterController.cpp b/libraries/physics/src/CharacterController.cpp index 65432e2f65..a30feec150 100644 --- a/libraries/physics/src/CharacterController.cpp +++ b/libraries/physics/src/CharacterController.cpp @@ -390,6 +390,14 @@ glm::quat CharacterController::getFollowAngularDisplacement() const { return bulletToGLM(_followAngularDisplacement); } +glm::vec3 CharacterController::getFollowVelocity() const { + if (_followTime > 0.0f) { + return bulletToGLM(_followLinearDisplacement) / _followTime; + } else { + return glm::vec3(); + } +} + glm::vec3 CharacterController::getLinearVelocity() const { glm::vec3 velocity(0.0f); if (_rigidBody) { diff --git a/libraries/physics/src/CharacterController.h b/libraries/physics/src/CharacterController.h index 224632ea6b..c1c64a1a02 100644 --- a/libraries/physics/src/CharacterController.h +++ b/libraries/physics/src/CharacterController.h @@ -71,6 +71,7 @@ public: float getFollowTime() const { return _followTime; } glm::vec3 getFollowLinearDisplacement() const; glm::quat getFollowAngularDisplacement() const; + glm::vec3 getFollowVelocity() const; glm::vec3 getLinearVelocity() const;