From d5d9479b65a65170b5932902940c48c97c058b02 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 7 May 2013 13:38:56 -0700 Subject: [PATCH 1/4] make eve send her ID to identify with the avatar mixer --- eve/src/main.cpp | 22 +++++++++++----------- interface/src/main.cpp | 5 ++--- libraries/shared/src/PacketHeaders.h | 27 ++++++++++++++------------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index ad0081fc3b..b72d1194a4 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -130,8 +130,6 @@ int main(int argc, const char* argv[]) { unsigned char broadcastPacket[MAX_PACKET_SIZE]; broadcastPacket[0] = PACKET_HEADER_HEAD_DATA; - int numBytesToSend = 0; - timeval thisSend; double numMicrosecondsSleep = 0; @@ -148,13 +146,16 @@ int main(int argc, const char* argv[]) { Agent *avatarMixer = agentList->soloAgentOfType(AGENT_TYPE_AVATAR_MIXER); // make sure we actually have an avatar mixer with an active socket - if (avatarMixer != NULL && avatarMixer->getActiveSocket() != NULL) { + if (agentList->getOwnerID() != UNKNOWN_AGENT_ID && avatarMixer != NULL && avatarMixer->getActiveSocket() != NULL) { + unsigned char* packetPosition = broadcastPacket + sizeof(PACKET_HEADER); + packetPosition += packAgentId(packetPosition, agentList->getOwnerID()); + // use the getBroadcastData method in the AvatarData class to populate the broadcastPacket buffer - numBytesToSend = eve.getBroadcastData((broadcastPacket + 1)); + packetPosition += eve.getBroadcastData(packetPosition); // use the UDPSocket instance attached to our agent list to send avatar data to mixer - agentList->getAgentSocket().send(avatarMixer->getActiveSocket(), broadcastPacket, numBytesToSend); - } + agentList->getAgentSocket().send(avatarMixer->getActiveSocket(), broadcastPacket, packetPosition - broadcastPacket); + } // temporarily disable Eve's audio sending until the file is actually available on EC2 box if (numIterationsLeftBeforeAudioSend == 0) { @@ -175,13 +176,12 @@ int main(int argc, const char* argv[]) { // simulate the effect of pressing and un-pressing the mouse button/pad handStateTimer++; - if ( handStateTimer == 100 ) { + + if (handStateTimer == 100) { eve.setHandState(1); - } - if ( handStateTimer == 150 ) { + } else if (handStateTimer == 150) { eve.setHandState(0); - } - if ( handStateTimer >= 200 ) { + } else if (handStateTimer >= 200) { handStateTimer = 0; } } diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 704200d24c..756a1481c5 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -696,13 +696,12 @@ void displaySide(Camera& whichCamera) { drawGroundPlaneGrid(10.f); // Draw voxels - if (showingVoxels) - { + if (showingVoxels) { voxels.render(); } // Render avatars of other agents - AgentList* agentList = AgentList::getInstance(); + AgentList *agentList = AgentList::getInstance(); agentList->lock(); for (AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { if (agent->getLinkedData() != NULL && agent->getType() == AGENT_TYPE_AVATAR) { diff --git a/libraries/shared/src/PacketHeaders.h b/libraries/shared/src/PacketHeaders.h index 1ceb3fcc5a..152adc5805 100644 --- a/libraries/shared/src/PacketHeaders.h +++ b/libraries/shared/src/PacketHeaders.h @@ -13,18 +13,19 @@ #ifndef hifi_PacketHeaders_h #define hifi_PacketHeaders_h -const char PACKET_HEADER_DOMAIN = 'D'; -const char PACKET_HEADER_PING = 'P'; -const char PACKET_HEADER_PING_REPLY = 'R'; -const char PACKET_HEADER_HEAD_DATA = 'H'; -const char PACKET_HEADER_Z_COMMAND = 'Z'; -const char PACKET_HEADER_INJECT_AUDIO = 'I'; -const char PACKET_HEADER_SET_VOXEL = 'S'; -const char PACKET_HEADER_ERASE_VOXEL = 'E'; -const char PACKET_HEADER_VOXEL_DATA = 'V'; -const char PACKET_HEADER_BULK_AVATAR_DATA = 'X'; -const char PACKET_HEADER_TRANSMITTER_DATA = 't'; -const char PACKET_HEADER_DOMAIN_LIST_REQUEST = 'L'; -const char PACKET_HEADER_DOMAIN_RFD = 'C'; +typedef char PACKET_HEADER; +const PACKET_HEADER PACKET_HEADER_DOMAIN = 'D'; +const PACKET_HEADER PACKET_HEADER_PING = 'P'; +const PACKET_HEADER PACKET_HEADER_PING_REPLY = 'R'; +const PACKET_HEADER PACKET_HEADER_HEAD_DATA = 'H'; +const PACKET_HEADER PACKET_HEADER_Z_COMMAND = 'Z'; +const PACKET_HEADER PACKET_HEADER_INJECT_AUDIO = 'I'; +const PACKET_HEADER PACKET_HEADER_SET_VOXEL = 'S'; +const PACKET_HEADER PACKET_HEADER_ERASE_VOXEL = 'E'; +const PACKET_HEADER PACKET_HEADER_VOXEL_DATA = 'V'; +const PACKET_HEADER PACKET_HEADER_BULK_AVATAR_DATA = 'X'; +const PACKET_HEADER PACKET_HEADER_TRANSMITTER_DATA = 't'; +const PACKET_HEADER PACKET_HEADER_DOMAIN_LIST_REQUEST = 'L'; +const PACKET_HEADER PACKET_HEADER_DOMAIN_RFD = 'C'; #endif From 9be92cebdd4638dc267db30bb26cb5ee19ea001e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 7 May 2013 13:41:48 -0700 Subject: [PATCH 2/4] revert type squish, spacing, code review comment --- eve/src/main.cpp | 4 ++-- interface/src/main.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index b72d1194a4..08200c6606 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -143,10 +143,10 @@ int main(int argc, const char* argv[]) { gettimeofday(&thisSend, NULL); // find the current avatar mixer - Agent *avatarMixer = agentList->soloAgentOfType(AGENT_TYPE_AVATAR_MIXER); + Agent* avatarMixer = agentList->soloAgentOfType(AGENT_TYPE_AVATAR_MIXER); // make sure we actually have an avatar mixer with an active socket - if (agentList->getOwnerID() != UNKNOWN_AGENT_ID && avatarMixer != NULL && avatarMixer->getActiveSocket() != NULL) { + if (agentList->getOwnerID() != UNKNOWN_AGENT_ID && avatarMixer && avatarMixer->getActiveSocket() != NULL) { unsigned char* packetPosition = broadcastPacket + sizeof(PACKET_HEADER); packetPosition += packAgentId(packetPosition, agentList->getOwnerID()); diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 756a1481c5..fad68d9c13 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -429,7 +429,7 @@ void updateAvatar(float frametime) { myAvatar.setCameraNearClip(::viewFrustum.getNearClip()); myAvatar.setCameraFarClip(::viewFrustum.getFarClip()); - AgentList *agentList = AgentList::getInstance(); + AgentList* agentList = AgentList::getInstance(); if (agentList->getOwnerID() != UNKNOWN_AGENT_ID) { // if I know my ID, send head/hand data to the avatar mixer and voxel server @@ -451,9 +451,9 @@ void updateAvatar(float frametime) { glm::vec3 avatarPos = myAvatar.getPosition(); // For some reason, we don't want to flip X and Z here. - ::paintingVoxel.x = avatarPos.x/10.0; - ::paintingVoxel.y = avatarPos.y/10.0; - ::paintingVoxel.z = avatarPos.z/10.0; + ::paintingVoxel.x = avatarPos.x / 10.0; + ::paintingVoxel.y = avatarPos.y / 10.0; + ::paintingVoxel.z = avatarPos.z / 10.0; unsigned char* bufferOut; int sizeOut; From 92daa8e6e05f31f9c3413ba7f9bb8c20ccd6c8f0 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 7 May 2013 13:43:07 -0700 Subject: [PATCH 3/4] revert the type squish --- interface/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index fad68d9c13..4b34f9a2b0 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -701,7 +701,7 @@ void displaySide(Camera& whichCamera) { } // Render avatars of other agents - AgentList *agentList = AgentList::getInstance(); + AgentList* agentList = AgentList::getInstance(); agentList->lock(); for (AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { if (agent->getLinkedData() != NULL && agent->getType() == AGENT_TYPE_AVATAR) { From 3719454abd5904c00cab290d3a1373584cacfbe2 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 7 May 2013 13:47:12 -0700 Subject: [PATCH 4/4] use constants for eve's hand grabbing behavior --- eve/src/main.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/eve/src/main.cpp b/eve/src/main.cpp index 08200c6606..7c4bde7a2d 100644 --- a/eve/src/main.cpp +++ b/eve/src/main.cpp @@ -25,6 +25,10 @@ const int MIN_ITERATIONS_BETWEEN_AUDIO_SENDS = (MIN_AUDIO_SEND_INTERVAL_SECS * 1 const int MAX_AUDIO_SEND_INTERVAL_SECS = 15; const float MAX_ITERATIONS_BETWEEN_AUDIO_SENDS = (MAX_AUDIO_SEND_INTERVAL_SECS * 1000) / DATA_SEND_INTERVAL_MSECS; +const int ITERATIONS_BEFORE_HAND_GRAB = 100; +const int HAND_GRAB_DURATION_ITERATIONS = 50; +const int HAND_TIMER_SLEEP_ITERATIONS = 50; + bool stopReceiveAgentDataThread; bool injectAudioThreadRunning = false; @@ -177,11 +181,11 @@ int main(int argc, const char* argv[]) { // simulate the effect of pressing and un-pressing the mouse button/pad handStateTimer++; - if (handStateTimer == 100) { + if (handStateTimer == ITERATIONS_BEFORE_HAND_GRAB) { eve.setHandState(1); - } else if (handStateTimer == 150) { + } else if (handStateTimer == ITERATIONS_BEFORE_HAND_GRAB + HAND_GRAB_DURATION_ITERATIONS) { eve.setHandState(0); - } else if (handStateTimer >= 200) { + } else if (handStateTimer >= ITERATIONS_BEFORE_HAND_GRAB + HAND_GRAB_DURATION_ITERATIONS + HAND_TIMER_SLEEP_ITERATIONS) { handStateTimer = 0; } }