From 23b65a16ddcc6294d94acdd3a2e89cc33b1219e6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 1 Jul 2013 11:39:45 -0700 Subject: [PATCH 01/56] add the assignee agent type --- libraries/shared/src/Agent.cpp | 3 +++ libraries/shared/src/AgentTypes.h | 1 + 2 files changed, 4 insertions(+) diff --git a/libraries/shared/src/Agent.cpp b/libraries/shared/src/Agent.cpp index 7e19338ce9..0f93335558 100644 --- a/libraries/shared/src/Agent.cpp +++ b/libraries/shared/src/Agent.cpp @@ -70,6 +70,7 @@ const char* AGENT_TYPE_NAME_AUDIO_MIXER = "Audio Mixer"; const char* AGENT_TYPE_NAME_AVATAR_MIXER = "Avatar Mixer"; const char* AGENT_TYPE_NAME_AUDIO_INJECTOR = "Audio Injector"; const char* AGENT_TYPE_NAME_ANIMATION_SERVER = "Animation Server"; +const char* AGENT_TYPE_NAME_ASSIGNEE = "Assignee"; const char* AGENT_TYPE_NAME_UNKNOWN = "Unknown"; const char* Agent::getTypeName() const { @@ -88,6 +89,8 @@ const char* Agent::getTypeName() const { return AGENT_TYPE_NAME_AUDIO_INJECTOR; case AGENT_TYPE_ANIMATION_SERVER: return AGENT_TYPE_NAME_ANIMATION_SERVER; + case AGENT_TYPE_ASSIGNEE: + return AGENT_TYPE_NAME_ASSIGNEE; default: return AGENT_TYPE_NAME_UNKNOWN; } diff --git a/libraries/shared/src/AgentTypes.h b/libraries/shared/src/AgentTypes.h index 56e900c923..6c9c59c410 100644 --- a/libraries/shared/src/AgentTypes.h +++ b/libraries/shared/src/AgentTypes.h @@ -24,5 +24,6 @@ const AGENT_TYPE AGENT_TYPE_AUDIO_MIXER = 'M'; const AGENT_TYPE AGENT_TYPE_AVATAR_MIXER = 'W'; const AGENT_TYPE AGENT_TYPE_AUDIO_INJECTOR = 'A'; const AGENT_TYPE AGENT_TYPE_ANIMATION_SERVER = 'a'; +const AGENT_TYPE AGENT_TYPE_ASSIGNEE = 'o'; #endif From a78ae338dbf5e7934ae0b371f6f02644998bef60 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 1 Jul 2013 11:55:23 -0700 Subject: [PATCH 02/56] add an all rights reserved license --- LICENSE | 1 + 1 file changed, 1 insertion(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..1ecd0026f5 --- /dev/null +++ b/LICENSE @@ -0,0 +1 @@ +All rights reserved. © High Fidelity, Inc. 2013 \ No newline at end of file From e59dbfd99be1c6f1319ec591501c464f145e6ee1 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 1 Jul 2013 13:35:58 -0700 Subject: [PATCH 03/56] add a setter to change AgentList owner type --- libraries/shared/src/AgentList.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/shared/src/AgentList.h b/libraries/shared/src/AgentList.h index 8a283009fe..65a9fbe3bf 100644 --- a/libraries/shared/src/AgentList.h +++ b/libraries/shared/src/AgentList.h @@ -49,6 +49,7 @@ public: AgentListIterator end() const; char getOwnerType() const { return _ownerType; } + void setOwnerType(char ownerType) { _ownerType = ownerType; } uint16_t getLastAgentID() const { return _lastAgentID; } void increaseAgentID() { ++_lastAgentID; } From b9c152532117106e148ee42181afde960bae5968 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 1 Jul 2013 14:05:14 -0700 Subject: [PATCH 04/56] add the base of the assignment-server --- CMakeLists.txt | 1 + assignment-server/CMakeLists.txt | 13 +++++++++++ assignment-server/src/main.cpp | 33 ++++++++++++++++++++++++++++ libraries/shared/src/PacketHeaders.h | 2 ++ 4 files changed, 49 insertions(+) create mode 100644 assignment-server/CMakeLists.txt create mode 100644 assignment-server/src/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8af8081975..80c5de1df6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 2.8) project(hifi) add_subdirectory(animation-server) +add_subdirectory(assignment-server) add_subdirectory(avatar-mixer) add_subdirectory(audio-mixer) add_subdirectory(domain-server) diff --git a/assignment-server/CMakeLists.txt b/assignment-server/CMakeLists.txt new file mode 100644 index 0000000000..2df1140547 --- /dev/null +++ b/assignment-server/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 2.8) + +set(TARGET_NAME assignment-server) + +set(ROOT_DIR ..) +set(MACRO_DIR ${ROOT_DIR}/cmake/macros) + +include(${MACRO_DIR}/SetupHifiProject.cmake) +setup_hifi_project(${TARGET_NAME}) + +# link in the shared library +include(${MACRO_DIR}/LinkHifiLibrary.cmake) +link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp new file mode 100644 index 0000000000..faad21aa6f --- /dev/null +++ b/assignment-server/src/main.cpp @@ -0,0 +1,33 @@ +// +// main.cpp +// assignment-server +// +// Created by Stephen Birarda on 7/1/13. +// Copyright (c) 2013 High Fidelity, Inc. All rights reserved. +// + +#include + +#include +#include + +const int ASSIGNMENT_SERVER_LISTEN_PORT = 7007; +const int MAX_PACKET_SIZE_BYTES = 1400; + +int main(int argc, const char* argv[]) { + + sockaddr_in senderSocket; + char senderData[MAX_PACKET_SIZE_BYTES] = {}; + ssize_t receivedBytes = 0; + + UDPSocket serverSocket(ASSIGNMENT_SERVER_LISTEN_PORT); + + while (true) { + if (serverSocket.receive((sockaddr*) &senderSocket, &senderData, &receivedBytes)) { + if (senderData[0] == PACKET_HEADER_REQUEST_ASSIGNMENT) { + // for now just send back a dummy assignment packet + serverSocket.send((sockaddr*) &senderSocket, &PACKET_HEADER_SEND_ASSIGNMENT, 1); + } + } + } +} diff --git a/libraries/shared/src/PacketHeaders.h b/libraries/shared/src/PacketHeaders.h index 89f6fbaf54..9f87bc2e8d 100644 --- a/libraries/shared/src/PacketHeaders.h +++ b/libraries/shared/src/PacketHeaders.h @@ -33,6 +33,8 @@ const PACKET_HEADER PACKET_HEADER_TRANSMITTER_DATA_V2 = 'T'; const PACKET_HEADER PACKET_HEADER_ENVIRONMENT_DATA = 'e'; const PACKET_HEADER PACKET_HEADER_DOMAIN_LIST_REQUEST = 'L'; const PACKET_HEADER PACKET_HEADER_DOMAIN_REPORT_FOR_DUTY = 'C'; +const PACKET_HEADER PACKET_HEADER_REQUEST_ASSIGNMENT = 'r'; +const PACKET_HEADER PACKET_HEADER_SEND_ASSIGNMENT = 's'; // These are supported Z-Command From eb8faa3667b653faf309042eecf2edf2e121e447 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 1 Jul 2013 15:48:52 -0700 Subject: [PATCH 05/56] add sendAssignmentRequest method to AgentList --- libraries/shared/src/AgentList.cpp | 10 ++++++++++ libraries/shared/src/AgentList.h | 1 + libraries/shared/src/UDPSocket.cpp | 11 +++++++++++ libraries/shared/src/UDPSocket.h | 1 + 4 files changed, 23 insertions(+) diff --git a/libraries/shared/src/AgentList.cpp b/libraries/shared/src/AgentList.cpp index 237b367252..9ad97d8851 100644 --- a/libraries/shared/src/AgentList.cpp +++ b/libraries/shared/src/AgentList.cpp @@ -257,6 +257,16 @@ void AgentList::sendDomainServerCheckIn() { _agentSocket.send(DOMAIN_IP, DOMAINSERVER_PORT, checkInPacket, checkInPacketSize); } +void AgentList::sendAssignmentRequest() { + const char ASSIGNMENT_SERVER_HOSTNAME[] = "assignment.highfidelity.io"; + const unsigned short ASSIGNMENT_SERVER_PORT = 7007; + + static sockaddr_in assignmentServerSocket = socketForHostname(ASSIGNMENT_SERVER_HOSTNAME); + assignmentServerSocket.sin_port = htons(ASSIGNMENT_SERVER_PORT); + + _agentSocket.send((sockaddr *) &assignmentServerSocket, &PACKET_HEADER_REQUEST_ASSIGNMENT, 1); +} + int AgentList::processDomainServerList(unsigned char *packetData, size_t dataBytes) { int readAgents = 0; diff --git a/libraries/shared/src/AgentList.h b/libraries/shared/src/AgentList.h index 65a9fbe3bf..193d397c59 100644 --- a/libraries/shared/src/AgentList.h +++ b/libraries/shared/src/AgentList.h @@ -70,6 +70,7 @@ public: void setAgentTypesOfInterest(const char* agentTypesOfInterest, int numAgentTypesOfInterest); void sendDomainServerCheckIn(); + void sendAssignmentRequest(); int processDomainServerList(unsigned char *packetData, size_t dataBytes); Agent* agentWithAddress(sockaddr *senderAddress); diff --git a/libraries/shared/src/UDPSocket.cpp b/libraries/shared/src/UDPSocket.cpp index 69cf0cfebe..f71c112575 100644 --- a/libraries/shared/src/UDPSocket.cpp +++ b/libraries/shared/src/UDPSocket.cpp @@ -117,6 +117,17 @@ unsigned short loadBufferWithSocketInfo(char* addressBuffer, sockaddr* socket) { } } +sockaddr_in socketForHostname(const char* hostname) { + struct hostent* pHostInfo; + sockaddr_in newSocket; + + if ((pHostInfo = gethostbyname(hostname))) { + memcpy(&newSocket.sin_addr, pHostInfo->h_addr_list[0], pHostInfo->h_length); + } + + return newSocket; +} + UDPSocket::UDPSocket(int listeningPort) : listeningPort(listeningPort), blocking(true) { init(); // create the socket diff --git a/libraries/shared/src/UDPSocket.h b/libraries/shared/src/UDPSocket.h index 8539ff93c2..58bee3d2de 100644 --- a/libraries/shared/src/UDPSocket.h +++ b/libraries/shared/src/UDPSocket.h @@ -42,5 +42,6 @@ int packSocket(unsigned char* packStore, sockaddr* socketToPack); int unpackSocket(unsigned char* packedData, sockaddr* unpackDestSocket); int getLocalAddress(); unsigned short loadBufferWithSocketInfo(char* addressBuffer, sockaddr* socket); +sockaddr_in socketForHostname(const char* hostname); #endif /* defined(__interface__UDPSocket__) */ From 1c142ecc303e0f8fc771948afdb6446248d1e78d Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 1 Jul 2013 15:57:35 -0700 Subject: [PATCH 06/56] add a stubbed Operative class --- libraries/shared/src/AgentTypes.h | 1 + libraries/shared/src/Operative.cpp | 15 +++++++++++++++ libraries/shared/src/Operative.h | 19 +++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 libraries/shared/src/Operative.cpp create mode 100644 libraries/shared/src/Operative.h diff --git a/libraries/shared/src/AgentTypes.h b/libraries/shared/src/AgentTypes.h index 6c9c59c410..30c656f47d 100644 --- a/libraries/shared/src/AgentTypes.h +++ b/libraries/shared/src/AgentTypes.h @@ -25,5 +25,6 @@ const AGENT_TYPE AGENT_TYPE_AVATAR_MIXER = 'W'; const AGENT_TYPE AGENT_TYPE_AUDIO_INJECTOR = 'A'; const AGENT_TYPE AGENT_TYPE_ANIMATION_SERVER = 'a'; const AGENT_TYPE AGENT_TYPE_ASSIGNEE = 'o'; +const AGENT_TYPE AGENT_TYPE_OPERATIVE = 'O'; #endif diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp new file mode 100644 index 0000000000..b1adbecfbe --- /dev/null +++ b/libraries/shared/src/Operative.cpp @@ -0,0 +1,15 @@ +// +// Operative.cpp +// hifi +// +// Created by Stephen Birarda on 7/1/13. +// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. +// + +#include "AgentList.h" + +#include "Operative.h" + +void Operative::run() { + +} \ No newline at end of file diff --git a/libraries/shared/src/Operative.h b/libraries/shared/src/Operative.h new file mode 100644 index 0000000000..a77cc5d62b --- /dev/null +++ b/libraries/shared/src/Operative.h @@ -0,0 +1,19 @@ +// +// Operative.h +// hifi +// +// Created by Stephen Birarda on 7/1/13. +// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. +// + +#ifndef __hifi__Operative__ +#define __hifi__Operative__ + +#include + +class Operative { +public: + void run(); +}; + +#endif /* defined(__hifi__Operative__) */ From 6a253f78d15f115ab595e92e75e96ca8dedbc28e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 8 Jul 2013 16:39:48 -0700 Subject: [PATCH 07/56] basic version of operative run to loop and fly the bird --- libraries/shared/src/Operative.cpp | 206 ++++++++++++++++++++++++++++- 1 file changed, 205 insertions(+), 1 deletion(-) diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index b1adbecfbe..ad45b1ed94 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -6,10 +6,214 @@ // Copyright (c) 2013 HighFidelity, Inc. All rights reserved. // -#include "AgentList.h" +#include +#include +#include "NodeList.h" + +#include "NodeTypes.h" #include "Operative.h" +#include "PacketHeaders.h" +#include "SharedUtil.h" + +const float BUG_VOXEL_SIZE = 0.0625f / 128; +glm::vec3 bugPosition = glm::vec3(BUG_VOXEL_SIZE * 20.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 20.0); +glm::vec3 bugDirection = glm::vec3(0, 0, 1); +const int VOXELS_PER_BUG = 18; +glm::vec3 bugPathCenter = glm::vec3(BUG_VOXEL_SIZE * 150.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 150.0); +float bugPathRadius = BUG_VOXEL_SIZE * 140.0; +float bugPathTheta = 0.0; +float bugRotation = 0.0; +float bugAngleDelta = 0.2 * (M_PI / 180.0f); +bool moveBugInLine = false; + +unsigned long packetsSent = 0; +unsigned long bytesSent = 0; + +glm::vec3 rotatePoint(glm::vec3 point, float angle) { + // First, create the quaternion based on this angle of rotation + glm::quat q(glm::vec3(0, -angle, 0)); + + // Next, create a rotation matrix from that quaternion + glm::mat4 rotation = glm::mat4_cast(q); + + // Transform the original vectors by the rotation matrix to get the new vectors + glm::vec4 quatPoint(point.x, point.y, point.z, 0); + glm::vec4 newPoint = quatPoint * rotation; + + return glm::vec3(newPoint.x, newPoint.y, newPoint.z); +} + +class BugPart { +public: + glm::vec3 partLocation; + unsigned char partColor[3]; + + BugPart(const glm::vec3& location, unsigned char red, unsigned char green, unsigned char blue ) { + partLocation = location; + partColor[0] = red; + partColor[1] = green; + partColor[2] = blue; + } +}; + +const BugPart bugParts[VOXELS_PER_BUG] = { + + // tail + BugPart(glm::vec3( 0, 0, -3), 51, 51, 153) , + BugPart(glm::vec3( 0, 0, -2), 51, 51, 153) , + BugPart(glm::vec3( 0, 0, -1), 51, 51, 153) , + + // body + BugPart(glm::vec3( 0, 0, 0), 255, 200, 0) , + BugPart(glm::vec3( 0, 0, 1), 255, 200, 0) , + + // head + BugPart(glm::vec3( 0, 0, 2), 200, 0, 0) , + + // eyes + BugPart(glm::vec3( 1, 0, 3), 64, 64, 64) , + BugPart(glm::vec3(-1, 0, 3), 64, 64, 64) , + + // wings + BugPart(glm::vec3( 3, 1, 1), 0, 153, 0) , + BugPart(glm::vec3( 2, 1, 1), 0, 153, 0) , + BugPart(glm::vec3( 1, 0, 1), 0, 153, 0) , + BugPart(glm::vec3(-1, 0, 1), 0, 153, 0) , + BugPart(glm::vec3(-2, 1, 1), 0, 153, 0) , + BugPart(glm::vec3(-3, 1, 1), 0, 153, 0) , + + + BugPart(glm::vec3( 2, -1, 0), 153, 200, 0) , + BugPart(glm::vec3( 1, -1, 0), 153, 200, 0) , + BugPart(glm::vec3(-1, -1, 0), 153, 200, 0) , + BugPart(glm::vec3(-2, -1, 0), 153, 200, 0) , +}; + +static void renderMovingBug() { + VoxelDetail details[VOXELS_PER_BUG]; + unsigned char* bufferOut; + int sizeOut; + + // Generate voxels for where bug used to be + for (int i = 0; i < VOXELS_PER_BUG; i++) { + details[i].s = BUG_VOXEL_SIZE; + + glm::vec3 partAt = bugParts[i].partLocation * BUG_VOXEL_SIZE * (bugDirection.x < 0 ? -1.0f : 1.0f); + glm::vec3 rotatedPartAt = rotatePoint(partAt, bugRotation); + glm::vec3 offsetPartAt = rotatedPartAt + bugPosition; + + details[i].x = offsetPartAt.x; + details[i].y = offsetPartAt.y; + details[i].z = offsetPartAt.z; + + details[i].red = bugParts[i].partColor[0]; + details[i].green = bugParts[i].partColor[1]; + details[i].blue = bugParts[i].partColor[2]; + } + + // send the "erase message" first... + PACKET_HEADER message = PACKET_HEADER_ERASE_VOXEL; + if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&details, bufferOut, sizeOut)){ + + ::packetsSent++; + ::bytesSent += sizeOut; + + printf("sending packet of size=%d\n", sizeOut); + + NodeList::getInstance()->broadcastToNodes(bufferOut, sizeOut, &NODE_TYPE_VOXEL_SERVER, 1); + delete[] bufferOut; + } + + // Move the bug... + if (moveBugInLine) { + bugPosition.x += (bugDirection.x * BUG_VOXEL_SIZE); + bugPosition.y += (bugDirection.y * BUG_VOXEL_SIZE); + bugPosition.z += (bugDirection.z * BUG_VOXEL_SIZE); + + // Check boundaries + if (bugPosition.z > 1.0) { + bugDirection.z = -1; + } + if (bugPosition.z < BUG_VOXEL_SIZE) { + bugDirection.z = 1; + } + } else { + + //printf("bugPathCenter=(%f,%f,%f)\n", bugPathCenter.x, bugPathCenter.y, bugPathCenter.z); + + bugPathTheta += bugAngleDelta; // move slightly + bugRotation -= bugAngleDelta; // rotate slightly + + // If we loop past end of circle, just reset back into normal range + if (bugPathTheta > (360.0f * PI_OVER_180)) { + bugPathTheta = 0; + bugRotation = 0; + } + + float x = bugPathCenter.x + bugPathRadius * cos(bugPathTheta); + float z = bugPathCenter.z + bugPathRadius * sin(bugPathTheta); + float y = bugPathCenter.y; + + bugPosition = glm::vec3(x, y, z); + //printf("bugPathTheta=%f\n", bugPathTheta); + //printf("bugRotation=%f\n", bugRotation); + } + + //printf("bugPosition=(%f,%f,%f)\n", bugPosition.x, bugPosition.y, bugPosition.z); + //printf("bugDirection=(%f,%f,%f)\n", bugDirection.x, bugDirection.y, bugDirection.z); + // would be nice to add some randomness here... + + // Generate voxels for where bug is going to + for (int i = 0; i < VOXELS_PER_BUG; i++) { + details[i].s = BUG_VOXEL_SIZE; + + glm::vec3 partAt = bugParts[i].partLocation * BUG_VOXEL_SIZE * (bugDirection.x < 0 ? -1.0f : 1.0f); + glm::vec3 rotatedPartAt = rotatePoint(partAt, bugRotation); + glm::vec3 offsetPartAt = rotatedPartAt + bugPosition; + + details[i].x = offsetPartAt.x; + details[i].y = offsetPartAt.y; + details[i].z = offsetPartAt.z; + + details[i].red = bugParts[i].partColor[0]; + details[i].green = bugParts[i].partColor[1]; + details[i].blue = bugParts[i].partColor[2]; + } + + // send the "create message" ... + message = PACKET_HEADER_SET_VOXEL_DESTRUCTIVE; + if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&details, bufferOut, sizeOut)){ + + ::packetsSent++; + ::bytesSent += sizeOut; + + printf("sending packet of size=%d\n", sizeOut); + + NodeList::getInstance()->broadcastToNodes(bufferOut, sizeOut, &NODE_TYPE_VOXEL_SERVER, 1); + delete[] bufferOut; + } +} + +const int ACTUAL_FPS = 60; +const double OUR_FPS_IN_MILLISECONDS = 1000.0/ACTUAL_FPS; // determines FPS from our desired FPS +const int ANIMATE_VOXELS_INTERVAL_USECS = OUR_FPS_IN_MILLISECONDS * 1000.0; // converts from milliseconds to usecs void Operative::run() { + timeval lastSendTime; + while (true) { + gettimeofday(&lastSendTime, NULL); + + renderMovingBug(); + + // dynamically sleep until we need to fire off the next set of voxels + long long usecToSleep = ANIMATE_VOXELS_INTERVAL_USECS - (usecTimestampNow() - usecTimestamp(&lastSendTime)); + + if (usecToSleep > 0) { + usleep(usecToSleep); + } else { + std::cout << "Last send took too much time, not sleeping!\n"; + } + } } \ No newline at end of file From b5a47cddc0f7bb4cfb13f3be2446ab809a599db6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 8 Jul 2013 16:48:53 -0700 Subject: [PATCH 08/56] have stubbed Operative check in with DS --- libraries/shared/src/NodeList.h | 4 +++- libraries/shared/src/Operative.cpp | 25 ++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index b1f7acdbb3..f926c0a5d6 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -13,6 +13,7 @@ #include #include "Node.h" +#include "NodeTypes.h" #include "UDPSocket.h" #ifdef _WIN32 @@ -48,7 +49,8 @@ public: NodeListIterator begin() const; NodeListIterator end() const; - char getOwnerType() const { return _ownerType; } + NODE_TYPE getOwnerType() const { return _ownerType; } + void setOwnerType(NODE_TYPE ownerType) { _ownerType = ownerType; } uint16_t getLastNodeID() const { return _lastNodeID; } void increaseNodeID() { ++_lastNodeID; } diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index ad45b1ed94..1ec74c7e86 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -200,13 +200,36 @@ const double OUR_FPS_IN_MILLISECONDS = 1000.0/ACTUAL_FPS; // determines FPS from const int ANIMATE_VOXELS_INTERVAL_USECS = OUR_FPS_IN_MILLISECONDS * 1000.0; // converts from milliseconds to usecs void Operative::run() { - timeval lastSendTime; + timeval lastSendTime = {}; + timeval lastDomainServerCheckIn = {}; + + NodeList* nodeList = NodeList::getInstance(); + + sockaddr nodePublicAddress; + + unsigned char* packetData = new unsigned char[MAX_PACKET_SIZE]; + ssize_t receivedBytes; + + // change the owner type on our NodeList + NodeList::getInstance()->setOwnerType(NODE_TYPE_AGENT); + NodeList::getInstance()->setNodeTypesOfInterest(&NODE_TYPE_VOXEL_SERVER, 1); while (true) { gettimeofday(&lastSendTime, NULL); renderMovingBug(); + // send a check in packet to the domain server if DOMAIN_SERVER_CHECK_IN_USECS has elapsed + if (usecTimestampNow() - usecTimestamp(&lastDomainServerCheckIn) >= DOMAIN_SERVER_CHECK_IN_USECS) { + gettimeofday(&lastDomainServerCheckIn, NULL); + NodeList::getInstance()->sendDomainServerCheckIn(); + } + + // Nodes sending messages to us... + if (nodeList->getNodeSocket()->receive(&nodePublicAddress, packetData, &receivedBytes)) { + NodeList::getInstance()->processNodeData(&nodePublicAddress, packetData, receivedBytes); + } + // dynamically sleep until we need to fire off the next set of voxels long long usecToSleep = ANIMATE_VOXELS_INTERVAL_USECS - (usecTimestampNow() - usecTimestamp(&lastSendTime)); From 4c27f08f1deda3d0797c3b69d287d9bba25a51d0 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 8 Jul 2013 16:53:20 -0700 Subject: [PATCH 09/56] don't specify git as source for local change testing --- hifi.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hifi.podspec b/hifi.podspec index 42ac7ac1aa..9fd6695f8e 100644 --- a/hifi.podspec +++ b/hifi.podspec @@ -22,7 +22,7 @@ Pod::Spec.new do |s| # Specify the location from where the source should be retrieved. # - s.source = { :git => "https://github.com/worklist/hifi.git" } + # s.source = { :git => "https://github.com/worklist/hifi.git" } s.platform = :ios s.ios.deployment_target = "6.0" From 32b2c231e59b9351e5095ba6201061382c977fcf Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 8 Jul 2013 17:05:32 -0700 Subject: [PATCH 10/56] add a node type for assignees --- libraries/shared/src/Node.cpp | 3 +++ libraries/shared/src/NodeTypes.h | 1 + 2 files changed, 4 insertions(+) diff --git a/libraries/shared/src/Node.cpp b/libraries/shared/src/Node.cpp index 3fddc71ad1..16687cc9f2 100644 --- a/libraries/shared/src/Node.cpp +++ b/libraries/shared/src/Node.cpp @@ -70,6 +70,7 @@ const char* NODE_TYPE_NAME_AUDIO_MIXER = "Audio Mixer"; const char* NODE_TYPE_NAME_AVATAR_MIXER = "Avatar Mixer"; const char* NODE_TYPE_NAME_AUDIO_INJECTOR = "Audio Injector"; const char* NODE_TYPE_NAME_ANIMATION_SERVER = "Animation Server"; +const char* NODE_TYPE_NAME_ASSIGNEE = "Assignee"; const char* NODE_TYPE_NAME_UNKNOWN = "Unknown"; const char* Node::getTypeName() const { @@ -88,6 +89,8 @@ const char* Node::getTypeName() const { return NODE_TYPE_NAME_AUDIO_INJECTOR; case NODE_TYPE_ANIMATION_SERVER: return NODE_TYPE_NAME_ANIMATION_SERVER; + case NODE_TYPE_ASSIGNEE: + return NODE_TYPE_NAME_ASSIGNEE; default: return NODE_TYPE_NAME_UNKNOWN; } diff --git a/libraries/shared/src/NodeTypes.h b/libraries/shared/src/NodeTypes.h index aa4ae51ec5..e9b8b0b8d8 100644 --- a/libraries/shared/src/NodeTypes.h +++ b/libraries/shared/src/NodeTypes.h @@ -24,5 +24,6 @@ const NODE_TYPE NODE_TYPE_AUDIO_MIXER = 'M'; const NODE_TYPE NODE_TYPE_AVATAR_MIXER = 'W'; const NODE_TYPE NODE_TYPE_AUDIO_INJECTOR = 'A'; const NODE_TYPE NODE_TYPE_ANIMATION_SERVER = 'a'; +const NODE_TYPE NODE_TYPE_ASSIGNEE = 1; #endif From ddc684be498366380b0b378c0461c8205e4256ec Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 8 Jul 2013 17:14:39 -0700 Subject: [PATCH 11/56] put back sendAssignmentRequest method removed in merge --- libraries/shared/src/NodeList.cpp | 10 ++++++++++ libraries/shared/src/NodeList.h | 3 +++ 2 files changed, 13 insertions(+) diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 832c81cd24..5e69c44031 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -299,6 +299,16 @@ int NodeList::processDomainServerList(unsigned char *packetData, size_t dataByte return readNodes; } +void NodeList::sendAssignmentRequest() { + const char ASSIGNMENT_SERVER_HOSTNAME[] = "assignment.highfidelity.io"; + const unsigned short ASSIGNMENT_SERVER_PORT = 7007; + + static sockaddr_in assignmentServerSocket = socketForHostname(ASSIGNMENT_SERVER_HOSTNAME); + assignmentServerSocket.sin_port = htons(ASSIGNMENT_SERVER_PORT); + + _nodeSocket.send((sockaddr*) &assignmentServerSocket, &PACKET_HEADER_REQUEST_ASSIGNMENT, 1); +} + Node* NodeList::addOrUpdateNode(sockaddr* publicSocket, sockaddr* localSocket, char nodeType, uint16_t nodeId) { NodeList::iterator node = end(); diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index f926c0a5d6..d65e88330e 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -71,9 +71,12 @@ public: void unlock() { pthread_mutex_unlock(&mutex); } void setNodeTypesOfInterest(const char* nodeTypesOfInterest, int numNodeTypesOfInterest); + void sendDomainServerCheckIn(); int processDomainServerList(unsigned char *packetData, size_t dataBytes); + void sendAssignmentRequest(); + Node* nodeWithAddress(sockaddr *senderAddress); Node* nodeWithID(uint16_t nodeID); From 26a2b4672b04db4cf26dcabc153ad9361bc1f170 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 8 Jul 2013 17:21:39 -0700 Subject: [PATCH 12/56] change NODE_TYPE_ASSIGNEE to NODE_TYPE_UNASSIGNED --- libraries/shared/src/Node.cpp | 6 +++--- libraries/shared/src/NodeTypes.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/shared/src/Node.cpp b/libraries/shared/src/Node.cpp index 16687cc9f2..d8c0a88ede 100644 --- a/libraries/shared/src/Node.cpp +++ b/libraries/shared/src/Node.cpp @@ -70,7 +70,7 @@ const char* NODE_TYPE_NAME_AUDIO_MIXER = "Audio Mixer"; const char* NODE_TYPE_NAME_AVATAR_MIXER = "Avatar Mixer"; const char* NODE_TYPE_NAME_AUDIO_INJECTOR = "Audio Injector"; const char* NODE_TYPE_NAME_ANIMATION_SERVER = "Animation Server"; -const char* NODE_TYPE_NAME_ASSIGNEE = "Assignee"; +const char* NODE_TYPE_NAME_UNASSIGNED = "Unassigned"; const char* NODE_TYPE_NAME_UNKNOWN = "Unknown"; const char* Node::getTypeName() const { @@ -89,8 +89,8 @@ const char* Node::getTypeName() const { return NODE_TYPE_NAME_AUDIO_INJECTOR; case NODE_TYPE_ANIMATION_SERVER: return NODE_TYPE_NAME_ANIMATION_SERVER; - case NODE_TYPE_ASSIGNEE: - return NODE_TYPE_NAME_ASSIGNEE; + case NODE_TYPE_UNASSIGNED: + return NODE_TYPE_NAME_UNASSIGNED; default: return NODE_TYPE_NAME_UNKNOWN; } diff --git a/libraries/shared/src/NodeTypes.h b/libraries/shared/src/NodeTypes.h index e9b8b0b8d8..a9deebf333 100644 --- a/libraries/shared/src/NodeTypes.h +++ b/libraries/shared/src/NodeTypes.h @@ -24,6 +24,6 @@ const NODE_TYPE NODE_TYPE_AUDIO_MIXER = 'M'; const NODE_TYPE NODE_TYPE_AVATAR_MIXER = 'W'; const NODE_TYPE NODE_TYPE_AUDIO_INJECTOR = 'A'; const NODE_TYPE NODE_TYPE_ANIMATION_SERVER = 'a'; -const NODE_TYPE NODE_TYPE_ASSIGNEE = 1; +const NODE_TYPE NODE_TYPE_UNASSIGNED = 1; #endif From 7fa30523084841fa7244e42acaa88eb708f6a263 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 8 Jul 2013 17:48:46 -0700 Subject: [PATCH 13/56] remove double glm includes --- libraries/audio/src/AudioInjector.h | 1 - libraries/shared/src/Operative.cpp | 5 ++--- libraries/shared/src/Operative.h | 2 -- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index 29ff920317..822df026aa 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -9,7 +9,6 @@ #ifndef __hifi__AudioInjector__ #define __hifi__AudioInjector__ -#include #include #include diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index 1ec74c7e86..0212ca2792 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -6,16 +6,15 @@ // Copyright (c) 2013 HighFidelity, Inc. All rights reserved. // -#include #include #include "NodeList.h" - #include "NodeTypes.h" -#include "Operative.h" #include "PacketHeaders.h" #include "SharedUtil.h" +#include "Operative.h" + const float BUG_VOXEL_SIZE = 0.0625f / 128; glm::vec3 bugPosition = glm::vec3(BUG_VOXEL_SIZE * 20.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 20.0); glm::vec3 bugDirection = glm::vec3(0, 0, 1); diff --git a/libraries/shared/src/Operative.h b/libraries/shared/src/Operative.h index a77cc5d62b..a9dbf8bf94 100644 --- a/libraries/shared/src/Operative.h +++ b/libraries/shared/src/Operative.h @@ -9,8 +9,6 @@ #ifndef __hifi__Operative__ #define __hifi__Operative__ -#include - class Operative { public: void run(); From 3cee9b1ab5e644be5a9f51754461fe9cf1f7861e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 8 Jul 2013 17:59:27 -0700 Subject: [PATCH 14/56] remove redundant UDPSocket include --- libraries/audio/src/AudioInjector.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 16c381a036..e29937b3df 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -9,9 +9,8 @@ #include #include -#include #include -#include +#include #include "AudioInjector.h" From e7c6c19e60e367a3104bfb6bb84264419e91513a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 9 Jul 2013 10:36:50 -0700 Subject: [PATCH 15/56] uncomment the source line in podspec for testing against github --- hifi.podspec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hifi.podspec b/hifi.podspec index 9fd6695f8e..b2451b6201 100644 --- a/hifi.podspec +++ b/hifi.podspec @@ -22,7 +22,7 @@ Pod::Spec.new do |s| # Specify the location from where the source should be retrieved. # - # s.source = { :git => "https://github.com/worklist/hifi.git" } + s.source = { :git => "https://github.com/birarda/hifi.git" } s.platform = :ios s.ios.deployment_target = "6.0" @@ -38,6 +38,7 @@ Pod::Spec.new do |s| sp.source_files = "libraries/shared/src" sp.public_header_files = "librares/shared/src" sp.exclude_files = "libraries/shared/src/UrlReader.*" + sp.dependency 'glm' end s.subspec "audio" do |sp| From 68357ab6f79334eab612c2e102c5e0b2ad5efd2e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 9 Jul 2013 11:57:54 -0700 Subject: [PATCH 16/56] include correct quaternion header for AudioInjector and Operative --- libraries/audio/src/AudioInjector.h | 2 +- libraries/shared/src/Operative.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index 822df026aa..392bd0df90 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -9,7 +9,7 @@ #ifndef __hifi__AudioInjector__ #define __hifi__AudioInjector__ -#include +#include #include #include diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index 0212ca2792..c84093f5e9 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -6,7 +6,7 @@ // Copyright (c) 2013 HighFidelity, Inc. All rights reserved. // -#include +#include #include "NodeList.h" #include "NodeTypes.h" From 9304d9060ff487bee7401404b781c20525f20cea Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 9 Jul 2013 12:03:16 -0700 Subject: [PATCH 17/56] include glm in shared target for dummy Operative code --- libraries/shared/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libraries/shared/CMakeLists.txt b/libraries/shared/CMakeLists.txt index 23f198f730..2b4164841e 100644 --- a/libraries/shared/CMakeLists.txt +++ b/libraries/shared/CMakeLists.txt @@ -3,6 +3,9 @@ cmake_minimum_required(VERSION 2.8) set(TARGET_NAME shared) project(${TARGET_NAME}) +# setup for find modules +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/modules/") + # grab the implemenation and header files file(GLOB HIFI_SHARED_SRCS src/*.h src/*.cpp) @@ -27,3 +30,6 @@ if (UNIX AND NOT APPLE) target_link_libraries(${TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT}) endif (UNIX AND NOT APPLE) +# include GLM +include(${MACRO_DIR}/IncludeGLM.cmake) +include_glm(${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file From ccd65ecd67a801b9187d94d52457d15d82a7f2b2 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 9 Jul 2013 12:05:23 -0700 Subject: [PATCH 18/56] tell shared where the macro dir is --- libraries/shared/CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/shared/CMakeLists.txt b/libraries/shared/CMakeLists.txt index 2b4164841e..7f84d8036c 100644 --- a/libraries/shared/CMakeLists.txt +++ b/libraries/shared/CMakeLists.txt @@ -1,11 +1,14 @@ cmake_minimum_required(VERSION 2.8) -set(TARGET_NAME shared) -project(${TARGET_NAME}) +set(ROOT_DIR ../..) +set(MACRO_DIR ${ROOT_DIR}/cmake/macros) # setup for find modules set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/modules/") +set(TARGET_NAME shared) +project(${TARGET_NAME}) + # grab the implemenation and header files file(GLOB HIFI_SHARED_SRCS src/*.h src/*.cpp) From 4e9bac4617cda29541d9e91d0ea77c6d925ecc64 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 9 Jul 2013 16:55:58 -0700 Subject: [PATCH 19/56] change usec timestamp returns to unsigned long long for 32 bit --- libraries/shared/src/SharedUtil.cpp | 4 ++-- libraries/shared/src/SharedUtil.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/shared/src/SharedUtil.cpp b/libraries/shared/src/SharedUtil.cpp index bdc35ff3f5..80b2270205 100644 --- a/libraries/shared/src/SharedUtil.cpp +++ b/libraries/shared/src/SharedUtil.cpp @@ -22,11 +22,11 @@ #include #endif -long long usecTimestamp(timeval *time) { +unsigned long long usecTimestamp(timeval *time) { return (time->tv_sec * 1000000 + time->tv_usec); } -long long usecTimestampNow() { +unsigned long long usecTimestampNow() { timeval now; gettimeofday(&now, NULL); return (now.tv_sec * 1000000 + now.tv_usec); diff --git a/libraries/shared/src/SharedUtil.h b/libraries/shared/src/SharedUtil.h index 2c9e1e6317..ced8c3624a 100644 --- a/libraries/shared/src/SharedUtil.h +++ b/libraries/shared/src/SharedUtil.h @@ -36,8 +36,8 @@ static const float DECIMETER = 0.1f; static const float CENTIMETER = 0.01f; static const float MILLIIMETER = 0.001f; -long long usecTimestamp(timeval *time); -long long usecTimestampNow(); +unsigned long long usecTimestamp(timeval *time); +unsigned long long usecTimestampNow(); float randFloat(); int randIntInRange (int min, int max); From 4773e70c152f9fbcabae2c9a4471d6a770bfe336 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 9 Jul 2013 17:13:21 -0700 Subject: [PATCH 20/56] rewrite Operative stubbed code to be able to be killed --- interface/src/Application.cpp | 0 libraries/shared/src/Operative.cpp | 24 +++++++++++++++++------- libraries/shared/src/Operative.h | 1 + 3 files changed, 18 insertions(+), 7 deletions(-) mode change 100755 => 100644 interface/src/Application.cpp diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp old mode 100755 new mode 100644 diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index c84093f5e9..6440e0eb8e 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -89,7 +89,7 @@ const BugPart bugParts[VOXELS_PER_BUG] = { BugPart(glm::vec3(-2, -1, 0), 153, 200, 0) , }; -static void renderMovingBug() { +void removeOldBug() { VoxelDetail details[VOXELS_PER_BUG]; unsigned char* bufferOut; int sizeOut; @@ -118,11 +118,17 @@ static void renderMovingBug() { ::packetsSent++; ::bytesSent += sizeOut; - printf("sending packet of size=%d\n", sizeOut); - NodeList::getInstance()->broadcastToNodes(bufferOut, sizeOut, &NODE_TYPE_VOXEL_SERVER, 1); delete[] bufferOut; } +} + +static void renderMovingBug() { + VoxelDetail details[VOXELS_PER_BUG]; + unsigned char* bufferOut; + int sizeOut; + + removeOldBug(); // Move the bug... if (moveBugInLine) { @@ -181,14 +187,12 @@ static void renderMovingBug() { } // send the "create message" ... - message = PACKET_HEADER_SET_VOXEL_DESTRUCTIVE; + PACKET_HEADER message = PACKET_HEADER_SET_VOXEL_DESTRUCTIVE; if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&details, bufferOut, sizeOut)){ ::packetsSent++; ::bytesSent += sizeOut; - printf("sending packet of size=%d\n", sizeOut); - NodeList::getInstance()->broadcastToNodes(bufferOut, sizeOut, &NODE_TYPE_VOXEL_SERVER, 1); delete[] bufferOut; } @@ -212,8 +216,9 @@ void Operative::run() { // change the owner type on our NodeList NodeList::getInstance()->setOwnerType(NODE_TYPE_AGENT); NodeList::getInstance()->setNodeTypesOfInterest(&NODE_TYPE_VOXEL_SERVER, 1); + NodeList::getInstance()->getNodeSocket()->setBlocking(false); - while (true) { + while (!shouldStop) { gettimeofday(&lastSendTime, NULL); renderMovingBug(); @@ -238,4 +243,9 @@ void Operative::run() { std::cout << "Last send took too much time, not sleeping!\n"; } } + + printf("Removing the old bird and dying.\n"); + + // we've been told to stop, remove the last bug + removeOldBug(); } \ No newline at end of file diff --git a/libraries/shared/src/Operative.h b/libraries/shared/src/Operative.h index a9dbf8bf94..3b0c3fd270 100644 --- a/libraries/shared/src/Operative.h +++ b/libraries/shared/src/Operative.h @@ -11,6 +11,7 @@ class Operative { public: + bool volatile shouldStop; void run(); }; From 8ed518c4a22f745b98856c8dfd39ad7d9a09ecd3 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 10 Jul 2013 10:51:21 -0700 Subject: [PATCH 21/56] add a clear method to the NodeList to delete all nodes --- libraries/shared/src/NodeList.cpp | 16 ++++++++++++++++ libraries/shared/src/NodeList.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 5e69c44031..26fb38fcd3 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -70,6 +70,9 @@ NodeList::NodeList(char newOwnerType, unsigned int newSocketListenPort) : NodeList::~NodeList() { delete _nodeTypesOfInterest; + // delete the nodes in our list + clear(); + // stop the spawned threads, if they were started stopSilentNodeRemovalThread(); stopPingUnknownNodesThread(); @@ -203,6 +206,19 @@ int NodeList::getNumAliveNodes() const { return numAliveNodes; } +void NodeList::clear() { + // delete all of the nodes in the list, set the pointers back to NULL and the number of nodes to 0 + for (int i = 0; i < _numNodes; i++) { + Node** nodeBucket = _nodeBuckets[i / NODES_PER_BUCKET]; + Node* node = nodeBucket[i % NODES_PER_BUCKET]; + + delete node; + node = NULL; + } + + _numNodes = 0; +} + void NodeList::setNodeTypesOfInterest(const char* nodeTypesOfInterest, int numNodeTypesOfInterest) { delete _nodeTypesOfInterest; diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index d65e88330e..0cadc76f18 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -67,6 +67,8 @@ public: int size() { return _numNodes; } int getNumAliveNodes() const; + void clear(); + void lock() { pthread_mutex_lock(&mutex); } void unlock() { pthread_mutex_unlock(&mutex); } From 0d5fc6a2a44123424fead226a5c8bc08c3aa74bd Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 10 Jul 2013 11:24:05 -0700 Subject: [PATCH 22/56] make operative variables non-globals for start/stop of assignment --- libraries/shared/src/Operative.cpp | 105 ++++++++++++++--------------- libraries/shared/src/Operative.h | 21 ++++++ 2 files changed, 71 insertions(+), 55 deletions(-) diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index 6440e0eb8e..5ca18a15b6 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -6,8 +6,6 @@ // Copyright (c) 2013 HighFidelity, Inc. All rights reserved. // -#include - #include "NodeList.h" #include "NodeTypes.h" #include "PacketHeaders.h" @@ -16,18 +14,7 @@ #include "Operative.h" const float BUG_VOXEL_SIZE = 0.0625f / 128; -glm::vec3 bugPosition = glm::vec3(BUG_VOXEL_SIZE * 20.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 20.0); -glm::vec3 bugDirection = glm::vec3(0, 0, 1); const int VOXELS_PER_BUG = 18; -glm::vec3 bugPathCenter = glm::vec3(BUG_VOXEL_SIZE * 150.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 150.0); -float bugPathRadius = BUG_VOXEL_SIZE * 140.0; -float bugPathTheta = 0.0; -float bugRotation = 0.0; -float bugAngleDelta = 0.2 * (M_PI / 180.0f); -bool moveBugInLine = false; - -unsigned long packetsSent = 0; -unsigned long bytesSent = 0; glm::vec3 rotatePoint(glm::vec3 point, float angle) { // First, create the quaternion based on this angle of rotation @@ -43,6 +30,20 @@ glm::vec3 rotatePoint(glm::vec3 point, float angle) { return glm::vec3(newPoint.x, newPoint.y, newPoint.z); } +Operative::Operative() : + _bugPosition(BUG_VOXEL_SIZE * 20.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 20.0), + _bugDirection(0, 0, 1), + _bugPathCenter(BUG_VOXEL_SIZE * 150.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 150.0), + _bugPathRadius(BUG_VOXEL_SIZE * 140.0), + _bugPathTheta(0.0f), + _bugRotation(0.0f), + _bugAngleDelta(0.2 * (M_PI / 180.0f)), + _moveBugInLine(false), + _packetsSent(0), + _bytesSent(0) +{ +} + class BugPart { public: glm::vec3 partLocation; @@ -56,7 +57,7 @@ public: } }; -const BugPart bugParts[VOXELS_PER_BUG] = { +const BugPart BUG_PARTS[VOXELS_PER_BUG] = { // tail BugPart(glm::vec3( 0, 0, -3), 51, 51, 153) , @@ -89,7 +90,7 @@ const BugPart bugParts[VOXELS_PER_BUG] = { BugPart(glm::vec3(-2, -1, 0), 153, 200, 0) , }; -void removeOldBug() { +void Operative::removeOldBug() { VoxelDetail details[VOXELS_PER_BUG]; unsigned char* bufferOut; int sizeOut; @@ -98,32 +99,32 @@ void removeOldBug() { for (int i = 0; i < VOXELS_PER_BUG; i++) { details[i].s = BUG_VOXEL_SIZE; - glm::vec3 partAt = bugParts[i].partLocation * BUG_VOXEL_SIZE * (bugDirection.x < 0 ? -1.0f : 1.0f); - glm::vec3 rotatedPartAt = rotatePoint(partAt, bugRotation); - glm::vec3 offsetPartAt = rotatedPartAt + bugPosition; + glm::vec3 partAt = BUG_PARTS[i].partLocation * BUG_VOXEL_SIZE * (_bugDirection.x < 0 ? -1.0f : 1.0f); + glm::vec3 rotatedPartAt = rotatePoint(partAt, _bugRotation); + glm::vec3 offsetPartAt = rotatedPartAt + _bugPosition; details[i].x = offsetPartAt.x; details[i].y = offsetPartAt.y; details[i].z = offsetPartAt.z; - details[i].red = bugParts[i].partColor[0]; - details[i].green = bugParts[i].partColor[1]; - details[i].blue = bugParts[i].partColor[2]; + details[i].red = BUG_PARTS[i].partColor[0]; + details[i].green = BUG_PARTS[i].partColor[1]; + details[i].blue = BUG_PARTS[i].partColor[2]; } // send the "erase message" first... PACKET_HEADER message = PACKET_HEADER_ERASE_VOXEL; if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&details, bufferOut, sizeOut)){ - ::packetsSent++; - ::bytesSent += sizeOut; + _packetsSent++; + _bytesSent += sizeOut; NodeList::getInstance()->broadcastToNodes(bufferOut, sizeOut, &NODE_TYPE_VOXEL_SERVER, 1); delete[] bufferOut; } } -static void renderMovingBug() { +void Operative::renderMovingBug() { VoxelDetail details[VOXELS_PER_BUG]; unsigned char* bufferOut; int sizeOut; @@ -131,67 +132,61 @@ static void renderMovingBug() { removeOldBug(); // Move the bug... - if (moveBugInLine) { - bugPosition.x += (bugDirection.x * BUG_VOXEL_SIZE); - bugPosition.y += (bugDirection.y * BUG_VOXEL_SIZE); - bugPosition.z += (bugDirection.z * BUG_VOXEL_SIZE); + if (_moveBugInLine) { + _bugPosition.x += (_bugDirection.x * BUG_VOXEL_SIZE); + _bugPosition.y += (_bugDirection.y * BUG_VOXEL_SIZE); + _bugPosition.z += (_bugDirection.z * BUG_VOXEL_SIZE); // Check boundaries - if (bugPosition.z > 1.0) { - bugDirection.z = -1; + if (_bugPosition.z > 1.0) { + _bugDirection.z = -1; } - if (bugPosition.z < BUG_VOXEL_SIZE) { - bugDirection.z = 1; + if (_bugPosition.z < BUG_VOXEL_SIZE) { + _bugDirection.z = 1; } } else { - //printf("bugPathCenter=(%f,%f,%f)\n", bugPathCenter.x, bugPathCenter.y, bugPathCenter.z); - - bugPathTheta += bugAngleDelta; // move slightly - bugRotation -= bugAngleDelta; // rotate slightly + _bugPathTheta += _bugAngleDelta; // move slightly + _bugRotation -= _bugAngleDelta; // rotate slightly // If we loop past end of circle, just reset back into normal range - if (bugPathTheta > (360.0f * PI_OVER_180)) { - bugPathTheta = 0; - bugRotation = 0; + if (_bugPathTheta > (360.0f * PI_OVER_180)) { + _bugPathTheta = 0; + _bugRotation = 0; } - float x = bugPathCenter.x + bugPathRadius * cos(bugPathTheta); - float z = bugPathCenter.z + bugPathRadius * sin(bugPathTheta); - float y = bugPathCenter.y; + float x = _bugPathCenter.x + _bugPathRadius * cos(_bugPathTheta); + float z = _bugPathCenter.z + _bugPathRadius * sin(_bugPathTheta); + float y = _bugPathCenter.y; - bugPosition = glm::vec3(x, y, z); - //printf("bugPathTheta=%f\n", bugPathTheta); - //printf("bugRotation=%f\n", bugRotation); + _bugPosition = glm::vec3(x, y, z); } - //printf("bugPosition=(%f,%f,%f)\n", bugPosition.x, bugPosition.y, bugPosition.z); - //printf("bugDirection=(%f,%f,%f)\n", bugDirection.x, bugDirection.y, bugDirection.z); // would be nice to add some randomness here... // Generate voxels for where bug is going to for (int i = 0; i < VOXELS_PER_BUG; i++) { details[i].s = BUG_VOXEL_SIZE; - glm::vec3 partAt = bugParts[i].partLocation * BUG_VOXEL_SIZE * (bugDirection.x < 0 ? -1.0f : 1.0f); - glm::vec3 rotatedPartAt = rotatePoint(partAt, bugRotation); - glm::vec3 offsetPartAt = rotatedPartAt + bugPosition; + glm::vec3 partAt = BUG_PARTS[i].partLocation * BUG_VOXEL_SIZE * (_bugDirection.x < 0 ? -1.0f : 1.0f); + glm::vec3 rotatedPartAt = rotatePoint(partAt, _bugRotation); + glm::vec3 offsetPartAt = rotatedPartAt + _bugPosition; details[i].x = offsetPartAt.x; details[i].y = offsetPartAt.y; details[i].z = offsetPartAt.z; - details[i].red = bugParts[i].partColor[0]; - details[i].green = bugParts[i].partColor[1]; - details[i].blue = bugParts[i].partColor[2]; + details[i].red = BUG_PARTS[i].partColor[0]; + details[i].green = BUG_PARTS[i].partColor[1]; + details[i].blue = BUG_PARTS[i].partColor[2]; } // send the "create message" ... PACKET_HEADER message = PACKET_HEADER_SET_VOXEL_DESTRUCTIVE; if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&details, bufferOut, sizeOut)){ - ::packetsSent++; - ::bytesSent += sizeOut; + _packetsSent++; + _bytesSent += sizeOut; NodeList::getInstance()->broadcastToNodes(bufferOut, sizeOut, &NODE_TYPE_VOXEL_SERVER, 1); delete[] bufferOut; diff --git a/libraries/shared/src/Operative.h b/libraries/shared/src/Operative.h index 3b0c3fd270..edaed6dd44 100644 --- a/libraries/shared/src/Operative.h +++ b/libraries/shared/src/Operative.h @@ -9,10 +9,31 @@ #ifndef __hifi__Operative__ #define __hifi__Operative__ +#include +#include + class Operative { public: + Operative(); + bool volatile shouldStop; void run(); +private: + void renderMovingBug(); + void removeOldBug(); + + glm::vec3 _bugPosition; + glm::vec3 _bugDirection; + glm::vec3 _bugPathCenter; + + float _bugPathRadius; + float _bugPathTheta; + float _bugRotation; + float _bugAngleDelta; + bool _moveBugInLine; + + unsigned long _packetsSent; + unsigned long _bytesSent; }; #endif /* defined(__hifi__Operative__) */ From 4ebc381e407cf32a00d00a1673c97f2e57b709d6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 11 Jul 2013 14:43:41 -0700 Subject: [PATCH 23/56] update dummy operative code for change to packet type --- libraries/shared/src/NodeList.cpp | 2 +- libraries/shared/src/Operative.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 52ca7594b1..df7822d6aa 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -335,7 +335,7 @@ void NodeList::sendAssignmentRequest() { static sockaddr_in assignmentServerSocket = socketForHostname(ASSIGNMENT_SERVER_HOSTNAME); assignmentServerSocket.sin_port = htons(ASSIGNMENT_SERVER_PORT); - _nodeSocket.send((sockaddr*) &assignmentServerSocket, &PACKET_HEADER_REQUEST_ASSIGNMENT, 1); + _nodeSocket.send((sockaddr*) &assignmentServerSocket, &PACKET_TYPE_REQUEST_ASSIGNMENT, 1); } Node* NodeList::addOrUpdateNode(sockaddr* publicSocket, sockaddr* localSocket, char nodeType, uint16_t nodeId) { diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index 5ca18a15b6..19cf78c102 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -113,7 +113,7 @@ void Operative::removeOldBug() { } // send the "erase message" first... - PACKET_HEADER message = PACKET_HEADER_ERASE_VOXEL; + PACKET_TYPE message = PACKET_TYPE_ERASE_VOXEL; if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&details, bufferOut, sizeOut)){ _packetsSent++; @@ -182,7 +182,7 @@ void Operative::renderMovingBug() { } // send the "create message" ... - PACKET_HEADER message = PACKET_HEADER_SET_VOXEL_DESTRUCTIVE; + PACKET_TYPE message = PACKET_TYPE_SET_VOXEL_DESTRUCTIVE; if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&details, bufferOut, sizeOut)){ _packetsSent++; @@ -235,7 +235,7 @@ void Operative::run() { if (usecToSleep > 0) { usleep(usecToSleep); } else { - std::cout << "Last send took too much time, not sleeping!\n"; + printf("Last send took too much time, not sleeping!\n"); } } From 9834c10610b77e375ebab09b0ec639d74b550bbc Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 11 Jul 2013 17:47:35 -0700 Subject: [PATCH 24/56] movement to use AudioInjector classes in Operative code --- audio-mixer/CMakeLists.txt | 2 +- audio-mixer/src/main.cpp | 2 +- hifi.podspec | 2 +- interface/CMakeLists.txt | 2 +- .../{audio => shared}/src/AudioInjectionManager.cpp | 2 ++ libraries/{audio => shared}/src/AudioInjectionManager.h | 0 libraries/{audio => shared}/src/AudioInjector.cpp | 9 +++++---- libraries/{audio => shared}/src/AudioInjector.h | 2 +- libraries/{audio => shared}/src/AudioRingBuffer.cpp | 0 libraries/{audio => shared}/src/AudioRingBuffer.h | 0 libraries/shared/src/NodeList.cpp | 2 +- libraries/shared/src/Operative.cpp | 9 ++++++++- libraries/shared/src/Operative.h | 4 ++++ 13 files changed, 25 insertions(+), 11 deletions(-) rename libraries/{audio => shared}/src/AudioInjectionManager.cpp (98%) rename libraries/{audio => shared}/src/AudioInjectionManager.h (100%) rename libraries/{audio => shared}/src/AudioInjector.cpp (96%) rename libraries/{audio => shared}/src/AudioInjector.h (98%) rename libraries/{audio => shared}/src/AudioRingBuffer.cpp (100%) rename libraries/{audio => shared}/src/AudioRingBuffer.h (100%) diff --git a/audio-mixer/CMakeLists.txt b/audio-mixer/CMakeLists.txt index 7e83e6fc1a..79fb29a9c7 100644 --- a/audio-mixer/CMakeLists.txt +++ b/audio-mixer/CMakeLists.txt @@ -18,7 +18,7 @@ include_glm(${TARGET_NAME} ${ROOT_DIR}) # link the shared hifi library include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) -link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) +# link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) # link the stk library set(STK_ROOT_DIR ${ROOT_DIR}/externals/stk) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index b900c48479..df686d82a7 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -374,7 +374,7 @@ int main(int argc, const char* argv[]) { InjectedAudioRingBuffer* ringBuffer = (InjectedAudioRingBuffer*) node->getLinkedData(); if (memcmp(ringBuffer->getStreamIdentifier(), - packetData + 1, + packetData + numBytesForPacketHeader(packetData), STREAM_IDENTIFIER_NUM_BYTES) == 0) { // this is the matching stream, assign to matchingInjector and stop looking matchingInjector = &*node; diff --git a/hifi.podspec b/hifi.podspec index b2451b6201..94468bc3e7 100644 --- a/hifi.podspec +++ b/hifi.podspec @@ -39,12 +39,12 @@ Pod::Spec.new do |s| sp.public_header_files = "librares/shared/src" sp.exclude_files = "libraries/shared/src/UrlReader.*" sp.dependency 'glm' + sp.xcconfig = { 'CLANG_CXX_LIBRARY' => "libc++" } end s.subspec "audio" do |sp| sp.source_files = "libraries/audio/src" sp.public_header_files = "libraries/audio/src" - sp.xcconfig = { 'CLANG_CXX_LIBRARY' => "libc++" } sp.dependency 'glm' end diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 829ccbff06..8a0f5ac421 100755 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -87,7 +87,7 @@ include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) link_hifi_library(voxels ${TARGET_NAME} ${ROOT_DIR}) link_hifi_library(avatars ${TARGET_NAME} ${ROOT_DIR}) -link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) +# link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) # find required libraries find_package(GLM REQUIRED) diff --git a/libraries/audio/src/AudioInjectionManager.cpp b/libraries/shared/src/AudioInjectionManager.cpp similarity index 98% rename from libraries/audio/src/AudioInjectionManager.cpp rename to libraries/shared/src/AudioInjectionManager.cpp index 65cbade423..79de62e747 100644 --- a/libraries/audio/src/AudioInjectionManager.cpp +++ b/libraries/shared/src/AudioInjectionManager.cpp @@ -61,6 +61,8 @@ void* AudioInjectionManager::injectAudioViaThread(void* args) { Node* audioMixer = NodeList::getInstance()->soloNodeOfType(NODE_TYPE_AUDIO_MIXER); if (audioMixer) { _destinationSocket = *audioMixer->getActiveSocket(); + } else { + pthread_exit(0); } } diff --git a/libraries/audio/src/AudioInjectionManager.h b/libraries/shared/src/AudioInjectionManager.h similarity index 100% rename from libraries/audio/src/AudioInjectionManager.h rename to libraries/shared/src/AudioInjectionManager.h diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp similarity index 96% rename from libraries/audio/src/AudioInjector.cpp rename to libraries/shared/src/AudioInjector.cpp index 1ad69b7e38..3299437e03 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -9,8 +9,8 @@ #include #include -#include -#include +#include "PacketHeaders.h" +#include "SharedUtil.h" #include "AudioInjector.h" @@ -130,10 +130,11 @@ void AudioInjector::addSample(const int16_t sample) { } } -void AudioInjector::addSamples(int16_t* sampleBuffer, int numSamples) { - if (_audioSampleArray + _indexOfNextSlot + numSamples <= _audioSampleArray + (_numTotalSamples / sizeof(int16_t))) { +void AudioInjector::addSamples(int16_t* sampleBuffer, int numSamples) { + if (_audioSampleArray + _indexOfNextSlot + numSamples <= _audioSampleArray + _numTotalSamples) { // only copy the audio from the sample buffer if there's space memcpy(_audioSampleArray + _indexOfNextSlot, sampleBuffer, numSamples * sizeof(int16_t)); + printf("Copied %d samples to the buffer\n", numSamples); _indexOfNextSlot += numSamples; } } diff --git a/libraries/audio/src/AudioInjector.h b/libraries/shared/src/AudioInjector.h similarity index 98% rename from libraries/audio/src/AudioInjector.h rename to libraries/shared/src/AudioInjector.h index b7f137ec73..aa00797c48 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/shared/src/AudioInjector.h @@ -12,7 +12,7 @@ #include #include -#include +#include "UDPSocket.h" #include "AudioRingBuffer.h" diff --git a/libraries/audio/src/AudioRingBuffer.cpp b/libraries/shared/src/AudioRingBuffer.cpp similarity index 100% rename from libraries/audio/src/AudioRingBuffer.cpp rename to libraries/shared/src/AudioRingBuffer.cpp diff --git a/libraries/audio/src/AudioRingBuffer.h b/libraries/shared/src/AudioRingBuffer.h similarity index 100% rename from libraries/audio/src/AudioRingBuffer.h rename to libraries/shared/src/AudioRingBuffer.h diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index df7822d6aa..4a02c37178 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -30,7 +30,7 @@ const char SOLO_NODE_TYPES[3] = { }; char DOMAIN_HOSTNAME[] = "highfidelity.below92.com"; -char DOMAIN_IP[100] = ""; // IP Address will be re-set by lookup on startup +char DOMAIN_IP[100] = "192.168.1.47"; // IP Address will be re-set by lookup on startup const int DOMAINSERVER_PORT = 40102; bool silentNodeThreadStopFlag = false; diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index 19cf78c102..7c67399bdc 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -6,6 +6,8 @@ // Copyright (c) 2013 HighFidelity, Inc. All rights reserved. // +#include "AudioInjectionManager.h" + #include "NodeList.h" #include "NodeTypes.h" #include "PacketHeaders.h" @@ -210,7 +212,8 @@ void Operative::run() { // change the owner type on our NodeList NodeList::getInstance()->setOwnerType(NODE_TYPE_AGENT); - NodeList::getInstance()->setNodeTypesOfInterest(&NODE_TYPE_VOXEL_SERVER, 1); + const char NODE_TYPES_OF_INTEREST[] = {NODE_TYPE_VOXEL_SERVER, NODE_TYPE_AUDIO_MIXER}; + NodeList::getInstance()->setNodeTypesOfInterest(NODE_TYPES_OF_INTEREST, 2); NodeList::getInstance()->getNodeSocket()->setBlocking(false); while (!shouldStop) { @@ -218,6 +221,10 @@ void Operative::run() { renderMovingBug(); + if (!injector->isInjectingAudio()) { + AudioInjectionManager::threadInjector(injector); + } + // send a check in packet to the domain server if DOMAIN_SERVER_CHECK_IN_USECS has elapsed if (usecTimestampNow() - usecTimestamp(&lastDomainServerCheckIn) >= DOMAIN_SERVER_CHECK_IN_USECS) { gettimeofday(&lastDomainServerCheckIn, NULL); diff --git a/libraries/shared/src/Operative.h b/libraries/shared/src/Operative.h index edaed6dd44..98249aaca6 100644 --- a/libraries/shared/src/Operative.h +++ b/libraries/shared/src/Operative.h @@ -9,6 +9,8 @@ #ifndef __hifi__Operative__ #define __hifi__Operative__ +#import "AudioInjector.h" + #include #include @@ -17,6 +19,8 @@ public: Operative(); bool volatile shouldStop; + AudioInjector* injector; + void run(); private: void renderMovingBug(); From 9a2347c8b17baa35418de53b954670ea74f0b21a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 12 Jul 2013 10:18:29 -0700 Subject: [PATCH 25/56] repair audio receive by correcting number of bytes --- interface/src/Audio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 7a480cff57..7af42478d5 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -448,7 +448,7 @@ void Audio::addReceivedAudioToBuffer(unsigned char* receivedData, int receivedBy //printf("Got audio packet %d\n", _packetsReceivedThisPlayback); - _ringBuffer.parseData((unsigned char*) receivedData, PACKET_LENGTH_BYTES + sizeof(PACKET_TYPE)); + _ringBuffer.parseData((unsigned char*) receivedData, receivedBytes); Application::getInstance()->getBandwidthMeter()->inputStream(BandwidthMeter::AUDIO) .updateValue(PACKET_LENGTH_BYTES + sizeof(PACKET_TYPE)); From 8fb90602ba574e5e5c73b924c4327548b5440845 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 12 Jul 2013 10:33:38 -0700 Subject: [PATCH 26/56] send back rand int from 1 to 6 to specify raw file to grab --- assignment-server/src/main.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index faad21aa6f..6248e4a35c 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -7,10 +7,13 @@ // #include +#include #include +#include #include + const int ASSIGNMENT_SERVER_LISTEN_PORT = 7007; const int MAX_PACKET_SIZE_BYTES = 1400; @@ -22,11 +25,20 @@ int main(int argc, const char* argv[]) { UDPSocket serverSocket(ASSIGNMENT_SERVER_LISTEN_PORT); + int numHeaderBytes = numBytesForPacketHeader((unsigned char*) &PACKET_TYPE_SEND_ASSIGNMENT); + unsigned char assignmentPacket[numHeaderBytes + sizeof(char)]; + populateTypeAndVersion(assignmentPacket, PACKET_TYPE_SEND_ASSIGNMENT); + while (true) { if (serverSocket.receive((sockaddr*) &senderSocket, &senderData, &receivedBytes)) { - if (senderData[0] == PACKET_HEADER_REQUEST_ASSIGNMENT) { + if (senderData[0] == PACKET_TYPE_REQUEST_ASSIGNMENT) { // for now just send back a dummy assignment packet - serverSocket.send((sockaddr*) &senderSocket, &PACKET_HEADER_SEND_ASSIGNMENT, 1); + + // pick a random number between 1 and 6 so the user grabs a random bird sound + assignmentPacket[numHeaderBytes] = randIntInRange(1, 7); + + // send the assignment + serverSocket.send((sockaddr*) &senderSocket, assignmentPacket, sizeof(assignmentPacket)); } } } From c01ff868de1eff7cf33bf6bdde1215a8046ac2e7 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 12 Jul 2013 10:49:28 -0700 Subject: [PATCH 27/56] comment audio library linkage to eve and injector --- eve/CMakeLists.txt | 2 +- injector/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/eve/CMakeLists.txt b/eve/CMakeLists.txt index acca9520ed..d05fa42de7 100644 --- a/eve/CMakeLists.txt +++ b/eve/CMakeLists.txt @@ -18,4 +18,4 @@ include_glm(${TARGET_NAME} ${ROOT_DIR}) include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) link_hifi_library(avatars ${TARGET_NAME} ${ROOT_DIR}) -link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file +# link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file diff --git a/injector/CMakeLists.txt b/injector/CMakeLists.txt index 2c022b0e92..faeabccb5b 100644 --- a/injector/CMakeLists.txt +++ b/injector/CMakeLists.txt @@ -18,5 +18,5 @@ include_glm(${TARGET_NAME} ${ROOT_DIR}) # link the shared hifi library include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) -link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) +# link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) link_hifi_library(avatars ${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file From e1d7f752f215fb562fa94fef9fc79db7db3dfef8 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 12 Jul 2013 14:47:25 -0700 Subject: [PATCH 28/56] send a different bird index to each subsequent assignee --- assignment-server/src/main.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index 6248e4a35c..08e54233b9 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -29,13 +29,20 @@ int main(int argc, const char* argv[]) { unsigned char assignmentPacket[numHeaderBytes + sizeof(char)]; populateTypeAndVersion(assignmentPacket, PACKET_TYPE_SEND_ASSIGNMENT); + int birdIndex = 0; + while (true) { if (serverSocket.receive((sockaddr*) &senderSocket, &senderData, &receivedBytes)) { if (senderData[0] == PACKET_TYPE_REQUEST_ASSIGNMENT) { // for now just send back a dummy assignment packet - // pick a random number between 1 and 6 so the user grabs a random bird sound - assignmentPacket[numHeaderBytes] = randIntInRange(1, 7); + // give this assignee the next bird index + assignmentPacket[numHeaderBytes] = birdIndex++; + + // wrap back to 0 if the bird index is 6 now + if (birdIndex == 6) { + birdIndex = 0; + } // send the assignment serverSocket.send((sockaddr*) &senderSocket, assignmentPacket, sizeof(assignmentPacket)); From 2821112485b20e8308c4a279c720aca3a81467c1 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 12 Jul 2013 14:47:47 -0700 Subject: [PATCH 29/56] randomize bird noise injection --- libraries/shared/src/Operative.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index 7c67399bdc..edee156516 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -36,7 +36,7 @@ Operative::Operative() : _bugPosition(BUG_VOXEL_SIZE * 20.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 20.0), _bugDirection(0, 0, 1), _bugPathCenter(BUG_VOXEL_SIZE * 150.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 150.0), - _bugPathRadius(BUG_VOXEL_SIZE * 140.0), + _bugPathRadius(BUG_VOXEL_SIZE * 40.0), _bugPathTheta(0.0f), _bugRotation(0.0f), _bugAngleDelta(0.2 * (M_PI / 180.0f)), @@ -221,7 +221,7 @@ void Operative::run() { renderMovingBug(); - if (!injector->isInjectingAudio()) { + if (!injector->isInjectingAudio() && randIntInRange(1, 100) == 99) { AudioInjectionManager::threadInjector(injector); } From 8f7379839d12649095d04440c3c4c370f02d55fd Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 12 Jul 2013 14:52:16 -0700 Subject: [PATCH 30/56] set the position of the audio injector to match the current position of the bird --- libraries/shared/src/Operative.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index edee156516..e970f5f153 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -221,6 +221,8 @@ void Operative::run() { renderMovingBug(); + injector->setPosition(_bugPosition); + if (!injector->isInjectingAudio() && randIntInRange(1, 100) == 99) { AudioInjectionManager::threadInjector(injector); } From 0873be94d4f746d75685034b3bfbddaf238296db Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 12 Jul 2013 14:57:36 -0700 Subject: [PATCH 31/56] the first bird index is 1, not 0 --- assignment-server/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index 08e54233b9..2cd127063f 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -29,7 +29,7 @@ int main(int argc, const char* argv[]) { unsigned char assignmentPacket[numHeaderBytes + sizeof(char)]; populateTypeAndVersion(assignmentPacket, PACKET_TYPE_SEND_ASSIGNMENT); - int birdIndex = 0; + int birdIndex = 1; while (true) { if (serverSocket.receive((sockaddr*) &senderSocket, &senderData, &receivedBytes)) { From 33b6ca31b0066a655ccf2e6737b8b215a7becc7d Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 12 Jul 2013 15:10:22 -0700 Subject: [PATCH 32/56] sent correct position for injected audio, first bird index is 1 --- assignment-server/src/main.cpp | 2 +- libraries/shared/src/Operative.cpp | 22 +++++++++++----------- libraries/shared/src/Operative.h | 6 ++++++ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index 2cd127063f..a67db7b6c5 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -41,7 +41,7 @@ int main(int argc, const char* argv[]) { // wrap back to 0 if the bird index is 6 now if (birdIndex == 6) { - birdIndex = 0; + birdIndex = 1; } // send the assignment diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index e970f5f153..01b5120074 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -16,7 +16,6 @@ #include "Operative.h" const float BUG_VOXEL_SIZE = 0.0625f / 128; -const int VOXELS_PER_BUG = 18; glm::vec3 rotatePoint(glm::vec3 point, float angle) { // First, create the quaternion based on this angle of rotation @@ -127,7 +126,6 @@ void Operative::removeOldBug() { } void Operative::renderMovingBug() { - VoxelDetail details[VOXELS_PER_BUG]; unsigned char* bufferOut; int sizeOut; @@ -168,24 +166,24 @@ void Operative::renderMovingBug() { // Generate voxels for where bug is going to for (int i = 0; i < VOXELS_PER_BUG; i++) { - details[i].s = BUG_VOXEL_SIZE; + _bugDetails[i].s = BUG_VOXEL_SIZE; glm::vec3 partAt = BUG_PARTS[i].partLocation * BUG_VOXEL_SIZE * (_bugDirection.x < 0 ? -1.0f : 1.0f); glm::vec3 rotatedPartAt = rotatePoint(partAt, _bugRotation); glm::vec3 offsetPartAt = rotatedPartAt + _bugPosition; - details[i].x = offsetPartAt.x; - details[i].y = offsetPartAt.y; - details[i].z = offsetPartAt.z; + _bugDetails[i].x = offsetPartAt.x; + _bugDetails[i].y = offsetPartAt.y; + _bugDetails[i].z = offsetPartAt.z; - details[i].red = BUG_PARTS[i].partColor[0]; - details[i].green = BUG_PARTS[i].partColor[1]; - details[i].blue = BUG_PARTS[i].partColor[2]; + _bugDetails[i].red = BUG_PARTS[i].partColor[0]; + _bugDetails[i].green = BUG_PARTS[i].partColor[1]; + _bugDetails[i].blue = BUG_PARTS[i].partColor[2]; } // send the "create message" ... PACKET_TYPE message = PACKET_TYPE_SET_VOXEL_DESTRUCTIVE; - if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&details, bufferOut, sizeOut)){ + if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&_bugDetails, bufferOut, sizeOut)){ _packetsSent++; _bytesSent += sizeOut; @@ -221,7 +219,9 @@ void Operative::run() { renderMovingBug(); - injector->setPosition(_bugPosition); + glm::vec3 latestPosition(_bugDetails[5].x, _bugDetails[5].y, _bugDetails[5].z); + latestPosition *= 128; + injector->setPosition(latestPosition); if (!injector->isInjectingAudio() && randIntInRange(1, 100) == 99) { AudioInjectionManager::threadInjector(injector); diff --git a/libraries/shared/src/Operative.h b/libraries/shared/src/Operative.h index 98249aaca6..b3635a16a5 100644 --- a/libraries/shared/src/Operative.h +++ b/libraries/shared/src/Operative.h @@ -14,6 +14,10 @@ #include #include +#include "SharedUtil.h" + +const int VOXELS_PER_BUG = 18; + class Operative { public: Operative(); @@ -26,6 +30,8 @@ private: void renderMovingBug(); void removeOldBug(); + VoxelDetail _bugDetails[VOXELS_PER_BUG]; + glm::vec3 _bugPosition; glm::vec3 _bugDirection; glm::vec3 _bugPathCenter; From 28ce4f55c1f55eeb5eabe7b537a569f14a149696 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 15 Jul 2013 08:56:20 -0700 Subject: [PATCH 33/56] have the audio injector return intensity of last frame --- libraries/shared/src/AudioInjector.cpp | 18 ++++++++++++++++-- libraries/shared/src/AudioInjector.h | 3 +++ libraries/shared/src/Operative.cpp | 8 +++++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp index 3299437e03..5271a8429b 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -20,7 +20,8 @@ AudioInjector::AudioInjector(const char* filename) : _radius(0.0f), _volume(MAX_INJECTOR_VOLUME), _indexOfNextSlot(0), - _isInjectingAudio(false) + _isInjectingAudio(false), + _lastFrameIntensity(0.0f) { loadRandomIdentifier(_streamIdentifier, STREAM_IDENTIFIER_NUM_BYTES); @@ -50,7 +51,8 @@ AudioInjector::AudioInjector(int maxNumSamples) : _radius(0.0f), _volume(MAX_INJECTOR_VOLUME), _indexOfNextSlot(0), - _isInjectingAudio(false) + _isInjectingAudio(false), + _lastFrameIntensity(0.0f) { loadRandomIdentifier(_streamIdentifier, STREAM_IDENTIFIER_NUM_BYTES); @@ -113,6 +115,18 @@ void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destination injectorSocket->send(destinationSocket, dataPacket, sizeof(dataPacket)); + // calculate the intensity for this frame + float lastRMS = 0; + + for (int j = 0; j < BUFFER_LENGTH_SAMPLES_PER_CHANNEL; j++) { + lastRMS += _audioSampleArray[i + j] * _audioSampleArray[i + j]; + } + + lastRMS /= BUFFER_LENGTH_SAMPLES_PER_CHANNEL; + lastRMS = sqrtf(lastRMS); + + _lastFrameIntensity = lastRMS / INT16_MAX; + int usecToSleep = usecTimestamp(&startTime) + (++nextFrame * INJECT_INTERVAL_USECS) - usecTimestampNow(); if (usecToSleep > 0) { usleep(usecToSleep); diff --git a/libraries/shared/src/AudioInjector.h b/libraries/shared/src/AudioInjector.h index aa00797c48..fcd400ccbb 100644 --- a/libraries/shared/src/AudioInjector.h +++ b/libraries/shared/src/AudioInjector.h @@ -35,6 +35,8 @@ public: unsigned char getVolume() const { return _volume; } void setVolume(unsigned char volume) { _volume = volume; } + float getLastFrameIntensity() const { return _lastFrameIntensity; } + const glm::vec3& getPosition() const { return _position; } void setPosition(const glm::vec3& position) { _position = position; } @@ -56,6 +58,7 @@ private: unsigned char _volume; int _indexOfNextSlot; bool _isInjectingAudio; + float _lastFrameIntensity; }; #endif /* defined(__hifi__AudioInjector__) */ diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp index 01b5120074..1e1e6a874c 100644 --- a/libraries/shared/src/Operative.cpp +++ b/libraries/shared/src/Operative.cpp @@ -176,9 +176,11 @@ void Operative::renderMovingBug() { _bugDetails[i].y = offsetPartAt.y; _bugDetails[i].z = offsetPartAt.z; - _bugDetails[i].red = BUG_PARTS[i].partColor[0]; - _bugDetails[i].green = BUG_PARTS[i].partColor[1]; - _bugDetails[i].blue = BUG_PARTS[i].partColor[2]; + float colorRatio = (powf(injector->getLastFrameIntensity(), 0.5) * 0.5f) + 0.5f; + + _bugDetails[i].red = BUG_PARTS[i].partColor[0] * colorRatio; + _bugDetails[i].green = BUG_PARTS[i].partColor[1] * colorRatio; + _bugDetails[i].blue = BUG_PARTS[i].partColor[2] * colorRatio; } // send the "create message" ... From 855bcb3753a2fc5e736129fdafc2cc632129f484 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 15 Jul 2013 11:47:54 -0700 Subject: [PATCH 34/56] revamp assignment server to accept requests from webpage --- assignment-server/src/main.cpp | 43 +++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index a67db7b6c5..3d8b1846a7 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -8,19 +8,25 @@ #include #include +#include #include #include #include - const int ASSIGNMENT_SERVER_LISTEN_PORT = 7007; const int MAX_PACKET_SIZE_BYTES = 1400; +struct Assignment { + char birdIndex; +}; + int main(int argc, const char* argv[]) { + std::queue assignmentQueue; + sockaddr_in senderSocket; - char senderData[MAX_PACKET_SIZE_BYTES] = {}; + unsigned char senderData[MAX_PACKET_SIZE_BYTES] = {}; ssize_t receivedBytes = 0; UDPSocket serverSocket(ASSIGNMENT_SERVER_LISTEN_PORT); @@ -29,23 +35,32 @@ int main(int argc, const char* argv[]) { unsigned char assignmentPacket[numHeaderBytes + sizeof(char)]; populateTypeAndVersion(assignmentPacket, PACKET_TYPE_SEND_ASSIGNMENT); - int birdIndex = 1; - while (true) { if (serverSocket.receive((sockaddr*) &senderSocket, &senderData, &receivedBytes)) { - if (senderData[0] == PACKET_TYPE_REQUEST_ASSIGNMENT) { - // for now just send back a dummy assignment packet - - // give this assignee the next bird index - assignmentPacket[numHeaderBytes] = birdIndex++; - // wrap back to 0 if the bird index is 6 now - if (birdIndex == 6) { - birdIndex = 1; + int numHeaderBytes = numBytesForPacketHeader(senderData); + + if (senderData[0] == PACKET_TYPE_REQUEST_ASSIGNMENT) { + // grab the FI assignment in the queue, if it exists + if (assignmentQueue.size() > 0) { + Assignment firstAssignment = assignmentQueue.front(); + assignmentQueue.pop(); + + printf("Pulled an assignment with index %d\n", firstAssignment.birdIndex); + + assignmentPacket[numHeaderBytes] = firstAssignment.birdIndex; + + // send the assignment + serverSocket.send((sockaddr*) &senderSocket, assignmentPacket, sizeof(assignmentPacket)); } + } else if (senderData[0] == PACKET_TYPE_SEND_ASSIGNMENT) { + Assignment newAssignment; + newAssignment.birdIndex = *(senderData + numHeaderBytes); - // send the assignment - serverSocket.send((sockaddr*) &senderSocket, assignmentPacket, sizeof(assignmentPacket)); + printf("Created an assignment in the queue with %d\n", newAssignment.birdIndex); + + // add this assignment to the queue + assignmentQueue.push(newAssignment); } } } From 3fdbf41011c9cf2286477a6c000359e42f470819 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 15 Jul 2013 11:50:52 -0700 Subject: [PATCH 35/56] use limits instead of INT16_MAX for unix --- libraries/shared/src/AudioInjector.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/shared/src/AudioInjector.cpp index 5271a8429b..327fb1aa82 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/shared/src/AudioInjector.cpp @@ -6,8 +6,9 @@ // Copyright (c) 2012 High Fidelity, Inc. All rights reserved. // -#include #include +#include +#include #include "PacketHeaders.h" #include "SharedUtil.h" @@ -125,7 +126,7 @@ void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destination lastRMS /= BUFFER_LENGTH_SAMPLES_PER_CHANNEL; lastRMS = sqrtf(lastRMS); - _lastFrameIntensity = lastRMS / INT16_MAX; + _lastFrameIntensity = lastRMS / std::numeric_limits::max(); int usecToSleep = usecTimestamp(&startTime) + (++nextFrame * INJECT_INTERVAL_USECS) - usecTimestampNow(); if (usecToSleep > 0) { From cc6bcf1653dd5e690c9b9e0cc65a4a8f3fec7411 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 22 Jul 2013 14:09:06 -0700 Subject: [PATCH 36/56] repair use of setup_hifi_project from assignment server --- assignment-server/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-server/CMakeLists.txt b/assignment-server/CMakeLists.txt index 2df1140547..4768ae24f4 100644 --- a/assignment-server/CMakeLists.txt +++ b/assignment-server/CMakeLists.txt @@ -6,7 +6,7 @@ set(ROOT_DIR ..) set(MACRO_DIR ${ROOT_DIR}/cmake/macros) include(${MACRO_DIR}/SetupHifiProject.cmake) -setup_hifi_project(${TARGET_NAME}) +setup_hifi_project(${TARGET_NAME} FALSE) # link in the shared library include(${MACRO_DIR}/LinkHifiLibrary.cmake) From 7a028aa43d89460254257c226849d454c3e21750 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Jul 2013 20:23:32 -0700 Subject: [PATCH 37/56] cmake changes for update to qt5 --- cmake/macros/SetupHifiLibrary.cmake | 3 ++- cmake/macros/SetupHifiProject.cmake | 2 +- interface/CMakeLists.txt | 4 ++-- interface/external/fervor/CMakeLists.txt | 6 +++--- libraries/avatars/CMakeLists.txt | 4 ++++ libraries/shared/CMakeLists.txt | 4 ++++ 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/cmake/macros/SetupHifiLibrary.cmake b/cmake/macros/SetupHifiLibrary.cmake index b7d0af7499..c6a84e1838 100644 --- a/cmake/macros/SetupHifiLibrary.cmake +++ b/cmake/macros/SetupHifiLibrary.cmake @@ -3,11 +3,12 @@ MACRO(SETUP_HIFI_LIBRARY TARGET) # grab the implemenation and header files file(GLOB LIB_SRCS src/*.h src/*.cpp) + set(LIB_SRCS ${LIB_SRCS} ${WRAPPED_SRCS}) # create a library and set the property so it can be referenced later add_library(${TARGET} ${LIB_SRCS}) - find_package(Qt4 REQUIRED QtCore) + find_package(Qt5 REQUIRED QtCore) include(${QT_USE_FILE}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${QT_QTGUI_INCLUDE_DIR}") diff --git a/cmake/macros/SetupHifiProject.cmake b/cmake/macros/SetupHifiProject.cmake index 8360dc66b6..80ced2ab73 100644 --- a/cmake/macros/SetupHifiProject.cmake +++ b/cmake/macros/SetupHifiProject.cmake @@ -8,7 +8,7 @@ MACRO(SETUP_HIFI_PROJECT TARGET INCLUDE_QT) add_executable(${TARGET} ${TARGET_SRCS}) IF (${INCLUDE_QT}) - find_package(Qt4 REQUIRED QtCore) + find_package(Qt5 REQUIRED QtCore) include(${QT_USE_FILE}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${QT_QTGUI_INCLUDE_DIR}") ENDIF() diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index e3d802648e..e354bb4bd2 100755 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -67,7 +67,7 @@ if (APPLE) endif (APPLE) -find_package(Qt4 REQUIRED QtCore QtGui QtNetwork QtOpenGL QtWebKit QtSvg) +find_package(Qt5 REQUIRED QtCore QtGui QtNetwork QtOpenGL QtWebKit QtSvg) include(${QT_USE_FILE}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${QT_QTGUI_INCLUDE_DIR}") @@ -76,7 +76,7 @@ add_subdirectory(external/fervor/) include_directories(external/fervor/) # run qt moc on qt-enabled headers -qt4_wrap_cpp(INTERFACE_SRCS src/Application.h src/Webcam.h src/avatar/AvatarVoxelSystem.h +qt5_wrap_cpp(INTERFACE_SRCS src/Application.h src/Webcam.h src/avatar/AvatarVoxelSystem.h src/avatar/Face.h src/ui/BandwidthDialog.h) # create the executable, make it a bundle on OS X diff --git a/interface/external/fervor/CMakeLists.txt b/interface/external/fervor/CMakeLists.txt index f257bb4431..9cba3816f8 100644 --- a/interface/external/fervor/CMakeLists.txt +++ b/interface/external/fervor/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.8) project(Fervor) -find_package(Qt4 REQUIRED) +find_package(Qt5 REQUIRED) add_definitions(-DFV_GUI) @@ -13,8 +13,8 @@ list(REMOVE_ITEM FERVOR_HEADERS ${HEADER_PATH}/fvversioncomparator.h) file(GLOB FERVOR_UI *.ui) -qt4_wrap_ui(FERVOR_WRAPPED_UI ${FERVOR_UI}) -qt4_wrap_cpp(FERVOR_MOC_SOURCES ${FERVOR_HEADERS}) +qt5_wrap_ui(FERVOR_WRAPPED_UI ${FERVOR_UI}) +qt5_wrap_cpp(FERVOR_MOC_SOURCES ${FERVOR_HEADERS}) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules/") find_package(Quazip REQUIRED) diff --git a/libraries/avatars/CMakeLists.txt b/libraries/avatars/CMakeLists.txt index 207057e244..5827f94ebb 100644 --- a/libraries/avatars/CMakeLists.txt +++ b/libraries/avatars/CMakeLists.txt @@ -8,6 +8,10 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../../cm set(TARGET_NAME avatars) +find_package(Qt5 REQUIRED QtCore) +include(${QT_USE_FILE}) +qt5_wrap_cpp(WRAPPED_SRCS src/AvatarData.h) + include(${MACRO_DIR}/SetupHifiLibrary.cmake) setup_hifi_library(${TARGET_NAME}) diff --git a/libraries/shared/CMakeLists.txt b/libraries/shared/CMakeLists.txt index 218adb4d5f..a162815097 100644 --- a/libraries/shared/CMakeLists.txt +++ b/libraries/shared/CMakeLists.txt @@ -6,6 +6,10 @@ set(MACRO_DIR ${ROOT_DIR}/cmake/macros) set(TARGET_NAME shared) project(${TARGET_NAME}) +find_package(Qt5 REQUIRED QtCore) +include(${QT_USE_FILE}) +qt5_wrap_cpp(WRAPPED_SRCS src/NodeData.h) + include(${MACRO_DIR}/SetupHifiLibrary.cmake) setup_hifi_library(${TARGET_NAME}) From da0049933b43b805916ca6c23e8d17e54e766df5 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 23 Jul 2013 20:25:21 -0700 Subject: [PATCH 38/56] rename Operative to Agent --- libraries/avatars/src/Agent.cpp | 38 +++++ libraries/avatars/src/Agent.h | 29 ++++ libraries/shared/src/Operative.cpp | 257 ----------------------------- libraries/shared/src/Operative.h | 49 ------ 4 files changed, 67 insertions(+), 306 deletions(-) create mode 100644 libraries/avatars/src/Agent.cpp create mode 100644 libraries/avatars/src/Agent.h delete mode 100644 libraries/shared/src/Operative.cpp delete mode 100644 libraries/shared/src/Operative.h diff --git a/libraries/avatars/src/Agent.cpp b/libraries/avatars/src/Agent.cpp new file mode 100644 index 0000000000..88f8a88cad --- /dev/null +++ b/libraries/avatars/src/Agent.cpp @@ -0,0 +1,38 @@ +// +// Agent.cpp +// hifi +// +// Created by Stephen Birarda on 7/1/13. +// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. +// + +#import +#import + +#include + +#include "Agent.h" + +void Agent::run(QUrl scriptURL) { + + QNetworkAccessManager* manager = new QNetworkAccessManager(); + + qDebug() << "Attemping download of " << scriptURL; + + QNetworkReply* reply = manager->get(QNetworkRequest(scriptURL)); + + QEventLoop loop; + QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); + loop.exec(); + + QString scriptString = QString(reply->readAll()); + + QScriptEngine engine; + + AvatarData *someObject = new AvatarData; + + QScriptValue objectValue = engine.newObject(); + engine.globalObject().setProperty("AvatarData", objectValue); + + qDebug() << "Execution of script:" << engine.evaluate(scriptString).toString(); +} \ No newline at end of file diff --git a/libraries/avatars/src/Agent.h b/libraries/avatars/src/Agent.h new file mode 100644 index 0000000000..d02ac67f94 --- /dev/null +++ b/libraries/avatars/src/Agent.h @@ -0,0 +1,29 @@ +// +// Agent.h +// hifi +// +// Created by Stephen Birarda on 7/1/13. +// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. +// + +#ifndef __hifi__Agent__ +#define __hifi__Agent__ + +#import "AudioInjector.h" + +#include +#include + +#include "SharedUtil.h" + +#include + +class Agent { +public: + bool volatile shouldStop; + + void run(QUrl scriptUrl); +private: +}; + +#endif /* defined(__hifi__Operative__) */ diff --git a/libraries/shared/src/Operative.cpp b/libraries/shared/src/Operative.cpp deleted file mode 100644 index 1e1e6a874c..0000000000 --- a/libraries/shared/src/Operative.cpp +++ /dev/null @@ -1,257 +0,0 @@ -// -// Operative.cpp -// hifi -// -// Created by Stephen Birarda on 7/1/13. -// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. -// - -#include "AudioInjectionManager.h" - -#include "NodeList.h" -#include "NodeTypes.h" -#include "PacketHeaders.h" -#include "SharedUtil.h" - -#include "Operative.h" - -const float BUG_VOXEL_SIZE = 0.0625f / 128; - -glm::vec3 rotatePoint(glm::vec3 point, float angle) { - // First, create the quaternion based on this angle of rotation - glm::quat q(glm::vec3(0, -angle, 0)); - - // Next, create a rotation matrix from that quaternion - glm::mat4 rotation = glm::mat4_cast(q); - - // Transform the original vectors by the rotation matrix to get the new vectors - glm::vec4 quatPoint(point.x, point.y, point.z, 0); - glm::vec4 newPoint = quatPoint * rotation; - - return glm::vec3(newPoint.x, newPoint.y, newPoint.z); -} - -Operative::Operative() : - _bugPosition(BUG_VOXEL_SIZE * 20.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 20.0), - _bugDirection(0, 0, 1), - _bugPathCenter(BUG_VOXEL_SIZE * 150.0, BUG_VOXEL_SIZE * 30.0, BUG_VOXEL_SIZE * 150.0), - _bugPathRadius(BUG_VOXEL_SIZE * 40.0), - _bugPathTheta(0.0f), - _bugRotation(0.0f), - _bugAngleDelta(0.2 * (M_PI / 180.0f)), - _moveBugInLine(false), - _packetsSent(0), - _bytesSent(0) -{ -} - -class BugPart { -public: - glm::vec3 partLocation; - unsigned char partColor[3]; - - BugPart(const glm::vec3& location, unsigned char red, unsigned char green, unsigned char blue ) { - partLocation = location; - partColor[0] = red; - partColor[1] = green; - partColor[2] = blue; - } -}; - -const BugPart BUG_PARTS[VOXELS_PER_BUG] = { - - // tail - BugPart(glm::vec3( 0, 0, -3), 51, 51, 153) , - BugPart(glm::vec3( 0, 0, -2), 51, 51, 153) , - BugPart(glm::vec3( 0, 0, -1), 51, 51, 153) , - - // body - BugPart(glm::vec3( 0, 0, 0), 255, 200, 0) , - BugPart(glm::vec3( 0, 0, 1), 255, 200, 0) , - - // head - BugPart(glm::vec3( 0, 0, 2), 200, 0, 0) , - - // eyes - BugPart(glm::vec3( 1, 0, 3), 64, 64, 64) , - BugPart(glm::vec3(-1, 0, 3), 64, 64, 64) , - - // wings - BugPart(glm::vec3( 3, 1, 1), 0, 153, 0) , - BugPart(glm::vec3( 2, 1, 1), 0, 153, 0) , - BugPart(glm::vec3( 1, 0, 1), 0, 153, 0) , - BugPart(glm::vec3(-1, 0, 1), 0, 153, 0) , - BugPart(glm::vec3(-2, 1, 1), 0, 153, 0) , - BugPart(glm::vec3(-3, 1, 1), 0, 153, 0) , - - - BugPart(glm::vec3( 2, -1, 0), 153, 200, 0) , - BugPart(glm::vec3( 1, -1, 0), 153, 200, 0) , - BugPart(glm::vec3(-1, -1, 0), 153, 200, 0) , - BugPart(glm::vec3(-2, -1, 0), 153, 200, 0) , -}; - -void Operative::removeOldBug() { - VoxelDetail details[VOXELS_PER_BUG]; - unsigned char* bufferOut; - int sizeOut; - - // Generate voxels for where bug used to be - for (int i = 0; i < VOXELS_PER_BUG; i++) { - details[i].s = BUG_VOXEL_SIZE; - - glm::vec3 partAt = BUG_PARTS[i].partLocation * BUG_VOXEL_SIZE * (_bugDirection.x < 0 ? -1.0f : 1.0f); - glm::vec3 rotatedPartAt = rotatePoint(partAt, _bugRotation); - glm::vec3 offsetPartAt = rotatedPartAt + _bugPosition; - - details[i].x = offsetPartAt.x; - details[i].y = offsetPartAt.y; - details[i].z = offsetPartAt.z; - - details[i].red = BUG_PARTS[i].partColor[0]; - details[i].green = BUG_PARTS[i].partColor[1]; - details[i].blue = BUG_PARTS[i].partColor[2]; - } - - // send the "erase message" first... - PACKET_TYPE message = PACKET_TYPE_ERASE_VOXEL; - if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&details, bufferOut, sizeOut)){ - - _packetsSent++; - _bytesSent += sizeOut; - - NodeList::getInstance()->broadcastToNodes(bufferOut, sizeOut, &NODE_TYPE_VOXEL_SERVER, 1); - delete[] bufferOut; - } -} - -void Operative::renderMovingBug() { - unsigned char* bufferOut; - int sizeOut; - - removeOldBug(); - - // Move the bug... - if (_moveBugInLine) { - _bugPosition.x += (_bugDirection.x * BUG_VOXEL_SIZE); - _bugPosition.y += (_bugDirection.y * BUG_VOXEL_SIZE); - _bugPosition.z += (_bugDirection.z * BUG_VOXEL_SIZE); - - // Check boundaries - if (_bugPosition.z > 1.0) { - _bugDirection.z = -1; - } - if (_bugPosition.z < BUG_VOXEL_SIZE) { - _bugDirection.z = 1; - } - } else { - - _bugPathTheta += _bugAngleDelta; // move slightly - _bugRotation -= _bugAngleDelta; // rotate slightly - - // If we loop past end of circle, just reset back into normal range - if (_bugPathTheta > (360.0f * PI_OVER_180)) { - _bugPathTheta = 0; - _bugRotation = 0; - } - - float x = _bugPathCenter.x + _bugPathRadius * cos(_bugPathTheta); - float z = _bugPathCenter.z + _bugPathRadius * sin(_bugPathTheta); - float y = _bugPathCenter.y; - - _bugPosition = glm::vec3(x, y, z); - } - - // would be nice to add some randomness here... - - // Generate voxels for where bug is going to - for (int i = 0; i < VOXELS_PER_BUG; i++) { - _bugDetails[i].s = BUG_VOXEL_SIZE; - - glm::vec3 partAt = BUG_PARTS[i].partLocation * BUG_VOXEL_SIZE * (_bugDirection.x < 0 ? -1.0f : 1.0f); - glm::vec3 rotatedPartAt = rotatePoint(partAt, _bugRotation); - glm::vec3 offsetPartAt = rotatedPartAt + _bugPosition; - - _bugDetails[i].x = offsetPartAt.x; - _bugDetails[i].y = offsetPartAt.y; - _bugDetails[i].z = offsetPartAt.z; - - float colorRatio = (powf(injector->getLastFrameIntensity(), 0.5) * 0.5f) + 0.5f; - - _bugDetails[i].red = BUG_PARTS[i].partColor[0] * colorRatio; - _bugDetails[i].green = BUG_PARTS[i].partColor[1] * colorRatio; - _bugDetails[i].blue = BUG_PARTS[i].partColor[2] * colorRatio; - } - - // send the "create message" ... - PACKET_TYPE message = PACKET_TYPE_SET_VOXEL_DESTRUCTIVE; - if (createVoxelEditMessage(message, 0, VOXELS_PER_BUG, (VoxelDetail*)&_bugDetails, bufferOut, sizeOut)){ - - _packetsSent++; - _bytesSent += sizeOut; - - NodeList::getInstance()->broadcastToNodes(bufferOut, sizeOut, &NODE_TYPE_VOXEL_SERVER, 1); - delete[] bufferOut; - } -} - -const int ACTUAL_FPS = 60; -const double OUR_FPS_IN_MILLISECONDS = 1000.0/ACTUAL_FPS; // determines FPS from our desired FPS -const int ANIMATE_VOXELS_INTERVAL_USECS = OUR_FPS_IN_MILLISECONDS * 1000.0; // converts from milliseconds to usecs - -void Operative::run() { - timeval lastSendTime = {}; - timeval lastDomainServerCheckIn = {}; - - NodeList* nodeList = NodeList::getInstance(); - - sockaddr nodePublicAddress; - - unsigned char* packetData = new unsigned char[MAX_PACKET_SIZE]; - ssize_t receivedBytes; - - // change the owner type on our NodeList - NodeList::getInstance()->setOwnerType(NODE_TYPE_AGENT); - const char NODE_TYPES_OF_INTEREST[] = {NODE_TYPE_VOXEL_SERVER, NODE_TYPE_AUDIO_MIXER}; - NodeList::getInstance()->setNodeTypesOfInterest(NODE_TYPES_OF_INTEREST, 2); - NodeList::getInstance()->getNodeSocket()->setBlocking(false); - - while (!shouldStop) { - gettimeofday(&lastSendTime, NULL); - - renderMovingBug(); - - glm::vec3 latestPosition(_bugDetails[5].x, _bugDetails[5].y, _bugDetails[5].z); - latestPosition *= 128; - injector->setPosition(latestPosition); - - if (!injector->isInjectingAudio() && randIntInRange(1, 100) == 99) { - AudioInjectionManager::threadInjector(injector); - } - - // send a check in packet to the domain server if DOMAIN_SERVER_CHECK_IN_USECS has elapsed - if (usecTimestampNow() - usecTimestamp(&lastDomainServerCheckIn) >= DOMAIN_SERVER_CHECK_IN_USECS) { - gettimeofday(&lastDomainServerCheckIn, NULL); - NodeList::getInstance()->sendDomainServerCheckIn(); - } - - // Nodes sending messages to us... - if (nodeList->getNodeSocket()->receive(&nodePublicAddress, packetData, &receivedBytes)) { - NodeList::getInstance()->processNodeData(&nodePublicAddress, packetData, receivedBytes); - } - - // dynamically sleep until we need to fire off the next set of voxels - long long usecToSleep = ANIMATE_VOXELS_INTERVAL_USECS - (usecTimestampNow() - usecTimestamp(&lastSendTime)); - - if (usecToSleep > 0) { - usleep(usecToSleep); - } else { - printf("Last send took too much time, not sleeping!\n"); - } - } - - printf("Removing the old bird and dying.\n"); - - // we've been told to stop, remove the last bug - removeOldBug(); -} \ No newline at end of file diff --git a/libraries/shared/src/Operative.h b/libraries/shared/src/Operative.h deleted file mode 100644 index b3635a16a5..0000000000 --- a/libraries/shared/src/Operative.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// Operative.h -// hifi -// -// Created by Stephen Birarda on 7/1/13. -// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. -// - -#ifndef __hifi__Operative__ -#define __hifi__Operative__ - -#import "AudioInjector.h" - -#include -#include - -#include "SharedUtil.h" - -const int VOXELS_PER_BUG = 18; - -class Operative { -public: - Operative(); - - bool volatile shouldStop; - AudioInjector* injector; - - void run(); -private: - void renderMovingBug(); - void removeOldBug(); - - VoxelDetail _bugDetails[VOXELS_PER_BUG]; - - glm::vec3 _bugPosition; - glm::vec3 _bugDirection; - glm::vec3 _bugPathCenter; - - float _bugPathRadius; - float _bugPathTheta; - float _bugRotation; - float _bugAngleDelta; - bool _moveBugInLine; - - unsigned long _packetsSent; - unsigned long _bytesSent; -}; - -#endif /* defined(__hifi__Operative__) */ From 7134d130012cb03af3cbec5c4f029246cfd38c2e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 24 Jul 2013 12:34:32 -0700 Subject: [PATCH 39/56] tweaks for iOS compatibility --- assignment-server/CMakeLists.txt | 2 +- hifi.podspec | 7 +++++-- interface/src/avatar/AvatarVoxelSystem.h | 2 +- libraries/avatars/src/Agent.cpp | 2 +- libraries/avatars/src/AvatarData.h | 3 +++ libraries/shared/src/NodeData.h | 5 ++++- 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/assignment-server/CMakeLists.txt b/assignment-server/CMakeLists.txt index 4768ae24f4..c551cbf0a5 100644 --- a/assignment-server/CMakeLists.txt +++ b/assignment-server/CMakeLists.txt @@ -6,7 +6,7 @@ set(ROOT_DIR ..) set(MACRO_DIR ${ROOT_DIR}/cmake/macros) include(${MACRO_DIR}/SetupHifiProject.cmake) -setup_hifi_project(${TARGET_NAME} FALSE) +setup_hifi_project(${TARGET_NAME} TRUE) # link in the shared library include(${MACRO_DIR}/LinkHifiLibrary.cmake) diff --git a/hifi.podspec b/hifi.podspec index 94468bc3e7..6c4d1954bc 100644 --- a/hifi.podspec +++ b/hifi.podspec @@ -36,7 +36,6 @@ Pod::Spec.new do |s| s.subspec "shared" do |sp| sp.source_files = "libraries/shared/src" - sp.public_header_files = "librares/shared/src" sp.exclude_files = "libraries/shared/src/UrlReader.*" sp.dependency 'glm' sp.xcconfig = { 'CLANG_CXX_LIBRARY' => "libc++" } @@ -44,7 +43,11 @@ Pod::Spec.new do |s| s.subspec "audio" do |sp| sp.source_files = "libraries/audio/src" - sp.public_header_files = "libraries/audio/src" + sp.dependency 'glm' + end + + s.subspec "avatars" do |sp| + sp.source_files = "libraries/avatar/src" sp.dependency 'glm' end diff --git a/interface/src/avatar/AvatarVoxelSystem.h b/interface/src/avatar/AvatarVoxelSystem.h index 51144e3954..3a7cb224a6 100644 --- a/interface/src/avatar/AvatarVoxelSystem.h +++ b/interface/src/avatar/AvatarVoxelSystem.h @@ -21,7 +21,7 @@ class QNetworkReply; class Avatar; -class AvatarVoxelSystem : public QObject, public VoxelSystem { +class AvatarVoxelSystem : public VoxelSystem { Q_OBJECT public: diff --git a/libraries/avatars/src/Agent.cpp b/libraries/avatars/src/Agent.cpp index 88f8a88cad..359ca11acc 100644 --- a/libraries/avatars/src/Agent.cpp +++ b/libraries/avatars/src/Agent.cpp @@ -9,7 +9,7 @@ #import #import -#include +#include "AvatarData.h" #include "Agent.h" diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 209d822426..6eca7d3c3c 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -16,6 +16,8 @@ #include #include +#include + #include #include "HeadData.h" #include "HandData.h" @@ -39,6 +41,7 @@ enum KeyState class JointData; class AvatarData : public NodeData { + Q_OBJECT public: AvatarData(Node* owningNode = NULL); ~AvatarData(); diff --git a/libraries/shared/src/NodeData.h b/libraries/shared/src/NodeData.h index c11b41ced9..8d3ddf51e0 100644 --- a/libraries/shared/src/NodeData.h +++ b/libraries/shared/src/NodeData.h @@ -9,9 +9,12 @@ #ifndef hifi_NodeData_h #define hifi_NodeData_h +#include + class Node; -class NodeData { +class NodeData : public QObject { + Q_OBJECT public: NodeData(Node* owningNode); From f8e7e1de66d8f77c3fd22c72170d130f49e64418 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 24 Jul 2013 13:05:02 -0700 Subject: [PATCH 40/56] modifications to hook shared classes to iOS --- hifi.podspec | 7 +++++-- libraries/avatars/src/Agent.cpp | 2 +- libraries/avatars/src/AvatarData.cpp | 5 +++-- libraries/avatars/src/AvatarData.h | 3 +++ libraries/avatars/src/HandData.h | 2 +- libraries/shared/src/Node.cpp | 2 +- libraries/shared/src/Node.h | 2 +- libraries/shared/src/NodeList.cpp | 2 +- libraries/shared/src/NodeList.h | 2 +- libraries/shared/src/OctalCode.cpp | 2 +- libraries/shared/src/PacketHeaders.cpp | 2 +- libraries/shared/src/PerfStat.cpp | 2 +- libraries/shared/src/SharedUtil.cpp | 2 +- libraries/shared/src/SharedUtil.h | 2 +- libraries/shared/src/UDPSocket.cpp | 2 +- 15 files changed, 23 insertions(+), 16 deletions(-) diff --git a/hifi.podspec b/hifi.podspec index 6c4d1954bc..33ac415c5f 100644 --- a/hifi.podspec +++ b/hifi.podspec @@ -35,7 +35,7 @@ Pod::Spec.new do |s| # s.exclude_files = 'Classes/Exclude' s.subspec "shared" do |sp| - sp.source_files = "libraries/shared/src" + sp.source_files = 'libraries/shared/src', 'libraries/shared/moc_*' sp.exclude_files = "libraries/shared/src/UrlReader.*" sp.dependency 'glm' sp.xcconfig = { 'CLANG_CXX_LIBRARY' => "libc++" } @@ -47,9 +47,12 @@ Pod::Spec.new do |s| end s.subspec "avatars" do |sp| - sp.source_files = "libraries/avatar/src" + sp.source_files = 'libraries/avatars/src', 'libraries/avatars/moc_*' sp.dependency 'glm' end + + s.xcconfig = { 'HEADER_SEARCH_PATHS' => '${PODS_ROOT}/../../qt5-device/qtbase/include' } + s.libraries = 'libQtCoreCombined', 'libQt5Network', 'libQt5Script' # A list of file patterns which select the header files that should be # made available to the application. If the pattern is a directory then the diff --git a/libraries/avatars/src/Agent.cpp b/libraries/avatars/src/Agent.cpp index 359ca11acc..30443e212c 100644 --- a/libraries/avatars/src/Agent.cpp +++ b/libraries/avatars/src/Agent.cpp @@ -31,7 +31,7 @@ void Agent::run(QUrl scriptURL) { AvatarData *someObject = new AvatarData; - QScriptValue objectValue = engine.newObject(); + QScriptValue objectValue = engine.newQObject(someObject); engine.globalObject().setProperty("AvatarData", objectValue); qDebug() << "Execution of script:" << engine.evaluate(scriptString).toString(); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 01907b92f4..44393b66d5 100755 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -14,7 +14,7 @@ #include #include "AvatarData.h" -#include +//#include using namespace std; @@ -277,7 +277,8 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { } glm::vec3 AvatarData::calculateCameraDirection() const { - glm::vec3 direction = glm::vec3(_cameraOrientation * glm::vec4(IDENTITY_FRONT, 0.0f)); +// glm::vec3 direction = glm::vec3(_cameraOrientation * glm::vec4(IDENTITY_FRONT, 0.0f)); + glm::vec3 direction; return direction; } diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 6eca7d3c3c..8c1dac5ad4 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -106,6 +106,9 @@ public: void setHeadData(HeadData* headData) { _headData = headData; } void setHandData(HandData* handData) { _handData = handData; } +public slots: + void setPosition(float x, float y, float z) { _position = glm::vec3(x, y, z); } + protected: glm::vec3 _position; glm::vec3 _handPosition; diff --git a/libraries/avatars/src/HandData.h b/libraries/avatars/src/HandData.h index d2b5cae90d..3464569b9b 100755 --- a/libraries/avatars/src/HandData.h +++ b/libraries/avatars/src/HandData.h @@ -13,7 +13,7 @@ #include #include -#include +#include class AvatarData; class FingerData; diff --git a/libraries/shared/src/Node.cpp b/libraries/shared/src/Node.cpp index 4e637bcc79..c91626d99d 100644 --- a/libraries/shared/src/Node.cpp +++ b/libraries/shared/src/Node.cpp @@ -21,7 +21,7 @@ #include "SharedUtil.h" #include "UDPSocket.h" -#include +#include int unpackNodeId(unsigned char* packedData, uint16_t* nodeId) { memcpy(nodeId, packedData, sizeof(uint16_t)); diff --git a/libraries/shared/src/Node.h b/libraries/shared/src/Node.h index 46bf90ed43..df20664bda 100644 --- a/libraries/shared/src/Node.h +++ b/libraries/shared/src/Node.h @@ -18,7 +18,7 @@ #include #endif -#include +#include #include "NodeData.h" #include "SimpleMovingAverage.h" diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index cad9a4c797..0b32843644 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -11,7 +11,7 @@ #include #include -#include +#include #include "NodeList.h" #include "NodeTypes.h" diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index 38e8abe7fb..0ec1ed239b 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -14,7 +14,7 @@ #include #include -#include +#include #include "Node.h" #include "NodeTypes.h" diff --git a/libraries/shared/src/OctalCode.cpp b/libraries/shared/src/OctalCode.cpp index b085a146a2..4a00998860 100644 --- a/libraries/shared/src/OctalCode.cpp +++ b/libraries/shared/src/OctalCode.cpp @@ -11,7 +11,7 @@ #include #include -#include +#include #include "SharedUtil.h" #include "OctalCode.h" diff --git a/libraries/shared/src/PacketHeaders.cpp b/libraries/shared/src/PacketHeaders.cpp index 821a2d0247..9baad2a57b 100644 --- a/libraries/shared/src/PacketHeaders.cpp +++ b/libraries/shared/src/PacketHeaders.cpp @@ -8,7 +8,7 @@ #include -#include +#include #include "PacketHeaders.h" diff --git a/libraries/shared/src/PerfStat.cpp b/libraries/shared/src/PerfStat.cpp index 86985eb038..2e255f1a3e 100644 --- a/libraries/shared/src/PerfStat.cpp +++ b/libraries/shared/src/PerfStat.cpp @@ -14,7 +14,7 @@ #include #include -#include +#include #include "PerfStat.h" diff --git a/libraries/shared/src/SharedUtil.cpp b/libraries/shared/src/SharedUtil.cpp index b6674fdb32..93ea8a70ed 100644 --- a/libraries/shared/src/SharedUtil.cpp +++ b/libraries/shared/src/SharedUtil.cpp @@ -20,7 +20,7 @@ #include #endif -#include +#include #include "OctalCode.h" #include "PacketHeaders.h" diff --git a/libraries/shared/src/SharedUtil.h b/libraries/shared/src/SharedUtil.h index d840a83ed9..49e8ae6f02 100644 --- a/libraries/shared/src/SharedUtil.h +++ b/libraries/shared/src/SharedUtil.h @@ -13,7 +13,7 @@ #include #include -#include +#include #ifdef _WIN32 #include "Systime.h" diff --git a/libraries/shared/src/UDPSocket.cpp b/libraries/shared/src/UDPSocket.cpp index 270b090d4a..c156ddd1be 100644 --- a/libraries/shared/src/UDPSocket.cpp +++ b/libraries/shared/src/UDPSocket.cpp @@ -20,7 +20,7 @@ #include #endif -#include +#include #include "UDPSocket.h" From 890d2e40ecce722c49c45bb182c98772c7002e99 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 24 Jul 2013 16:58:44 -0700 Subject: [PATCH 41/56] more fleshing out of Agent class to interpret javascript --- libraries/avatars/CMakeLists.txt | 2 +- libraries/avatars/src/Agent.cpp | 58 ++++++++++++++++++++++++++-- libraries/avatars/src/Agent.h | 13 +++++-- libraries/avatars/src/AvatarData.cpp | 21 +++++++++- libraries/avatars/src/AvatarData.h | 3 +- libraries/shared/src/NodeList.cpp | 4 +- 6 files changed, 89 insertions(+), 12 deletions(-) diff --git a/libraries/avatars/CMakeLists.txt b/libraries/avatars/CMakeLists.txt index 0570c30725..eb681ee93c 100644 --- a/libraries/avatars/CMakeLists.txt +++ b/libraries/avatars/CMakeLists.txt @@ -22,4 +22,4 @@ include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) # link in the hifi voxels library -link_hifi_library(voxels ${TARGET_NAME} ${ROOT_DIR}) +link_hifi_library(voxels ${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file diff --git a/libraries/avatars/src/Agent.cpp b/libraries/avatars/src/Agent.cpp index 30443e212c..af1ac69b74 100644 --- a/libraries/avatars/src/Agent.cpp +++ b/libraries/avatars/src/Agent.cpp @@ -9,11 +9,21 @@ #import #import +#include + #include "AvatarData.h" #include "Agent.h" +Agent::Agent() : + _shouldStop(false) +{ + +} + void Agent::run(QUrl scriptURL) { + NodeList::getInstance()->setOwnerType(NODE_TYPE_AGENT); + NodeList::getInstance()->setNodeTypesOfInterest(&NODE_TYPE_AVATAR_MIXER, 1); QNetworkAccessManager* manager = new QNetworkAccessManager(); @@ -29,10 +39,50 @@ void Agent::run(QUrl scriptURL) { QScriptEngine engine; - AvatarData *someObject = new AvatarData; + AvatarData *testAvatarData = new AvatarData; - QScriptValue objectValue = engine.newQObject(someObject); - engine.globalObject().setProperty("AvatarData", objectValue); + QScriptValue avatarDataValue = engine.newQObject(testAvatarData); + engine.globalObject().setProperty("AvatarData", avatarDataValue); + + QScriptValue agentValue = engine.newQObject(this); + engine.globalObject().setProperty("Agent", agentValue); + + qDebug() << "Downloaded script:" << scriptString; + + qDebug() << "Evaluated script:" << engine.evaluate(scriptString).toString(); + + timeval thisSend; + timeval lastDomainServerCheckIn = {}; + int numMicrosecondsSleep = 0; + + const float DATA_SEND_INTERVAL_MSECS = (1 / 60) * 1000; + + sockaddr_in senderAddress; + unsigned char receivedData[MAX_PACKET_SIZE]; + ssize_t receivedBytes; + + while (!_shouldStop) { + // update the thisSend timeval to the current time + gettimeofday(&thisSend, NULL); + + // send a check in packet to the domain server if DOMAIN_SERVER_CHECK_IN_USECS has elapsed + if (usecTimestampNow() - usecTimestamp(&lastDomainServerCheckIn) >= DOMAIN_SERVER_CHECK_IN_USECS) { + gettimeofday(&lastDomainServerCheckIn, NULL); + NodeList::getInstance()->sendDomainServerCheckIn(); + } + + emit preSendCallback(); + + testAvatarData->sendData(); + + if (NodeList::getInstance()->getNodeSocket()->receive((sockaddr*) &senderAddress, receivedData, &receivedBytes)) { + NodeList::getInstance()->processNodeData((sockaddr*) &senderAddress, receivedData, receivedBytes); + } + + // sleep for the correct amount of time to have data send be consistently timed + if ((numMicrosecondsSleep = (DATA_SEND_INTERVAL_MSECS * 1000) - (usecTimestampNow() - usecTimestamp(&thisSend))) > 0) { + usleep(numMicrosecondsSleep); + } + } - qDebug() << "Execution of script:" << engine.evaluate(scriptString).toString(); } \ No newline at end of file diff --git a/libraries/avatars/src/Agent.h b/libraries/avatars/src/Agent.h index d02ac67f94..e7e53467fa 100644 --- a/libraries/avatars/src/Agent.h +++ b/libraries/avatars/src/Agent.h @@ -16,14 +16,19 @@ #include "SharedUtil.h" +#include #include -class Agent { -public: - bool volatile shouldStop; +class Agent : public QObject { + Q_OBJECT +public: + Agent(); + + bool volatile _shouldStop; void run(QUrl scriptUrl); -private: +signals: + void preSendCallback(); }; #endif /* defined(__hifi__Operative__) */ diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 44393b66d5..b61d035ce3 100755 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -10,8 +10,9 @@ #include #include -#include +#include #include +#include #include "AvatarData.h" //#include @@ -50,6 +51,24 @@ AvatarData::~AvatarData() { delete _handData; } +void AvatarData::sendData() { + + // called from Agent visual loop to send data + if (Node* avatarMixer = NodeList::getInstance()->soloNodeOfType(NODE_TYPE_AVATAR_MIXER)) { + unsigned char packet[MAX_PACKET_SIZE]; + + unsigned char* endOfPacket = packet; + endOfPacket += populateTypeAndVersion(endOfPacket, PACKET_TYPE_HEAD_DATA); + endOfPacket += packNodeId(endOfPacket, NodeList::getInstance()->getOwnerID()); + + int numPacketBytes = (endOfPacket - packet) + getBroadcastData(endOfPacket); + + qDebug("The current body yaw is %f\n", _bodyYaw); + + NodeList::getInstance()->getNodeSocket()->send(avatarMixer->getActiveSocket(), packet, numPacketBytes); + } +} + int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { unsigned char* bufferStart = destinationBuffer; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 8c1dac5ad4..2399d1062c 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -56,7 +56,6 @@ public: // Body Rotation float getBodyYaw() const { return _bodyYaw; } - void setBodyYaw(float bodyYaw) { _bodyYaw = bodyYaw; } float getBodyPitch() const { return _bodyPitch; } void setBodyPitch(float bodyPitch) { _bodyPitch = bodyPitch; } float getBodyRoll() const {return _bodyRoll; } @@ -108,6 +107,8 @@ public: public slots: void setPosition(float x, float y, float z) { _position = glm::vec3(x, y, z); } + void setBodyYaw(float bodyYaw) { _bodyYaw = bodyYaw; } + void sendData(); protected: glm::vec3 _position; diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 0b32843644..93471f7356 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -117,8 +117,10 @@ void NodeList::processNodeData(sockaddr* senderAddress, unsigned char* packetDat sockaddr_in domainServerSocket = *(sockaddr_in*) senderAddress; const char* domainSenderIP = inet_ntoa(domainServerSocket.sin_addr); + processDomainServerList(packetData, dataBytes); + if (memcmp(domainSenderIP, _domainIP, strlen(domainSenderIP)) == 0) { - processDomainServerList(packetData, dataBytes); + } break; From 121abc40b6feba0cb3db0e8fce304997693c6ced Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 1 Aug 2013 15:19:54 -0700 Subject: [PATCH 42/56] remove newline at end of shared CMakeLists --- libraries/shared/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/shared/CMakeLists.txt b/libraries/shared/CMakeLists.txt index 99302b955f..65337ab8e4 100644 --- a/libraries/shared/CMakeLists.txt +++ b/libraries/shared/CMakeLists.txt @@ -32,4 +32,4 @@ endif (UNIX AND NOT APPLE) # include GLM include(${MACRO_DIR}/IncludeGLM.cmake) -include_glm(${TARGET_NAME} ${ROOT_DIR}) +include_glm(${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file From abc8bc332c6be04165b196b695cef1cd07331abd Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 2 Aug 2013 20:12:13 -0700 Subject: [PATCH 43/56] made import work better when tile locations not included in file name --- interface/src/Application.cpp | 69 +++++++++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 8 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6087a4493e..23500d8f42 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1686,14 +1686,25 @@ void Application::importVoxels() { const int SVO_TYPE_NAME_LENGTH = 4; const int SCH_TYPE_NAME_LENGTH = 10; + // assume this is where we'll place it if filename doesn't have tiling + int unspecifiedColumnNum = 1; + int unspecifiedRowNum = 1; + + // if they select multiple files, but they don't specify the tiling, we + // will tile them to this size + int unspecifiedSquare = (sqrt(fileNameStringList.size()) + 0.5); + qDebug("unspecifiedSquare: %d\n", unspecifiedSquare); + for (int i = 0; i < fileNameStringList.size(); i++) { QString fileNameString = fileNameStringList.at(i); + QString extension; QByteArray fileNameAscii = fileNameString.toLocal8Bit(); const char* fileName = fileNameAscii.data(); int fileTypeNameLength = 0; VoxelTree importVoxels; if (fileNameString.endsWith(".png", Qt::CaseInsensitive)) { + extension = QString(".png"); QImage pngImage = QImage(fileName); fileTypeNameLength = PNG_TYPE_NAME_LENGTH; if (pngImage.height() != pngImage.width()) { @@ -1711,25 +1722,67 @@ void Application::importVoxels() { importVoxels.readFromSquareARGB32Pixels(pixels, pngImage.height()); } else if (fileNameString.endsWith(".svo", Qt::CaseInsensitive)) { + extension = QString(".svo"); importVoxels.readFromSVOFile(fileName); fileTypeNameLength = SVO_TYPE_NAME_LENGTH; } else if (fileNameString.endsWith(".schematic", Qt::CaseInsensitive)) { + extension = QString(".schematic"); importVoxels.readFromSchematicFile(fileName); fileTypeNameLength = SCH_TYPE_NAME_LENGTH; } + + // Where we plan to place this + int columnNum = 1; + int rowNum = 1; + bool tileLocationUnspecified = false; - int indexOfFirstPeriod = fileNameString.indexOf('.'); + // If we're in multi-file mode, then look for tiling specification in the file name + if (fileNameStringList.size() > 1) { + int indexOfFirstPeriod = fileNameString.indexOf('.'); - QString fileCoord = fileNameString.mid(indexOfFirstPeriod + 1, - fileNameString.length() - indexOfFirstPeriod - fileTypeNameLength - 1); + //qDebug("indexOfFirstPeriod: %d\n", indexOfFirstPeriod); - indexOfFirstPeriod = fileCoord.indexOf('.'); - QString columnNumString = fileCoord.right(fileCoord.length() - indexOfFirstPeriod - 1); - QString rowNumString = fileCoord.left(indexOfFirstPeriod); + // If the first period, is the extension, then this is not a grid name; + if (fileNameString.mid(indexOfFirstPeriod, fileNameString.length() - indexOfFirstPeriod) == extension) { + qDebug("not a valid grid name... treat like tile Location Unspecified\n"); + tileLocationUnspecified = true; + } else { + QString fileCoord = fileNameString.mid(indexOfFirstPeriod + 1, + fileNameString.length() - indexOfFirstPeriod - fileTypeNameLength - 1); - int columnNum = columnNumString.toFloat(); - int rowNum = rowNumString.toFloat(); + //qDebug() << "fileCoord: " << fileCoord << "\n"; + indexOfFirstPeriod = fileCoord.indexOf('.'); + + //qDebug("indexOfFirstPeriod: %d\n", indexOfFirstPeriod); + + QString columnNumString = fileCoord.right(fileCoord.length() - indexOfFirstPeriod - 1); + QString rowNumString = fileCoord.left(indexOfFirstPeriod); + + //qDebug() << "columnNumString: " << columnNumString << "\n"; + //qDebug() << "rowNumString: " << rowNumString << "\n"; + + columnNum = columnNumString.toFloat(); + rowNum = rowNumString.toFloat(); + + // If there are no "grid sections" in the filename, then we're going to get + if (columnNum < 1 || rowNum < 1) { + qDebug("not a valid grid name... treat like tile Location Unspecified\n"); + tileLocationUnspecified = true; + } + } + } + + if (tileLocationUnspecified) { + qDebug("tileLocationUnspecified... \n"); + columnNum = unspecifiedColumnNum; + rowNum = unspecifiedRowNum; + unspecifiedColumnNum++; + if (unspecifiedColumnNum > unspecifiedSquare) { + unspecifiedColumnNum = 1; + unspecifiedRowNum++; + } + } qDebug("columnNum: %d\t rowNum: %d\n", columnNum, rowNum); _mouseVoxel.x = originalX + (columnNum - 1) * _mouseVoxel.s; From 72f76ee0b8a36b63324d48920d2ba1a3a466d664 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 10:00:00 -0700 Subject: [PATCH 44/56] cleanup assignment server to prepare for stub pull --- assignment-server/src/main.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index 3d8b1846a7..90f91a6c10 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -17,9 +17,7 @@ const int ASSIGNMENT_SERVER_LISTEN_PORT = 7007; const int MAX_PACKET_SIZE_BYTES = 1400; -struct Assignment { - char birdIndex; -}; +struct Assignment {}; int main(int argc, const char* argv[]) { @@ -38,26 +36,19 @@ int main(int argc, const char* argv[]) { while (true) { if (serverSocket.receive((sockaddr*) &senderSocket, &senderData, &receivedBytes)) { - int numHeaderBytes = numBytesForPacketHeader(senderData); + // int numHeaderBytes = numBytesForPacketHeader(senderData); if (senderData[0] == PACKET_TYPE_REQUEST_ASSIGNMENT) { // grab the FI assignment in the queue, if it exists if (assignmentQueue.size() > 0) { - Assignment firstAssignment = assignmentQueue.front(); + // Assignment firstAssignment = assignmentQueue.front(); assignmentQueue.pop(); - - printf("Pulled an assignment with index %d\n", firstAssignment.birdIndex); - - assignmentPacket[numHeaderBytes] = firstAssignment.birdIndex; - + // send the assignment serverSocket.send((sockaddr*) &senderSocket, assignmentPacket, sizeof(assignmentPacket)); } } else if (senderData[0] == PACKET_TYPE_SEND_ASSIGNMENT) { Assignment newAssignment; - newAssignment.birdIndex = *(senderData + numHeaderBytes); - - printf("Created an assignment in the queue with %d\n", newAssignment.birdIndex); // add this assignment to the queue assignmentQueue.push(newAssignment); From 8f876b91aec648547171166d1a0825262437b348 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 10:06:50 -0700 Subject: [PATCH 45/56] changes for stub pull request of assignee work --- audio-mixer/CMakeLists.txt | 2 +- eve/CMakeLists.txt | 2 +- hifi.podspec | 2 +- injector/CMakeLists.txt | 2 +- interface/CMakeLists.txt | 2 +- libraries/{shared => audio}/src/AudioInjectionManager.cpp | 0 libraries/{shared => audio}/src/AudioInjectionManager.h | 0 libraries/{shared => audio}/src/AudioInjector.cpp | 1 - libraries/{shared => audio}/src/AudioInjector.h | 0 libraries/{shared => audio}/src/AudioRingBuffer.cpp | 0 libraries/{shared => audio}/src/AudioRingBuffer.h | 0 libraries/avatars/src/AvatarData.cpp | 5 ++--- libraries/shared/src/NodeList.cpp | 4 +--- 13 files changed, 8 insertions(+), 12 deletions(-) rename libraries/{shared => audio}/src/AudioInjectionManager.cpp (100%) rename libraries/{shared => audio}/src/AudioInjectionManager.h (100%) rename libraries/{shared => audio}/src/AudioInjector.cpp (98%) rename libraries/{shared => audio}/src/AudioInjector.h (100%) rename libraries/{shared => audio}/src/AudioRingBuffer.cpp (100%) rename libraries/{shared => audio}/src/AudioRingBuffer.h (100%) diff --git a/audio-mixer/CMakeLists.txt b/audio-mixer/CMakeLists.txt index b31006cea3..472327de42 100644 --- a/audio-mixer/CMakeLists.txt +++ b/audio-mixer/CMakeLists.txt @@ -18,7 +18,7 @@ include_glm(${TARGET_NAME} ${ROOT_DIR}) # link the shared hifi library include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) -# link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) +link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) # link the stk library set(STK_ROOT_DIR ${ROOT_DIR}/externals/stk) diff --git a/eve/CMakeLists.txt b/eve/CMakeLists.txt index f90d339494..2b281f2783 100644 --- a/eve/CMakeLists.txt +++ b/eve/CMakeLists.txt @@ -18,4 +18,4 @@ include_glm(${TARGET_NAME} ${ROOT_DIR}) include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) link_hifi_library(avatars ${TARGET_NAME} ${ROOT_DIR}) -# link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) +link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) diff --git a/hifi.podspec b/hifi.podspec index 33ac415c5f..a14381ffb4 100644 --- a/hifi.podspec +++ b/hifi.podspec @@ -22,7 +22,7 @@ Pod::Spec.new do |s| # Specify the location from where the source should be retrieved. # - s.source = { :git => "https://github.com/birarda/hifi.git" } + s.source = { :git => "https://github.com/worklist/hifi.git" } s.platform = :ios s.ios.deployment_target = "6.0" diff --git a/injector/CMakeLists.txt b/injector/CMakeLists.txt index 7b885b8dfb..ae9ed3d8ad 100644 --- a/injector/CMakeLists.txt +++ b/injector/CMakeLists.txt @@ -18,5 +18,5 @@ include_glm(${TARGET_NAME} ${ROOT_DIR}) # link the shared hifi library include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) -# link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) +link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) link_hifi_library(avatars ${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 7d518c132f..17967c5f42 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -87,7 +87,7 @@ include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) link_hifi_library(voxels ${TARGET_NAME} ${ROOT_DIR}) link_hifi_library(avatars ${TARGET_NAME} ${ROOT_DIR}) -# link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) +link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) # find required libraries find_package(GLM REQUIRED) diff --git a/libraries/shared/src/AudioInjectionManager.cpp b/libraries/audio/src/AudioInjectionManager.cpp similarity index 100% rename from libraries/shared/src/AudioInjectionManager.cpp rename to libraries/audio/src/AudioInjectionManager.cpp diff --git a/libraries/shared/src/AudioInjectionManager.h b/libraries/audio/src/AudioInjectionManager.h similarity index 100% rename from libraries/shared/src/AudioInjectionManager.h rename to libraries/audio/src/AudioInjectionManager.h diff --git a/libraries/shared/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp similarity index 98% rename from libraries/shared/src/AudioInjector.cpp rename to libraries/audio/src/AudioInjector.cpp index 327fb1aa82..06d8b53b25 100644 --- a/libraries/shared/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -149,7 +149,6 @@ void AudioInjector::addSamples(int16_t* sampleBuffer, int numSamples) { if (_audioSampleArray + _indexOfNextSlot + numSamples <= _audioSampleArray + _numTotalSamples) { // only copy the audio from the sample buffer if there's space memcpy(_audioSampleArray + _indexOfNextSlot, sampleBuffer, numSamples * sizeof(int16_t)); - printf("Copied %d samples to the buffer\n", numSamples); _indexOfNextSlot += numSamples; } } diff --git a/libraries/shared/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h similarity index 100% rename from libraries/shared/src/AudioInjector.h rename to libraries/audio/src/AudioInjector.h diff --git a/libraries/shared/src/AudioRingBuffer.cpp b/libraries/audio/src/AudioRingBuffer.cpp similarity index 100% rename from libraries/shared/src/AudioRingBuffer.cpp rename to libraries/audio/src/AudioRingBuffer.cpp diff --git a/libraries/shared/src/AudioRingBuffer.h b/libraries/audio/src/AudioRingBuffer.h similarity index 100% rename from libraries/shared/src/AudioRingBuffer.h rename to libraries/audio/src/AudioRingBuffer.h diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index bd07c66ee6..118dd53a1f 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -15,7 +15,7 @@ #include #include "AvatarData.h" -//#include +#include using namespace std; @@ -309,8 +309,7 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { } glm::vec3 AvatarData::calculateCameraDirection() const { -// glm::vec3 direction = glm::vec3(_cameraOrientation * glm::vec4(IDENTITY_FRONT, 0.0f)); - glm::vec3 direction; + glm::vec3 direction = glm::vec3(_cameraOrientation * glm::vec4(IDENTITY_FRONT, 0.0f)); return direction; } diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index d0e1b8e566..0a7da717c9 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -116,10 +116,8 @@ void NodeList::processNodeData(sockaddr* senderAddress, unsigned char* packetDat sockaddr_in domainServerSocket = *(sockaddr_in*) senderAddress; const char* domainSenderIP = inet_ntoa(domainServerSocket.sin_addr); - processDomainServerList(packetData, dataBytes); - if (memcmp(domainSenderIP, _domainIP, strlen(domainSenderIP)) == 0) { - + processDomainServerList(packetData, dataBytes); } break; From 0120ac2d0f0b7466edac8f77cbd33e07bd79588e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 10:09:00 -0700 Subject: [PATCH 46/56] remove an extra debug --- libraries/avatars/src/AvatarData.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 118dd53a1f..75d88525bf 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -63,8 +63,6 @@ void AvatarData::sendData() { int numPacketBytes = (endOfPacket - packet) + getBroadcastData(endOfPacket); - qDebug("The current body yaw is %f\n", _bodyYaw); - NodeList::getInstance()->getNodeSocket()->send(avatarMixer->getActiveSocket(), packet, numPacketBytes); } } From cddbf851727d457351c457b01f5867e1fd764e43 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 10:13:25 -0700 Subject: [PATCH 47/56] don't include AudioInjector in Agent class --- libraries/avatars/src/Agent.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/libraries/avatars/src/Agent.h b/libraries/avatars/src/Agent.h index e7e53467fa..e083abb541 100644 --- a/libraries/avatars/src/Agent.h +++ b/libraries/avatars/src/Agent.h @@ -9,8 +9,6 @@ #ifndef __hifi__Agent__ #define __hifi__Agent__ -#import "AudioInjector.h" - #include #include From cc9e4eaf458578e6b9983aaacf7e79cd3921323e Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 5 Aug 2013 10:24:52 -0700 Subject: [PATCH 48/56] CR feedback --- interface/src/Application.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 23500d8f42..06c5e08ed6 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1734,7 +1734,7 @@ void Application::importVoxels() { // Where we plan to place this int columnNum = 1; int rowNum = 1; - bool tileLocationUnspecified = false; + bool isTileLocationUnspecified = false; // If we're in multi-file mode, then look for tiling specification in the file name if (fileNameStringList.size() > 1) { @@ -1745,7 +1745,7 @@ void Application::importVoxels() { // If the first period, is the extension, then this is not a grid name; if (fileNameString.mid(indexOfFirstPeriod, fileNameString.length() - indexOfFirstPeriod) == extension) { qDebug("not a valid grid name... treat like tile Location Unspecified\n"); - tileLocationUnspecified = true; + isTileLocationUnspecified = true; } else { QString fileCoord = fileNameString.mid(indexOfFirstPeriod + 1, fileNameString.length() - indexOfFirstPeriod - fileTypeNameLength - 1); @@ -1767,13 +1767,13 @@ void Application::importVoxels() { // If there are no "grid sections" in the filename, then we're going to get if (columnNum < 1 || rowNum < 1) { qDebug("not a valid grid name... treat like tile Location Unspecified\n"); - tileLocationUnspecified = true; + isTileLocationUnspecified = true; } } } - if (tileLocationUnspecified) { - qDebug("tileLocationUnspecified... \n"); + if (isTileLocationUnspecified) { + qDebug("tile Location is Unspecified... \n"); columnNum = unspecifiedColumnNum; rowNum = unspecifiedRowNum; From 553c8088dda150d5324beba85f3eac801a4565f6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 10:27:06 -0700 Subject: [PATCH 49/56] fix include from AudioInjector.h --- libraries/audio/src/AudioInjector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index fcd400ccbb..b102d58e19 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -12,7 +12,7 @@ #include #include -#include "UDPSocket.h" +#include #include "AudioRingBuffer.h" From 1f8031770bcc2beb775aee14dc7e4bddfe130686 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 10:28:12 -0700 Subject: [PATCH 50/56] fix quoted includes in AudioInjector.cpp --- libraries/audio/src/AudioInjector.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 06d8b53b25..b9a6d8a0ba 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -10,8 +10,8 @@ #include #include -#include "PacketHeaders.h" -#include "SharedUtil.h" +#include +#include #include "AudioInjector.h" From d51e0b59bd44b9ec45238ec3cab37e7f6f43875c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 10:30:56 -0700 Subject: [PATCH 51/56] change DATA_SEND_INTERVAL_MSECS to DATA_SEND_INTERVAL_USECS --- libraries/avatars/src/Agent.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/avatars/src/Agent.cpp b/libraries/avatars/src/Agent.cpp index af1ac69b74..f027bc1f55 100644 --- a/libraries/avatars/src/Agent.cpp +++ b/libraries/avatars/src/Agent.cpp @@ -55,7 +55,7 @@ void Agent::run(QUrl scriptURL) { timeval lastDomainServerCheckIn = {}; int numMicrosecondsSleep = 0; - const float DATA_SEND_INTERVAL_MSECS = (1 / 60) * 1000; + const float DATA_SEND_INTERVAL_USECS = (1 / 60) * 1000 * 1000; sockaddr_in senderAddress; unsigned char receivedData[MAX_PACKET_SIZE]; @@ -80,7 +80,7 @@ void Agent::run(QUrl scriptURL) { } // sleep for the correct amount of time to have data send be consistently timed - if ((numMicrosecondsSleep = (DATA_SEND_INTERVAL_MSECS * 1000) - (usecTimestampNow() - usecTimestamp(&thisSend))) > 0) { + if ((numMicrosecondsSleep = DATA_SEND_INTERVAL_USECS - (usecTimestampNow() - usecTimestamp(&thisSend))) > 0) { usleep(numMicrosecondsSleep); } } From 1ee870be38fc651e25610464829381550504a498 Mon Sep 17 00:00:00 2001 From: atlante45 Date: Mon, 5 Aug 2013 10:29:25 -0700 Subject: [PATCH 52/56] Fix pie menu appearing in selection mode --- interface/src/Application.cpp | 3 ++- interface/src/ToolsPalette.cpp | 9 +++++++++ interface/src/ToolsPalette.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6087a4493e..fa347a3265 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -941,8 +941,9 @@ void Application::mousePressEvent(QMouseEvent* event) { _mouseVoxelDragging = _mouseVoxel; _mousePressed = true; + maybeEditVoxelUnderCursor(); - if (!maybeEditVoxelUnderCursor()) { + if (!_palette.isActive()) { _pieMenu.mousePressEvent(_mouseX, _mouseY); } diff --git a/interface/src/ToolsPalette.cpp b/interface/src/ToolsPalette.cpp index 341a128f8a..58ec12dc92 100644 --- a/interface/src/ToolsPalette.cpp +++ b/interface/src/ToolsPalette.cpp @@ -77,3 +77,12 @@ void ToolsPalette::render(int screenWidth, int screenHeight) { glPopMatrix(); } + +bool ToolsPalette::isActive() { + for (unsigned int i = 0; i < _tools.size(); ++i) { + if (_tools[i]->isActive()) { + return true; + } + } + return false; +} diff --git a/interface/src/ToolsPalette.h b/interface/src/ToolsPalette.h index 0b4ee95524..b6d446f51d 100644 --- a/interface/src/ToolsPalette.h +++ b/interface/src/ToolsPalette.h @@ -20,6 +20,8 @@ public: void addTool(Tool* tool); void render(int screenWidth, int screenHeight); + bool isActive(); + private: QImage _textureImage; GLuint _textureID; From 45d84add0557120f32c4bf4d9be1e04c066bb700 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 10:37:23 -0700 Subject: [PATCH 53/56] cleanup from code review comments --- assignment-server/src/main.cpp | 1 - libraries/shared/src/Node.cpp | 2 -- libraries/shared/src/NodeList.cpp | 1 - libraries/shared/src/NodeTypes.h | 1 - libraries/shared/src/PacketHeaders.h | 2 ++ 5 files changed, 2 insertions(+), 5 deletions(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index 90f91a6c10..09c29b1582 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -14,7 +14,6 @@ #include #include -const int ASSIGNMENT_SERVER_LISTEN_PORT = 7007; const int MAX_PACKET_SIZE_BYTES = 1400; struct Assignment {}; diff --git a/libraries/shared/src/Node.cpp b/libraries/shared/src/Node.cpp index c91626d99d..7aebb0c022 100644 --- a/libraries/shared/src/Node.cpp +++ b/libraries/shared/src/Node.cpp @@ -94,8 +94,6 @@ const char* Node::getTypeName() const { return NODE_TYPE_NAME_AUDIO_INJECTOR; case NODE_TYPE_ANIMATION_SERVER: return NODE_TYPE_NAME_ANIMATION_SERVER; - case NODE_TYPE_UNASSIGNED: - return NODE_TYPE_NAME_UNASSIGNED; default: return NODE_TYPE_NAME_UNKNOWN; } diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index 0a7da717c9..2dfd537d93 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -368,7 +368,6 @@ int NodeList::processDomainServerList(unsigned char* packetData, size_t dataByte void NodeList::sendAssignmentRequest() { const char ASSIGNMENT_SERVER_HOSTNAME[] = "assignment.highfidelity.io"; - const unsigned short ASSIGNMENT_SERVER_PORT = 7007; static sockaddr_in assignmentServerSocket = socketForHostname(ASSIGNMENT_SERVER_HOSTNAME); assignmentServerSocket.sin_port = htons(ASSIGNMENT_SERVER_PORT); diff --git a/libraries/shared/src/NodeTypes.h b/libraries/shared/src/NodeTypes.h index a9deebf333..aa4ae51ec5 100644 --- a/libraries/shared/src/NodeTypes.h +++ b/libraries/shared/src/NodeTypes.h @@ -24,6 +24,5 @@ const NODE_TYPE NODE_TYPE_AUDIO_MIXER = 'M'; const NODE_TYPE NODE_TYPE_AVATAR_MIXER = 'W'; const NODE_TYPE NODE_TYPE_AUDIO_INJECTOR = 'A'; const NODE_TYPE NODE_TYPE_ANIMATION_SERVER = 'a'; -const NODE_TYPE NODE_TYPE_UNASSIGNED = 1; #endif diff --git a/libraries/shared/src/PacketHeaders.h b/libraries/shared/src/PacketHeaders.h index 24d755652c..2b021db82c 100644 --- a/libraries/shared/src/PacketHeaders.h +++ b/libraries/shared/src/PacketHeaders.h @@ -54,4 +54,6 @@ const int MAX_PACKET_HEADER_BYTES = sizeof(PACKET_TYPE) + sizeof(PACKET_VERSION) #define ADD_SCENE_COMMAND "add scene" #define TEST_COMMAND "a message" +const int ASSIGNMENT_SERVER_PORT = 7007; + #endif From bba8cf86cc7da1a9f5617ae08fa26c7b392cf72e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 10:52:53 -0700 Subject: [PATCH 54/56] correct reference to ASSIGNMENT_SERVER_PORT --- assignment-server/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index 09c29b1582..6cf7ddc952 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -26,7 +26,7 @@ int main(int argc, const char* argv[]) { unsigned char senderData[MAX_PACKET_SIZE_BYTES] = {}; ssize_t receivedBytes = 0; - UDPSocket serverSocket(ASSIGNMENT_SERVER_LISTEN_PORT); + UDPSocket serverSocket(ASSIGNMENT_SERVER_PORT); int numHeaderBytes = numBytesForPacketHeader((unsigned char*) &PACKET_TYPE_SEND_ASSIGNMENT); unsigned char assignmentPacket[numHeaderBytes + sizeof(char)]; From bdabe709af4c98592d9e61f6637dd59e5e50835f Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 5 Aug 2013 11:11:10 -0700 Subject: [PATCH 55/56] added more color groups for false colorization from source --- interface/src/VoxelSystem.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index fbc6760665..0ff8a38f8a 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -860,12 +860,16 @@ bool VoxelSystem::falseColorizeBySourceOperation(VoxelNode* node, void* extraDat void VoxelSystem::falseColorizeBySource() { _nodeCount = 0; colorizeBySourceArgs args; - const int NUMBER_OF_COLOR_GROUPS = 3; + const int NUMBER_OF_COLOR_GROUPS = 6; const unsigned char MIN_COLOR = 128; int voxelServerCount = 0; - groupColor groupColors[NUMBER_OF_COLOR_GROUPS] = { groupColor(255, 0, 0), - groupColor(0, 255, 0), - groupColor(0, 0, 255)}; + groupColor groupColors[NUMBER_OF_COLOR_GROUPS] = { groupColor(255, 0, 0), + groupColor( 0, 255, 0), + groupColor( 0, 0, 255), + groupColor(255, 0, 255), + groupColor( 0, 255, 255), + groupColor(255, 255, 255) + }; // create a bunch of colors we'll use during colorization NodeList* nodeList = NodeList::getInstance(); From 92f6fe6bd8f9e1300aba2b81714bf0ff286b0f1d Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 5 Aug 2013 11:14:30 -0700 Subject: [PATCH 56/56] CR feedback --- interface/src/VoxelSystem.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index 0ff8a38f8a..65d819eddc 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -863,14 +863,15 @@ void VoxelSystem::falseColorizeBySource() { const int NUMBER_OF_COLOR_GROUPS = 6; const unsigned char MIN_COLOR = 128; int voxelServerCount = 0; - groupColor groupColors[NUMBER_OF_COLOR_GROUPS] = { groupColor(255, 0, 0), - groupColor( 0, 255, 0), - groupColor( 0, 0, 255), - groupColor(255, 0, 255), - groupColor( 0, 255, 255), - groupColor(255, 255, 255) - }; - + groupColor groupColors[NUMBER_OF_COLOR_GROUPS] = { + groupColor(255, 0, 0), + groupColor( 0, 255, 0), + groupColor( 0, 0, 255), + groupColor(255, 0, 255), + groupColor( 0, 255, 255), + groupColor(255, 255, 255) + }; + // create a bunch of colors we'll use during colorization NodeList* nodeList = NodeList::getInstance(); for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) {