From 2b62adce6c2e3b6796357f39f0238d036218faeb Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Wed, 21 Nov 2012 12:08:30 -0800 Subject: [PATCH] Added vector renderer util, broadcast packets now reaching agents --- agent.cpp | 11 ++++- agent.h | 1 + interface.xcodeproj/project.pbxproj | 1 + .../UserInterfaceState.xcuserstate | Bin 103122 -> 103502 bytes main.cpp | 26 ++++++++++-- util.cpp | 38 ++++++++++++++++++ util.h | 1 + 7 files changed, 73 insertions(+), 5 deletions(-) diff --git a/agent.cpp b/agent.cpp index f0f3fe9bc9..63aef1c6b4 100644 --- a/agent.cpp +++ b/agent.cpp @@ -18,7 +18,9 @@ struct AgentList { } agents[MAX_AGENTS]; int num_agents = 0; -// Process an incoming packet that lists the other agents in the area +// +// Process an incoming spaceserver packet telling you about other nearby agents +// void update_agents(char * data, int length) { std::string packet(data, length); //std::string packet("127.0.0.1,"); @@ -39,6 +41,9 @@ void update_agents(char * data, int length) { } } +// +// Look for an agent by it's IP number, add if it does not exist in local list +// int add_agent(std::string * IP) { in_addr_t addr = inet_addr(IP->c_str()); //std::cout << "Checking for " << IP->c_str() << " "; @@ -55,12 +60,14 @@ int add_agent(std::string * IP) { num_agents++; return 1; } else { - std::cout << "Max agents reached!\n"; + std::cout << "Max agents reached fail!\n"; return 0; } } +// // Broadcast data to all the other agents you are aware of, returns 1 for success +// int broadcast(int handle, char * data, int length) { sockaddr_in dest_address; dest_address.sin_family = AF_INET; diff --git a/agent.h b/agent.h index 896b76923f..ec3f42028b 100644 --- a/agent.h +++ b/agent.h @@ -19,5 +19,6 @@ void update_agents(char * data, int length); int add_agent(std::string * IP); +int broadcast(int handle, char * data, int length); #endif diff --git a/interface.xcodeproj/project.pbxproj b/interface.xcodeproj/project.pbxproj index 18a6cffacf..8930389ea0 100644 --- a/interface.xcodeproj/project.pbxproj +++ b/interface.xcodeproj/project.pbxproj @@ -235,6 +235,7 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 0430; + ORGANIZATIONNAME = "Rosedale Lab"; }; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "interface" */; compatibilityVersion = "Xcode 3.2"; diff --git a/interface.xcodeproj/project.xcworkspace/xcuserdata/philip.xcuserdatad/UserInterfaceState.xcuserstate b/interface.xcodeproj/project.xcworkspace/xcuserdata/philip.xcuserdatad/UserInterfaceState.xcuserstate index 13077bb321daeb9cbaa5b117160f46a4a44ffeb5..99d39951b83814b04efb34739c4a0c3e86806a6d 100644 GIT binary patch delta 26756 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≷OWIBEpC( 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 delta 26572 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, vec->y, vec->z); + // Draw marker dots for magnitude + glEnd(); + float particle_attenuation_quadratic[] = { 0.0f, 0.0f, 2.0f }; // larger Z = smaller particles + glPointParameterfvARB( GL_POINT_DISTANCE_ATTENUATION_ARB, particle_attenuation_quadratic ); + glEnable(GL_POINT_SMOOTH); + glPointSize(10.0); + glBegin(GL_POINTS); + glColor3f(1,0,0); + glVertex3f(vec->x,0,0); + glColor3f(0,1,0); + glVertex3f(0,vec->y,0); + glColor3f(0,0,1); + glVertex3f(0,0,vec->z); + glEnd(); + +} + void render_world_box() { // Show edge of world diff --git a/util.h b/util.h index 2eac21117b..637248b761 100644 --- a/util.h +++ b/util.h @@ -13,6 +13,7 @@ void outstring(char * string, int length); float randFloat(); void render_world_box(); +void render_vector(glm::vec3 * vec); void drawtext(int x, int y, float scale, float rotate, float thick, int mono, char *string, float r=1.0, float g=1.0, float b=1.0); void drawvec3(int x, int y, float scale, float rotate, float thick, int mono, glm::vec3 vec,