From 49b483ef53a38a3aa2b8427f7b441a428138ec28 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 24 May 2013 11:29:49 -0700 Subject: [PATCH] maintain a pointer to owning avatar from HeadData --- interface/src/Avatar.cpp | 1 + interface/src/Head.cpp | 4 ++-- interface/src/Head.h | 4 +++- libraries/avatars/src/AvatarData.cpp | 4 ++-- libraries/avatars/src/HeadData.cpp | 5 +++-- libraries/avatars/src/HeadData.h | 5 ++++- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index de93fd859c..125ef979bb 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -71,6 +71,7 @@ float chatMessageHeight = 0.10; Avatar::Avatar(Agent* owningAgent, bool isMine) : AvatarData(owningAgent), + _head(this), _isMine(isMine), _TEST_bigSphereRadius(0.4f), _TEST_bigSpherePosition(5.0f, _TEST_bigSphereRadius, 5.0f), diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index cc628a448f..0d891cf0e6 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -30,8 +30,8 @@ unsigned int IRIS_TEXTURE_WIDTH = 768; unsigned int IRIS_TEXTURE_HEIGHT = 498; vector irisTexture; -Head::Head() : - +Head::Head(Avatar* owningAvatar) : + HeadData((AvatarData*)owningAvatar), yawRate(0.0f), _returnHeadToCenter(false), _audioLoudness(0.0f), diff --git a/interface/src/Head.h b/interface/src/Head.h index 3b97361e3f..c20ce0e255 100644 --- a/interface/src/Head.h +++ b/interface/src/Head.h @@ -24,9 +24,11 @@ enum eyeContactTargets MOUTH }; +class Avatar; + class Head : public HeadData { public: - Head(); + Head(Avatar* owningAvatar); void reset(); void simulate(float deltaTime, bool isMine); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index c660e55347..4b97a2a047 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -68,7 +68,7 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { // lazily allocate memory for HeadData in case we're not an Avatar instance if (!_headData) { - _headData = new HeadData(); + _headData = new HeadData(this); } // Body world position @@ -149,7 +149,7 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { // lazily allocate memory for HeadData in case we're not an Avatar instance if (!_headData) { - _headData = new HeadData(); + _headData = new HeadData(this); } // increment to push past the packet header diff --git a/libraries/avatars/src/HeadData.cpp b/libraries/avatars/src/HeadData.cpp index 9c01346152..906e10e48f 100644 --- a/libraries/avatars/src/HeadData.cpp +++ b/libraries/avatars/src/HeadData.cpp @@ -8,13 +8,14 @@ #include "HeadData.h" -HeadData::HeadData() : +HeadData::HeadData(AvatarData* owningAvatar) : _yaw(0.0f), _pitch(0.0f), _roll(0.0f), _lookAtPosition(0.0f, 0.0f, 0.0f), _leanSideways(0.0f), - _leanForward(0.0f) + _leanForward(0.0f), + _owningAvatar(owningAvatar) { } diff --git a/libraries/avatars/src/HeadData.h b/libraries/avatars/src/HeadData.h index fb16fea00e..1f0a8181b5 100644 --- a/libraries/avatars/src/HeadData.h +++ b/libraries/avatars/src/HeadData.h @@ -20,9 +20,11 @@ const float MAX_HEAD_PITCH = 60; const float MIN_HEAD_ROLL = -50; const float MAX_HEAD_ROLL = 50; +class AvatarData; + class HeadData { public: - HeadData(); + HeadData(AvatarData* owningAvatar); float getLeanSideways() const { return _leanSideways; } void setLeanSideways(float leanSideways) { _leanSideways = leanSideways; } @@ -55,6 +57,7 @@ protected: glm::vec3 _lookAtPosition; float _leanSideways; float _leanForward; + AvatarData* _owningAvatar; private: // privatize copy ctor and assignment operator so copies of this object cannot be made HeadData(const HeadData&);