From 36892da4886e6af73be827a256564928e79a5f03 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 24 May 2013 11:24:21 -0700 Subject: [PATCH] keep a pointer to owning agent in AgentData --- avatar-mixer/src/main.cpp | 2 +- eve/src/main.cpp | 4 ++-- interface/src/Application.cpp | 6 +++--- interface/src/Avatar.cpp | 3 ++- interface/src/Avatar.h | 2 +- interface/src/VoxelSystem.cpp | 2 +- libraries/audio/src/AudioRingBuffer.cpp | 3 ++- libraries/avatars/src/AvatarData.cpp | 3 ++- libraries/avatars/src/AvatarData.h | 2 +- libraries/shared/src/AgentData.cpp | 6 ++++++ libraries/shared/src/AgentData.h | 7 ++++++- voxel-server/src/VoxelAgentData.cpp | 1 + 12 files changed, 28 insertions(+), 13 deletions(-) diff --git a/avatar-mixer/src/main.cpp b/avatar-mixer/src/main.cpp index da2b41b1bd..0e838833f4 100644 --- a/avatar-mixer/src/main.cpp +++ b/avatar-mixer/src/main.cpp @@ -47,7 +47,7 @@ unsigned char *addAgentToBroadcastPacket(unsigned char *currentPosition, Agent * void attachAvatarDataToAgent(Agent *newAgent) { if (newAgent->getLinkedData() == NULL) { - newAgent->setLinkedData(new AvatarData()); + newAgent->setLinkedData(new AvatarData(newAgent)); } } diff --git a/eve/src/main.cpp b/eve/src/main.cpp index 62be6e36cd..92355970c6 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -71,7 +71,7 @@ void *receiveAgentData(void *args) { void createAvatarDataForAgent(Agent* agent) { if (!agent->getLinkedData()) { - agent->setLinkedData(new AvatarData()); + agent->setLinkedData(new AvatarData(agent)); } } @@ -95,7 +95,7 @@ int main(int argc, const char* argv[]) { pthread_create(&receiveAgentDataThread, NULL, receiveAgentData, NULL); // create an AvatarData object, "eve" - AvatarData eve; + AvatarData eve(NULL); // move eve away from the origin // pick a random point inside a 10x10 grid diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 37b8cf31b6..80690e162a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -128,7 +128,7 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : _viewFrustumOffsetDistance(25.0), _viewFrustumOffsetUp(0.0), _audioScope(256, 200, true), - _myAvatar(true), + _myAvatar(NULL, true), _manualFirstPerson(false), _mouseX(0), _mouseY(0), @@ -2098,9 +2098,9 @@ QAction* Application::checkedVoxelModeAction() const { return 0; } -void Application::attachNewHeadToAgent(Agent *newAgent) { +void Application::attachNewHeadToAgent(Agent* newAgent) { if (newAgent->getLinkedData() == NULL) { - newAgent->setLinkedData(new Avatar(false)); + newAgent->setLinkedData(new Avatar(newAgent, false)); } } diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index bdfd7c8691..de93fd859c 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -69,7 +69,8 @@ bool usingBigSphereCollisionTest = true; float chatMessageScale = 0.0015; float chatMessageHeight = 0.10; -Avatar::Avatar(bool isMine) : +Avatar::Avatar(Agent* owningAgent, bool isMine) : + AvatarData(owningAgent), _isMine(isMine), _TEST_bigSphereRadius(0.4f), _TEST_bigSpherePosition(5.0f, _TEST_bigSphereRadius, 5.0f), diff --git a/interface/src/Avatar.h b/interface/src/Avatar.h index 59f9018af3..a5f1531417 100644 --- a/interface/src/Avatar.h +++ b/interface/src/Avatar.h @@ -76,7 +76,7 @@ enum AvatarJointID class Avatar : public AvatarData { public: - Avatar(bool isMine); + Avatar(Agent* owningAgent, bool isMine); ~Avatar(); void reset(); diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index 026f1dd4ee..68707355bb 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -44,7 +44,7 @@ GLubyte identityIndices[] = { 0,2,1, 0,3,2, // Z- . 10,11,15, 10,15,14, // Y+ 4,5,6, 4,6,7 }; // Z+ . -VoxelSystem::VoxelSystem() { +VoxelSystem::VoxelSystem() : AgentData(NULL) { _voxelsInReadArrays = _voxelsInWriteArrays = _voxelsUpdated = 0; _writeRenderFullVBO = true; _readRenderFullVBO = true; diff --git a/libraries/audio/src/AudioRingBuffer.cpp b/libraries/audio/src/AudioRingBuffer.cpp index 59b35b18a3..ee693ebde3 100644 --- a/libraries/audio/src/AudioRingBuffer.cpp +++ b/libraries/audio/src/AudioRingBuffer.cpp @@ -13,6 +13,7 @@ #include "AudioRingBuffer.h" AudioRingBuffer::AudioRingBuffer(int ringSamples, int bufferSamples) : + AgentData(NULL), _ringBufferLengthSamples(ringSamples), _bufferLengthSamples(bufferSamples), _endOfLastWrite(NULL), @@ -20,7 +21,7 @@ AudioRingBuffer::AudioRingBuffer(int ringSamples, int bufferSamples) : _shouldBeAddedToMix(false), _shouldLoopbackForAgent(false), _streamIdentifier() -{ +{ _buffer = new int16_t[_ringBufferLengthSamples]; _nextOutput = _buffer; }; diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index ab69c28dd0..c660e55347 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -31,7 +31,8 @@ int unpackFloatAngleFromTwoByte(uint16_t* byteAnglePointer, float* destinationPo return sizeof(uint16_t); } -AvatarData::AvatarData() : +AvatarData::AvatarData(Agent* owningAgent) : + AgentData(owningAgent), _handPosition(0,0,0), _bodyYaw(-90.0), _bodyPitch(0.0), diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 3e3536c3a9..b1582cf9f8 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -29,7 +29,7 @@ enum KeyState class AvatarData : public AgentData { public: - AvatarData(); + AvatarData(Agent* owningAgent); ~AvatarData(); const glm::vec3& getPosition() const { return _position; } diff --git a/libraries/shared/src/AgentData.cpp b/libraries/shared/src/AgentData.cpp index f4710246d7..c910a9c43f 100644 --- a/libraries/shared/src/AgentData.cpp +++ b/libraries/shared/src/AgentData.cpp @@ -8,4 +8,10 @@ #include "AgentData.h" +AgentData::AgentData(Agent* owningAgent) : + _owningAgent(owningAgent) +{ + +} + AgentData::~AgentData() {} \ No newline at end of file diff --git a/libraries/shared/src/AgentData.h b/libraries/shared/src/AgentData.h index 342f501a1e..99cdbaca95 100644 --- a/libraries/shared/src/AgentData.h +++ b/libraries/shared/src/AgentData.h @@ -3,16 +3,21 @@ // hifi // // Created by Stephen Birarda on 2/19/13. -// +// Copyright (c) 2013 High Fidelity, Inc. All rights reserved. // #ifndef hifi_AgentData_h #define hifi_AgentData_h +class Agent; + class AgentData { public: + AgentData(Agent* owningAgent); virtual ~AgentData() = 0; virtual int parseData(unsigned char* sourceBuffer, int numBytes) = 0; +private: + Agent* _owningAgent; }; #endif diff --git a/voxel-server/src/VoxelAgentData.cpp b/voxel-server/src/VoxelAgentData.cpp index e25defef7a..a017881301 100644 --- a/voxel-server/src/VoxelAgentData.cpp +++ b/voxel-server/src/VoxelAgentData.cpp @@ -12,6 +12,7 @@ #include VoxelAgentData::VoxelAgentData() : + AvatarData(NULL), _viewSent(false), _voxelPacketAvailableBytes(MAX_VOXEL_PACKET_SIZE), _maxSearchLevel(1),