From 924ebe1e54d0ba2a67f9f8062bc1669d037a8b24 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 13 Mar 2015 09:39:47 -0700 Subject: [PATCH] propagate skeleton's bounding box into AvatarData --- interface/src/Application.cpp | 1 + interface/src/avatar/MyAvatar.cpp | 11 +++++++++++ interface/src/avatar/MyAvatar.h | 1 + libraries/avatars/src/AvatarData.h | 3 ++- 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 437ef3374c..9b2bec079f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4094,6 +4094,7 @@ void Application::checkSkeleton() { _myAvatar->setSkeletonModelURL(DEFAULT_BODY_MODEL_URL); _myAvatar->sendIdentityPacket(); } else { + _myAvatar->updateLocalAABox(); _physicsEngine.setAvatarData(_myAvatar); } } diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index d9c9ff3ad1..bdb0877cda 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -954,6 +954,17 @@ glm::vec3 MyAvatar::getSkeletonPosition() const { return Avatar::getPosition(); } +void MyAvatar::updateLocalAABox() { + const CapsuleShape& capsule = _skeletonModel.getBoundingShape(); + float radius = capsule.getRadius(); + float height = 2.0f * (capsule.getHalfHeight() + radius); + glm::vec3 offset = _skeletonModel.getBoundingShapeOffset(); + glm::vec3 corner(-radius, -0.5f * height, -radius); + corner += offset; + glm::vec3 scale(2.0f * radius, height, 2.0f * radius); + _localAABox.setBox(corner, scale); +} + QString MyAvatar::getScriptedMotorFrame() const { QString frame = "avatar"; if (_scriptedMotorFrame == SCRIPTED_MOTOR_CAMERA_FRAME) { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 7376acfdcb..08c0228f1e 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -121,6 +121,7 @@ public: virtual void setAttachmentData(const QVector& attachmentData); virtual glm::vec3 getSkeletonPosition() const; + void updateLocalAABox(); void clearJointAnimationPriorities(); diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 5490938e30..28123124a0 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -403,6 +403,8 @@ protected: glm::vec3 _velocity; + AABox _localAABox; + private: // privatize the copy constructor and assignment operator so they cannot be called AvatarData(const AvatarData&); @@ -410,7 +412,6 @@ private: QReadWriteLock _lock; bool _enablePhysics = false; - AABox _localAABox; }; Q_DECLARE_METATYPE(AvatarData*)