From 1c03d5822a7b36aeed2da01257bf705e2654614d Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Wed, 12 Dec 2012 09:54:13 -0800 Subject: [PATCH] Adding networking to send agent head rotations --- agent.cpp | 33 ++- agent.h | 4 +- cloud.cpp | 3 +- head.cpp | 206 +++++++++--------- head.h | 11 +- interface.xcodeproj/project.pbxproj | 4 +- .../UserInterfaceState.xcuserstate | Bin 104649 -> 76530 bytes main.cpp | 36 ++- network.cpp | 5 +- network.h | 4 +- 10 files changed, 172 insertions(+), 134 deletions(-) diff --git a/agent.cpp b/agent.cpp index 63aef1c6b4..093d06832a 100644 --- a/agent.cpp +++ b/agent.cpp @@ -8,13 +8,14 @@ #include #include "agent.h" +#include "head.h" // Structure to hold references to other agents that are nearby const int MAX_AGENTS = 100; struct AgentList { in_addr sin_addr; - glm::vec3 position; + Head head; } agents[MAX_AGENTS]; int num_agents = 0; @@ -23,8 +24,7 @@ int num_agents = 0; // void update_agents(char * data, int length) { std::string packet(data, length); - //std::string packet("127.0.0.1,"); - //std::cout << " Update Agents, string: " << packet << "\n"; + std::cout << " Update Agents, string: " << packet << "\n"; size_t spot; size_t start_spot = 0; spot = packet.find_first_of (",", 0); @@ -41,6 +41,29 @@ void update_agents(char * data, int length) { } } +void render_agents() { + for (int i = 0; i < num_agents; i++) { + glm::vec3 pos = agents[i].head.getPos(); + glPushMatrix(); + glTranslatef(pos.x, pos.y, pos.z); + agents[i].head.render(); + glPopMatrix(); + } +} + +// +// Update a single agent with data received from that agent's IP address +// +void update_agent(in_addr addr, char * data, int length) +{ + std::cout << "Looking for agent: " << inet_ntoa(addr) << "\n"; + for (int i = 0; i < num_agents; i++) { + if (agents[i].sin_addr.s_addr == addr.s_addr) { + std::cout << "Updating agent with: " << data << "\n"; + } + } +} + // // Look for an agent by it's IP number, add if it does not exist in local list // @@ -68,7 +91,7 @@ int add_agent(std::string * IP) { // // Broadcast data to all the other agents you are aware of, returns 1 for success // -int broadcast(int handle, char * data, int length) { +int broadcast_to_agents(int handle, char * data, int length) { sockaddr_in dest_address; dest_address.sin_family = AF_INET; dest_address.sin_port = htons( (unsigned short) UDP_PORT ); @@ -81,7 +104,7 @@ int broadcast(int handle, char * data, int length) { if (sent_bytes != length) { std::cout << "Broadcast packet fail!\n"; return 0; - } + } else std::cout << "Broadcasted Packet: " << data << "\n"; } return 1; } diff --git a/agent.h b/agent.h index ec3f42028b..596428cca1 100644 --- a/agent.h +++ b/agent.h @@ -19,6 +19,8 @@ void update_agents(char * data, int length); int add_agent(std::string * IP); -int broadcast(int handle, char * data, int length); +int broadcast_to_agents(int handle, char * data, int length); +void update_agent(in_addr addr, char * data, int length); +void render_agents(); #endif diff --git a/cloud.cpp b/cloud.cpp index 5e3a6ddd91..a0057d013d 100644 --- a/cloud.cpp +++ b/cloud.cpp @@ -90,7 +90,8 @@ void Cloud::simulate (float deltaTime) { field_interact(deltaTime, &particles[i].position, &particles[i].velocity, &particles[i].color, FIELD_COUPLE); // Update color to velocity - particles[i].color = glm::normalize(particles[i].velocity); + particles[i].color = (glm::normalize(particles[i].velocity)*0.5f); + particles[i].color += 0.5f; // Bounce or Wrap diff --git a/head.cpp b/head.cpp index 46dd25028b..12bfa66a97 100644 --- a/head.cpp +++ b/head.cpp @@ -28,6 +28,7 @@ const float DECAY = 0.1; Head::Head() { + position.x = position.y = position.z = 0; PupilSize = 0.10; interPupilDistance = 0.6; interBrowDistance = 0.75; @@ -52,7 +53,6 @@ Head::Head() void Head::reset() { - position = glm::vec3(0,0,0); Pitch = Yaw = Roll = 0; leanForward = leanSideways = 0; } @@ -167,123 +167,121 @@ void Head::render() int side = 0; glEnable(GL_DEPTH_TEST); + glTranslatef(leanSideways, 0.f, leanForward); + + glRotatef(Yaw/2.0, 0, 1, 0); + glRotatef(Pitch/2.0, 1, 0, 0); + glRotatef(Roll/2.0, 0, 0, 1); + + + // Overall scale of head + glScalef(1.5, 2.0, 2.0); + glColor3fv(skinColor); + + // Head + glutSolidSphere(1, 30, 30); + + // Ears glPushMatrix(); - glLoadIdentity(); - glTranslatef(0.f, 0.f, -7.f); - glTranslatef(leanSideways, 0.f, leanForward); - - glRotatef(Yaw/2.0, 0, 1, 0); - glRotatef(Pitch/2.0, 1, 0, 0); - glRotatef(Roll/2.0, 0, 0, 1); - - - // Overall scale of head - glScalef(1.5, 2.0, 2.0); - glColor3fv(skinColor); - - // Head - glutSolidSphere(1, 30, 30); - - // Ears - glPushMatrix(); - glTranslatef(1, 0, 0); - for(side = 0; side < 2; side++) - { - glPushMatrix(); - glScalef(0.5, 0.75, 1.0); - glutSolidSphere(0.5, 30, 30); - glPopMatrix(); - glTranslatef(-2, 0, 0); - } - glPopMatrix(); - - - // Eyebrows - glPushMatrix(); - glTranslatef(-interBrowDistance/2.0,0.4,0.45); - for(side = 0; side < 2; side++) - { - glColor3fv(browColor); - glPushMatrix(); - glTranslatef(0, 0.4, 0); - glRotatef(EyebrowPitch[side]/2.0, 1, 0, 0); - glRotatef(EyebrowRoll[side]/2.0, 0, 0, 1); - glScalef(browWidth, browThickness, 1); - glutSolidCube(0.5); - glPopMatrix(); - glTranslatef(interBrowDistance, 0, 0); - } - glPopMatrix(); - - - // Mouth - glPushMatrix(); - glTranslatef(0,-0.3,0.75); - glColor3fv(mouthColor); - glRotatef(MouthPitch, 1, 0, 0); - glRotatef(MouthYaw, 0, 0, 1); - glScalef(MouthWidth, MouthHeight, 1); - glutSolidCube(0.5); - glPopMatrix(); - - glTranslatef(0, 1.0, 0); - - - glTranslatef(-interPupilDistance/2.0,-0.68,0.7); - // Right Eye - glRotatef(-10, 1, 0, 0); - glColor3fv(eyeColor); - glPushMatrix(); + glTranslatef(1, 0, 0); + for(side = 0; side < 2; side++) { - glTranslatef(interPupilDistance/10.0, 0, 0.05); - glRotatef(20, 0, 0, 1); - glScalef(EyeballScaleX, EyeballScaleY, EyeballScaleZ); - glutSolidSphere(0.25, 30, 30); + glPushMatrix(); + glScalef(0.5, 0.75, 1.0); + glutSolidSphere(0.5, 30, 30); + glPopMatrix(); + glTranslatef(-2, 0, 0); } - glPopMatrix(); - // Right Pupil - glPushMatrix(); - glRotatef(EyeballPitch[1], 1, 0, 0); - glRotatef(EyeballYaw[1] + PupilConverge, 0, 1, 0); - glTranslatef(0,0,.25); - glColor3f(0,0,0); - glutSolidSphere(PupilSize, 15, 15); - glPopMatrix(); - // Left Eye - glColor3fv(eyeColor); - glTranslatef(interPupilDistance, 0, 0); - glPushMatrix(); - { - glTranslatef(-interPupilDistance/10.0, 0, .05); - glRotatef(-20, 0, 0, 1); - glScalef(EyeballScaleX, EyeballScaleY, EyeballScaleZ); - glutSolidSphere(0.25, 30, 30); - } - glPopMatrix(); - // Left Pupil - glPushMatrix(); - glRotatef(EyeballPitch[0], 1, 0, 0); - glRotatef(EyeballYaw[0] - PupilConverge, 0, 1, 0); - glTranslatef(0,0,.25); - glColor3f(0,0,0); - glutSolidSphere(PupilSize, 15, 15); - glPopMatrix(); - - glPopMatrix(); -} + + // Eyebrows + glPushMatrix(); + glTranslatef(-interBrowDistance/2.0,0.4,0.45); + for(side = 0; side < 2; side++) + { + glColor3fv(browColor); + glPushMatrix(); + glTranslatef(0, 0.4, 0); + glRotatef(EyebrowPitch[side]/2.0, 1, 0, 0); + glRotatef(EyebrowRoll[side]/2.0, 0, 0, 1); + glScalef(browWidth, browThickness, 1); + glutSolidCube(0.5); + glPopMatrix(); + glTranslatef(interBrowDistance, 0, 0); + } + glPopMatrix(); + + + // Mouth + glPushMatrix(); + glTranslatef(0,-0.3,0.75); + glColor3fv(mouthColor); + glRotatef(MouthPitch, 1, 0, 0); + glRotatef(MouthYaw, 0, 0, 1); + glScalef(MouthWidth, MouthHeight, 1); + glutSolidCube(0.5); + glPopMatrix(); + + glTranslatef(0, 1.0, 0); + + + glTranslatef(-interPupilDistance/2.0,-0.68,0.7); + // Right Eye + glRotatef(-10, 1, 0, 0); + glColor3fv(eyeColor); + glPushMatrix(); + { + glTranslatef(interPupilDistance/10.0, 0, 0.05); + glRotatef(20, 0, 0, 1); + glScalef(EyeballScaleX, EyeballScaleY, EyeballScaleZ); + glutSolidSphere(0.25, 30, 30); + } + glPopMatrix(); + // Right Pupil + glPushMatrix(); + glRotatef(EyeballPitch[1], 1, 0, 0); + glRotatef(EyeballYaw[1] + PupilConverge, 0, 1, 0); + glTranslatef(0,0,.25); + glColor3f(0,0,0); + glutSolidSphere(PupilSize, 15, 15); + glPopMatrix(); + // Left Eye + glColor3fv(eyeColor); + glTranslatef(interPupilDistance, 0, 0); + glPushMatrix(); + { + glTranslatef(-interPupilDistance/10.0, 0, .05); + glRotatef(-20, 0, 0, 1); + glScalef(EyeballScaleX, EyeballScaleY, EyeballScaleZ); + glutSolidSphere(0.25, 30, 30); + } + glPopMatrix(); + // Left Pupil + glPushMatrix(); + glRotatef(EyeballPitch[0], 1, 0, 0); + glRotatef(EyeballYaw[0] - PupilConverge, 0, 1, 0); + glTranslatef(0,0,.25); + glColor3f(0,0,0); + glutSolidSphere(PupilSize, 15, 15); + glPopMatrix(); + } // Transmit data to agents requesting it -int Head::transmit(char* data) +int Head::getBroadcastData(char* data) { // Copy data for transmission to the buffer, return length of data - sprintf(data, "%f6.2", Pitch); + sprintf(data, "H%f,%f,%f,%f,%f,%f", Pitch, Yaw, Roll, position.x, position.y, position.z); return strlen(data); } +void Head::recvBroadcastData(char * data, int size) +{ + sscanf(data, "H%f,%f,%f,%f,%f,%f", &Pitch, &Yaw, &Roll, &position.x, &position.y, &position.z); +} + void Head::SetNewHeadTarget(float pitch, float yaw) { PitchTarget = pitch; diff --git a/head.h b/head.h index b0182cd498..f3938fc396 100644 --- a/head.h +++ b/head.h @@ -58,16 +58,19 @@ public: void setNoise (float mag) { noise = mag; } void setPitch(float p) {Pitch = p; } void setYaw(float y) {Yaw = y; } - void SetRoll(float r) {Roll = r; }; + void setRoll(float r) {Roll = r; }; void addPitch(float p) {Pitch -= p; } void addYaw(float y){Yaw -= y; } void addRoll(float r){Roll += r; } void addLean(float x, float z); - void getPitch(float); + float getPitch() {return Pitch;} + float getRoll() {return Roll;} + float getYaw() {return Yaw;} void render(); void simulate(float); - int transmit(char*); - void receive(float); + // Send and receive network data + int getBroadcastData(char* data); + void recvBroadcastData(char * data, int size); void SetNewHeadTarget(float, float); glm::vec3 getPos() { return position; }; void setPos(glm::vec3 newpos) { position = newpos; }; diff --git a/interface.xcodeproj/project.pbxproj b/interface.xcodeproj/project.pbxproj index 4a2816dfcd..d6e73ccf53 100644 --- a/interface.xcodeproj/project.pbxproj +++ b/interface.xcodeproj/project.pbxproj @@ -302,7 +302,7 @@ "$(OTHER_CFLAGS)", ); PRODUCT_NAME = interface; - SDKROOT = macosx10.7; + SDKROOT = macosx; }; name = Debug; }; @@ -327,7 +327,7 @@ "$(OTHER_CFLAGS)", ); PRODUCT_NAME = interface; - SDKROOT = macosx10.7; + SDKROOT = macosx; }; name = Release; }; diff --git a/interface.xcodeproj/project.xcworkspace/xcuserdata/philip.xcuserdatad/UserInterfaceState.xcuserstate b/interface.xcodeproj/project.xcworkspace/xcuserdata/philip.xcuserdatad/UserInterfaceState.xcuserstate index 752de4bf0043e4b1c6967cc4d4c515c7947f5a6f..ddda5ce8a0d2fa0e0c02813fdf7f72dd3a346f74 100644 GIT binary patch delta 26961 zcmZ@<2Y3@lx7D^_N!xej-Wy1^+5^VEEA9bMKimGk5Op&d5hMe)04iK1YEoY84~r+H^vR z3md!M!;n{-)c9mX*H@M(>nBT+CCmEDhR9N7S+YXeFxhaKMpiDXkk!cQWMgFYvWc=u zvdOY3vKg}1vbVAia!me(TqdXFoLrP!%kAV&a#y*hTq#$}{p3ONP+)OjU*x~ZAIhJ|U&vp} z-^xFb82JS$BPo(2MbetIBb`WB(vwt@YSNDkB16eYvNPF*j3*PwK4cP^Lh1&SX=EWe zj2upCNG(}J7Ly~$5^^+IM~)%u$+4u4)RTamNzNi?lXJ)xauKHhG79LOvy*kPsb3{iq}=nd(oaP}x)tl}nAF zN~lt*jv7PNQ)4L|rKbQjj+#Zyrshy{sRjyC^Qie$E47STPOYalP#dXlsJ+xaYCm;= z`j+~RI!GO&PEn_+Gt@Oocb&RH-K1_&x2ZeSUFs?IjCxMJpb;9SF&d{?nxlDIpq*%E z+J$zd-Dr2(gZ88Y=s-G%4yNPiE_7GAADu)e)BWizI-Aa+bLkOu30+E;(PQX(dMrJS zo=(r8XVQ&y6WvU=(5vY+^jdlyy^Y>Z@6gdZ>BIE*^bz_feU3g)|3v>x-=^=-cj;f~ zXY_OW1^tpi8H~Xhg5emR5g3tiW?UFo#*Oi1{1|^Gfa%P{FtJP=)0atP`Z4KD29wET zFdY#N)+X0thLK3l*RvBhjDTg}$6quFunWOh0`N5?K; zo7ko7a&`^-6}ySu%I;?OvxnKE>o-em8x57;N{3-%B81BY=^j^PxX4d=wU za-BFO=gS3iAzTC(%XQ@vxV~Hpm&&Da>0BO{&lPZm+%T@3tKcfRDz1*3$W7uVb5ppf z+%#@FH=kR;=?vULZW*_nYvWdN+qmuA4sIv6i`&iZ=f2|(a)-FX-2b@C+;#2-cZa*n z{l?wr9&wMk=iCeK9rvF5z)N_9m+~@R&I`QAD|k!Zk$2*q`A)o&SMdRSARojB^C5g^ zK8BCw3rKR=L9~8M`-!>YP%%%;7YoEfahNz<)QH7mnOGs#iX+8Y;%sq_I9F^C zp*T;RFD?)b;zF@mTp}(LSBR^{b>bFrtGJDQEN&MMiigC*;`iba@wj+GJR_bJFN#;i z$70_n;#2XN_*{G;z7$`Huf_M`2L++{LP08cg`lueI4P70mBLREr0A@OQN$|Z6g?EZ z6@3)_6+;v`id@A|g;r6dC{|P{sueY`k%~p}H}Dd*&0q}zWKLqgm0E+=w z%%*8{5@La#0Jt~6`)<0)9JFX~bA*|lHg6hfbN1us-J3k!KHzo;i_VvL8h_A6eUkpD zKE?F&ziieOZX7Pa9M{qC^&cj(xmlQ{rk0rCu>TVVF$TU3W&edK!f zK!=bHp&i0D1!=}07(kwH+NzC3rKcrQNugv|hd zeNhVnma03V78dZ-2v2x&gf(PJ7=(sSB>@NrZG2Ryg$T!%bV97)?zTYG!WKSh>w{W2 zz?c=msD(4kEsa6kU~8!w@q{Nz0}v(r;HyS0yrF+tIN}TSEB#Q50Jx~k9SMfWDtmaf zjDiQs9H7H0vV%pW-X@#1gK_>=(AQs%T6Bgn<-tfCoVH4hT6BZ0{@$oX4|u{q0JZ1^ zeJX6Ba|H#73Oks&nnW##O}yiwyX_A^^#T{*|7{ zP^b^|LoEv6k~QwA#c;TxvJ+ASk)VzpEJ}<5?4f^^4Ro%OBjqq|ZAa9i3f2dyP>Wg! zs@##$@OY3vYEci7U@z1{4}F4_sKt2bUmb)@g0q61P>ZQ>eQ+3RF#{f`_C{vIht=Ll z1N8gS6}6ZTV`>7Cg|Ioq1+{2~dqbR2i^cGIh#P9r3a``zAZ?JXbwgIcj8GM7u@>gk z`XFDy*|lEC26*x-H`HPiyk6@GuhkMTFieSB?0{Ke9;n4`m^so5*#|d<`J)!!!c$*+ zqZWtYhp&~W#Ss`C9*SBVgNdVjkmIm^lnOZoPlkJ<7H8qfQIW_`&}D-!YH<;s9AyXf z5l*PZ71$c#i&|WV`!;x^7PlHA15k^*&}CyFYH<(7)p;Nf;Ot00)Z!65V1%B+AM1jV z7tkw8iCVmd*P}&f>+XbF{0XN=`J)!^;oc}8REofdQNE}YhfdL6sI&v@6WtTK)?320 z(Ltz`g4d%1Q7H?5ulGg-=)2hqm0H5m&hDtx296l(j@ZMUo&8X$6V&N!pl-_-P#z;k zrLOSt*Z{->ChMG_Him*OIu}@`qY*Et(|I92aQ_xHD)ontw)91%K`=RX04fcIr+PR+ zeK$*ZIaYy6BjEL|15s%-eB9k=Rlrhr1uBh&NqfzgAM{eVZ<{SD?Fz4N4T8*e7gXB) zGdik^8!AnJ$+3Qr-G;+`+nrHqA9!PX3@Yshx#MOEO;-_>_J?y*&6i7eSfSE^P~XdR z+0czer9&_miG#5VZu7;|3dsLbaohSA{hQZdIPB3Q@1NX+; zpi(W|II$1hFp+@qlRV({gfHOri3CjRPNC8=7&oa4QVHKDsNsd~3RGGHA9qjaART2) z?NGR}dnXt>*$Np0^*#EbQXM?iqZcY22lc&_P~Te)JMU#t=|q^ccQ7iQ0`)!A@Lo?> z*f1p!c200arL$ntUNxMaphBf{8&aL%$%!o7JJkxA2j3@jL8S)hyFUt*HbH%_Zm4t- zWRsns^8pSXpXPupg~)+8RJz<`eB46;r}wr-r7Pj%?m_TEZv`q{10VNJK&4;88{3`W z;~q4OogpCW;gZ?rt2KQ*Q0X@?x0@4u)F%LyZh`D~g{X8pbnX`b_w;o{rMuwVxk|`D zIeh<}1Kc#z3qI~Ah5ZgXq0$2;(hYM3ICB<_9E2MWrlHdBp>w|^RQf-deJBN${s@=M zPC-t>M_Zgsj(wBtI!MnLN39R!`m13}k|!!X4>um}g-S0#Hn|Tfy$rLGQ&H(PICpM; z!M0E|guwlS ztx=gZ{sqv_+Bjk>ULwzcP z%2aS}YHw7ghS`Ud@NqvG^vfsU!$y0=4?3S5h{^)tw6tEREChbt)Exf)DsOPm z^0EQ4LHejx*+78qZIulM=swub*)C9)u8&+M%aCOPbU#23o{>l;GKpM5%5r3R`mklP zT-i{79suaK%OuBS1^N(xeg}bP-~d^XtmOaUWk&pvTkQBUiSdu|zA2a7l~w7pTV>S% z{r;@vH;GhoU-Cd!D|sjzB^wRUqxu|x{tuu>ve{Vpw5C;Jj6Eb-O>^dvw}1N1CF&ja*lfL;XXWq@7<=yibJ1n6ym z-UaBd0R0W14*>cQppOCi6rj%m`Vye80s01@ZvpxqU=o0#0K)^Fct1lUu6y#&}BfV~Ge z3L@|?04@VK4R9XdmH@W}xC6jl0PX?sPR2>ek>pB-%HBxw^|k;#r8nhDp=6lsJ=}1n zyQLg417|)1azbxo7^^^{VZvEnlv|kbbL}_@OV4JBa>fk&)D8&n#@Vhma!WICp&hU_ zm-e_1YN$OYh;j$B$E9`;7dZD^4^i%J2ClRNo#2hL{?Oq(FUq~l;I($p*93OD#EbF( zGkBvN41pUj#lTIPd+lyXu>5C#IR7VBDo-(k_u-t2{xIUQt0*60w*21io&h&r3WDP<*-7QuX7CZ5 zb1?v}xZ)y}=bJ50OqT0Ex!A}xX3Mj7f)PgHT?{~hL_nLXoQ=H9?DC@BrON2i&FJC_ z6FCZYy2eT6wPv?hChn-8T`c8e%$7ge1NG*K?=jDBcG=fhJM28i;7CICa)ffiVHIo3wL#0+5V!1BNJ^YL8* zT3jJT`AV}J(eAd^*ep!F!in;)%wUIha3kD!HwccnXe-J$n?Y$ixE=Pr768Axz>4x+ zW>DS^?laA5=~Y&ge`^M*cJMGPyBy$Jkelx_{PX&fA2qu%?QTE9@}J{G`AIXtwF75i z-)mh&`A=p*Xa_Et()sK)UX))ogNksv z<6v{T%)TXskFGn2@@Hl@yLPu%(D}wfQEo00m_s}8-Xy8?>KCqgWo4gxOPY%Y=JeT- zB=k1W-zC7XL4gQRdy}*w&4mMVY4;(GVnR)eZr4pwB+V5Bb8Ghy-~m1cZobVrwht|7 zt|ypByPGXcx|J!C<}!kHYzJK6fm^*r(p*L`WjoNxIC{#w;?nBB&KhYhDVSHgqpwk8 zU-N)%zHM(qnhOi2Zg&YWy2O~ep}1o&lIH4y`L=sR!}vREMbcbUF#mR-n{hY|Q7(wo z5Nm@-Mbcbeu)ubg-lh?sewP=?MDsiaw}buR#=D6kInWG*wgaiK?6QAMb(N;roRr2V z3rjMC%+*J=k(p!`nN8*ZEF54F0E+}zR2w;z%#*0e0)RyWtg~r1AQrBFGFsSLv2#LZ zBbHGY;O8IW?d%`w7X;Z~ML)8PtTvLBlNDqoSp~2z0P6~{ZUBpKBWuW7iJBY*uG0XTj(+3{a;-6NCAo@RO|AjhAb<@9*bsoF zwvp?|FU>O30G9q)=4jaGH(Nh)8@byUxSiZV?j&~sEE8Z^0LungP8+$0+$&L&`vH~< zu%V{FJX4G8eHTCSf8>e(Z1E&{%G_cBzzRRMn0wz&NB&G+F$VqX)LbR6Nz~*GfDH$j z#uTJ=i`!apsPRg)OKP2;x3j-rU~v7Ax{%;tZ)d;y&re?DFXRIw>Az0V@8m;?ntTkf zVt|eK!o*tA@W9=Vd`bTKpZ$JIzLTiQ4*)9zSh*>t0uFef^rHw$_FpYga*C9wDH>o^ z0IN0y)xesk?tYX=*%*WVZE7f6%FaAcBLOzb6x0*aPwaG*E7j2$^lynkb)u9KHRT1c zI)IHa1=X7#X!-78k|D-{3JDLYA5s?_81}buqWq~4eN-D2Km}4kR4~AF0Mi2u0Bl?v z6-tGfg^UN-1V9+K$&9%?8g_eT<41L+jIRV#H!7a$PW1rTB!Eo@*c5>x2k3qAZ+xby>)bRfd(okA+&>Vox{TPJ&Zs$jp zQ#D3;6;vfvMO6a~0&E_@<^ya&8&ykvfqsGQtBg8FT{H?gPyIywOkDuj7JzL9*fxM|Z=)_zmnCZID!_IC zY^RA2*=164=TRpe^(*zeQOUpN@m&3zDjkz4; z_xD_WMZGn0{_9x2quxu@v;<%W0QRjpm%oEIo_U1RU(oXZQbLn7B~jB1zzzZIut~}H zMkQ%)PCow?#yofOqZPERKB|qjq^)Rc+6G`p0ro$D9Rt`8ZL}S2FHzHu0Q(VO$4${E zOarj}v8RsiM63U6Drg_tSE8o<0d@*tr%i!pj8$*XnaPzF8Fit-VaCE26ckXOS{D`+ z7Vx)GphM{>Bk{kL7CM^lY@TD;Ie?uvG53UPUpVUMc)Hhr%IQt_k*MiJfc*@x3#Oop zCOJb5l4<7o2n(xEtMd;v7GeL;_WYm+(5e5)nntHf)O04mE(46cVxqljs_h9^hhBzD zf42*#^Jvq;|F?9dHMCZuri%e~9bh+1(Kn6h`mkcfgcs2Bm7|WXplkngAV$)o%mZ;7 zV0X;p;1;(v>s9%l<==kn(qH?brzierKPJ(WC2D#qz{inY9^a6>RUI?)J0DE8}{T&LgJNnU!>E*_tf6H;Yjb0&9)2jgX z2w;y*K~JFewaSnFivH$5TiQf#mZ<5i0DA_o=cb?+@Zf8uAHADC@Sj27(%(tc^dW$~ z0@!O)&>zs@50xK%j6V6F@=npGC2IOC!2Sf-TT{?GSo=pO9et6$W(@k*X}(V1kf`Zf z0Q&%Ni7^OAjMMz`p4TRS^8-LYSV(fiE$ z8O#iksF^f?I|AIvB*)pf>UP=Be~_I~7Z4Z_;_V#Z=VvUDf&M`ue@hJ}hbj0^;zDMa zM9pXbKGYT9ZYE}TQ(5}j(dK@7U09&8#`y;X)~D9_2L%584#bo)RYu}}Tb)cbQ)4PQ zxF^6ne(a|IJG(wiJu}W2^sm`7o|zy~Gm`+W1h~p1#>uhAhl%7yAXIlJG@qJV|aoh(Xj4=RAkH>5qMBL zz7alr*I;FOCu249bpz-2e|W@7z9M_A>jJ{mjDo z^@zPa9uDvbqvjOjq--ib&mB80(MpP#L(E}A9D+E1!F$xt!1DoK2=L)wvmDE_0xPl#){?bityvq^mbGK; zSqIh;;97u>0C*L^NBRML48ZjOp8)V_0G|o)SpaVU_&k8m2YA!xd}3Wp@8WnrLpgy6 zhNn29ma?8^Te8^}Nf>SBtp+^BXp5DyerA_}W|tpLF2QEoV6)Bg3u9P>*_LXyWt(g< zW?Q=1w%TOtX0~OTZBIMC{o~hE^%kDG;w0b?I zuNmx2!&@n0i?g%X*#=t~5}{)o*m>>B<^#O?J$AsBmI{;fRFws{{~ji`kDCaO#B1?%D=_PPqy=K zXLq*C-v#jcPyBn0{QCet_Mi0Mv3fSxM6Uz5t`gvb|H^;F$WOHMA7hP`<>Txg2RQh| zf6B;z8sOvp$$y^Jvk@l#@h17Hf2F@bJ2vWY+4$p1S#o}I`(Vjmk^NJP-#6#$>YqNgQN_9^>}eLgrb#V0?vDi`2WyL6D4 zli?-%Dl;*qZ*^7f(Bgt_xmCH#*_Z5VN$H@(6ysI9#y{D2?L+V$;L|@!Z4jY4}inZE7d-v9rxnYpWFY3G=DD87#aZZ1+82V zzzxRrtK-6q!omT*@Snn>Sv{L+64q!EHta7+z;!X|lC`%R&-M7+F4q&_&7b<++eqIB z;4S~8H}-p|-qW}S%^laYvkl}18>J2c_~KS>2*8&ZDrv;Up3CHN^ij*WEG`@1tpH!P zjLYSQ0(?2Z+YB3MB-fMEa3l0l%Q-Dq#1#X4CBRn!eD!j!ge&FB0KNv`-vazQLnwok z^yF&vk!@TpHtIz6s!)4I5a*sSDS{E&ey(CEQZ372sO|z762p z-C`b_j*2CD5@!!o;{0(Xa4P{mbsNVa8Z?eu!)?$ngX>$opDJ@+-Y-XwD;z;^-s zD}e6?_@0&AMug=yahnkqVFA8Zp9JuI06(Bl(kB_N3y6#1vVct1aeE|EZZEgbxX!9H zBMOWUE{AUo{oVlZ{ifB%9pJt-FRX%P+yO~xHp}}5_=fuW2RP?eIR`}q2RJA7Wqu8CZi#d+FdhGM zuedk*uw~q9?hk;U0{H1=+@IWAfS&>Q*@3m1{Ho!Dh8Jjt4X<*GoiN8VgKn{t&8PmK zMu6lo{)@kJ@Ev#yfS(8WPlnD`h@Cx8@vJ^<8BZHqxnOLC=Xf6A7Xg0B;B1Y!*z?xB z-9J3+c?W=B0r=IA9Im{_KU(qRI|BSVz;Ar?@aBDu9BSSN;I{yNdl~P?`vd$A!0#IT zt&mRkd>9{T^awZV_|>E%ijM~PJ%Ima)M1_eahmzA`pC6>H$Gmrp6|i;lzq+j;(N=! z;`;*p0l*&`kM8lu0Do#c#>bxn{H5_oAAkLM^7th4P`97G@&i5}QQGi>&FG`g&**&m z-w&twEVIXxc8{T-PiFW6GuVDE%WF)a@hF-vHiPXavV7U+vpc@h48Cfot^Iru$&WUJ z?MJfw*uNbZ;pwJ#2p;g$^iiw%ar}6G0zZ+T#82j@@KXW)C&1qV{2jpG1N;LZB!EBw zfv%RQ`5F97iCV(&Q~0?OcjGG+fdRs}2cXAHPK2H{l-MJ7hHvbUWrj*SBu1Cb+9Y&~ zAFL_KFRdL=T3S3bw<4i(kfu^Iw74LfwX8GluLlO#dpp z|I-qw;3l{WL|Q_AK}nUSP*YF=2p>SGhm6S8l=$S8m6>iTLMK6KSmKO0Vao)SVUaW9 z-pdrHHaYtZN-3?bFx^Q^R)3QOR>^&Q0uqw+*{wn{AR-MNJrU z42T#&!~!C21;PrMLKeabIr=0(bOA&+rs(!bqc~77#sJg;9X$Y5Y1{kWjCWTqcYabbv?zL}GiN#|ablVatT^ z!URC{0z~g+!X#lbAo>8JF9e=0QJI5sD>TL@?8-r!f?BuOu^UWxwRVD8!rXrlGzbt7 z{Q!|<*xM0t%n}v~jeq;fnb0CEZkMH}0I47J3L>3^j0g>~0v6xrLr^}CP z;M3(b6Po*%j%p>8k!Pyn@ z!i6W2QsXC;)C@cmo*TY$MLe-(!VAMXSHxc@ycXWH&)=Vb82)Mg-W%udgD3%n1`wYs zGbv)C@qyEdZefL{XAk>}cn|r<6#E#;2dZyYnXZ5pJ=i!~X7WDO!q7`l!{S zm1r&6h_<4gXfHa5j({iyL>VB;0Z{>nNueq0C9L*of09C-eQ0lp^sW628uyquoxnSieX|nAVvaW6d*XGT{lyeJ zYMcs)X~uFhBb(jk?2Skfov4*a5qGgDBQd3aZppBMuBFu_Re+doN)2&@Sd#W}(5swXfS76auN14YS?=>YyJ@#4rJ!oLSS{8VUn%|{WLT|6!gS(jae_W- zjaVm+5$naVqE6I{KpZEI2gDpe%mqXPARr*-0b)KN768Hkh=pq;YH^Y{S)3wKi_^sE z616zfbboIIL=zxdOrIA4VzKGNl5E!6INTK#r4`*Z#Z?6rnv!AhCB~|kpOs+9_CfaO z#740R5Y0=?J!ugaWqj_3sS7RQVoB-1#FUhRD%0$Ujbf|W-}qhM17h2!X%id8Ri6Q| zQCw@h_*CjF#jnJT`l#jN*W!9{10Y%fu?!H)my6Ul#yJB-n`yEPFMN^o&f-pSpFXNh z+$HW7_lSD|u@Vrg0I?bnYud#961DiP_#GhDn!5NEAig#i!jyvIg1oANd;|1Dq7CEx z5QW{R)=BYy;t%?;R`D1h*0qX10^&=oxOYyrepKx|tj-jk@s`{D!R z5)vN)V!KK84nXWTelR`(AIwVV7H`-!ok?A&fKmeAiizKTofMqsO1V*L2V@b4iJ8T*tcB4 z8Git=&-`~tQblQgbzW8Fr#MpKt?+4Y&KD4eK0%g>07c;623--Nh%mO{7^(yKi9K61HYpkk0>Fd$9<;xr)6eTpX)X^PChS8+v_A{!7V0ddNJ1|uFr6#0r_ z|L_>D&;a5LAkO~%O~Ea8ivI8S2t|pa{2#Fuib_D72gFYXT`*#=`~0Yx%`%B8y$ePa z(7Z~H93x)KsJ+$$R%Vextv@&UOj_2fqK2>Czq2l6<1iabmHMCvY* zSIFz+E%Gk;jg+0;cO%u&30#dvd!#jb}joQ`!&0b-N7Lo z&9NNMiJSxH#Esxab7Q!%oSvJ?P3O*Yx41jpFWf!uDfgW3!uR8o`4oO2pT+0!8~MHb ze*RnjApawOLf{1_!A0;Ed<31J5Fi8zAwrzcRfrdQ2nj-Op-xySoD*>|NK6tl#cXk? zm@f_!HDbLuNt`0i6laTb#l_-MafP@_TqAxhZV@``v@d?vnD5Q+{8(zr5> zD^Ovha8-CIA{23o1Vw+va7C$Nx?-MUfud2-tW$ic*s9pC_(5@8aZ+(wan{nq(#JB= zGTO46Wp~S-mc1;KEmJH9S`N0%wk))qZV4^dTW+`9X}QO8pXCph$1N{eUa`DpdBgIS zaNuzt0&fSYs%Wv z+S*!et@E|^w+^%pwhpxpw~n-qwvMrmv+iZx$2#A7gmtO)RO<%odDa`OcUbSTzG;2m z`ga?djbNj&@v{lHiL@DIGtOp$%^{oPHYaTvTWece+hE(ywq0%e*cRJX+Ctkkwp(qt z+wQR4Y5TqHQQOnDXKl~h{%m{E_Ll7(+h1(&+1|Ia)7f>mtF~Kix5w^(c0bsiusdaU z*6zIBZ+6e@Uf8{{du#XJUT#m>^Y)^>rM;cKgT0fz+CJ7k!G4ha5c^E~Z2MgMLi^$N zTKh`-G4^Baf&F;9EJ)S4S(y?v6E%4US73TOHdR zS30h7T<5sY@rdL998Wl&ay;XB-SMX5FOK&d?>jzreCqhz33XC9IXZbcsht9xf}BE} zBAue0Vw`$9G}&pY({!hqPUoDiI^EYf{qFSK>7~=rY=6yvszFNiMTp=DI9%X>(cWvf5>>%a<-+yKHdz#$}hw9+wL)H(hSK z%3VcQOV>cxC|6x)*HqV`uKBLBTn(;`t`}Tyy54pp+-Nt}&C4y!Ey69*Ey^vyt+(4C zw;^t6ZW(S_ZaHp6ZX?`E-OAl6-D=!cx}9>DxcjF{iypf_ml3Y-OsvTaKGe!#r?kfdyfttqKBo2ozBC-!^y+l!_%XahrdT( zk3k+oJkmWfJxV;vJSse@JZd}+c^vn+Fc;fNQNu|B1f@={q?C-3QwmCj(n@Kgv{O1Los=$0H>HQNqf)8#QmU1{N`Gab zGFTa^3|B@fqm?nrIAvF5yt0QfLD^f`SJ_XQtV~f3R1Q|AD$|vj%4}t>GEZ5c9H!JL zio`P zE4L|kD)%V&E5B17RvuOUpgf^GtvsjvS$Ro$Re3{sTltIfH|6ij$I55Qm&!ksZM>gXN>!^Gt*Te)RpV8YR8v(mRI^nLs`;vgs%F(vhcQN3Z){&%IuH^WJve4&LG3UA((_7kgKG*LpAXZuMU7eZc#F-amN1QcKjR+FKp0 z4pompZQey)CAermr#e%XGxeq;S6 z`%U#*>9^i*qu*)2OMX}Up8LJ?``~Zq@9yvEpXfi>Kh+=jPxGJQzuJGJ|0e%4{+Io) z1`q*s02|;H5EKv+Fd!f^AUmL57cePcO2Dds4FTT-oD8@Sa4FzzAQ9Lh&?Qh6=p8s9 zFf%Ya5Cl#OoDukC;FiE`fj0tw3w#iS2FZh{ps1kupdLY*po*ZXpanrof?9)i27MQF zDCl9(tDrxExnSF1`{2OfsNl}QLxOXI^Ma=b&kJ4m4>AY*5(busLB3VcWwFgnbwGJnUWAhj5Q@pK!nM zl<!BMb<|yiCi7IHu7HN)5zyhfl*OWouh_Fl}A-Z&5v3f zwKVG6sAEw-M*SM~BS-99UT+hGrCuFQFK*wP4wdERncpre~3O8{ZsUt&RAz1 z(b==JZ)g9`13PDR>CN`K!+BJHLs+Vu+aTG5unaV;04%j9DG?Ys{0FXR&dyy<+>s zE{tuBT^{=+_D$^DxE^syasA__#LbO^ai`-h#a-#*)TL7wRhNP;C0)w8Z0@qB%f7B1 zy0TsQu1Q@}yQX(-?%LLMW!GC>A9Q`#&AVH0w@_WTQQgLMo6v1{w?o~&@Ae_yB3>5X zHNH=LV*IRlLwsZWnfS}`SG&7+S9kaAUe;F{o`Ff5@gp(0^z!lr~R39ox0 zy|7+gd-ds+*h@F7m!Vfw1IUS9|}``(7WvKH+^L`;6~1 zqtC29=lfjibEB_SU+2EAeJlHp={vUXp}xoao=mh&bW8L|EJ>_Q9F@2y@o?giepdaQ z`?>bZ>sQ>bq~FGVJNxZUB9jzJR!P}O!;`d0>yx%8?M!BqZIbPhb9KquLI#BmsvV>sG;Yv=LH`@{ z!(fZS++bmF%HWK_S%aGfFCV;O@a@66-v>V$;y)x}NYs!?LuL<|JLJlcyF-3WRi*}{ z2Bnsz)~D)H^{F6rR_dJ8=F~;0OHx}?m#3~w-I%&LbzADr)IF*DQy-_1X*OwgX^v^m zX>MtrX})RxX(4IhX;EnjX}!~u()yUhmR6NklUA2jpQcNjkTxl8YFdLX z?d!B{X*<$(r|nBSnRX`aT-wiRm(n|?`=v*x$E0^pPe|{bo|rx`eMowGdRBU2`txsHvN5uBm>JJGUyC8gUhhZ zu+Q+%2+9b}h{%Y}h|TDl(LEy}qfbV^j3F7iw2X?3x{Ue^L&nmKWf^-jzRx(C@i^m; zj6XB2GhH&>GCODX$V|wboH-}6A@fY;<;<&D4q2XAowB-SC1v%`O350Km7A59RgzVf zRgqPdRg*O;YeLrKtZ7*@v*u*Mtnad}Wj)AxnDr#kt5_Na_n;)bDVSBa#T6$9KW2voFO?`IiqvN=S<9*k~2MLVNO%ds+=`B>vF!z zS)a2pXH(ApoNsdu<$RxWH0Ot$<2gU&T*$eYb1O%8C+AJhyIe^wmitAnG?&a}a`{|E zu63?Uu3K(oZnxa-xjDI-+@jpcxpQ(Ga(Co@n|m<#M(%I94~BLa$`0j+CJjv;nm)8; z=!&7MhTa|eXy}tXGS4Q@F3&#CAy1X(ofn!Hkr$m8o7Xk3dtP$hfV{zZX?dA>IeByP zcIEw+Z==gk$S=sR$gj$;%^#g#pRdoKm%k`~Nq$@Ys{FP2+wynh@6A7ue=z@O{;~Yy z`Iqw_<-aZ<3OW>!1xx{7U{zpKU|---5LeKvpie=+g8l`01%(B}3yKO#3icHoDL7Z~ zQ^D1O>jk$8?iT!B@VMYv!OMbog|3C23wstO7p4>rD%7PG78VXKtS%f`SXVf<5EM=* zoLo4s&`{V^*iyK-aB1PP!Xt&ZhslTe4@(|aGfX!OXui-$HKc~o@EV22T4Sei)VOHe zH61l7jauWU3DksW!ZlHv7)=*Vyr!q7wkYH~DrnnI06Q>-b~RA{O- zBXycO%~%c4Owdf$Ow-KN%+Wy20!^c)MYBY+OtV6>TC+~`wPvGcvu2xSr)H04zves5 zVa-v^51JF2)0%UdpEZ{>S2Z^@w>7_Le$)J}d8~P+d8zqB^H%dgi)sn2g;uVmwVYPe zT4`;y4q9ieo7PjS)Ou@uwE@~-tu9O(sqL(d({|JL(Du^y)h20Ew1c#%+6-;BcBr;M zJ6v0&Ezy>1tF*P+(b{^gUOQepNjp_LLpxjBpq;N>sBP9R*0yTfw5zmhwO?sBXg6uM zYIkUNYxilt)gICw(H_$t*Phaz)&8WtsJ)`SuDzwbtG%avpnar$s(qo;zSjP!eP4tW z;YA&aWJOdFTO<@&7TFZp7daKV7I_qPD)K7wDe^B0Dhe%%D2gtME$Uj-y(pomf6;)V znj&2hC~7QPR@7Fsx9Iz#qeYL3UKhP7wk~!lb}No4?pfTcxUjgixV*Trcv*2<@uA}5 z#V3m&7QZU~V}#oX?-4#Dbmb#Pj~Fvz^@xolHjVgo#FG)vN-Rs9N?b}3O8S=!C>dD- zO2(IbQ?jdMPs#0)-%B2qN=x}tu{5wWsawF{r_0Wk-7kAy_OhHWw<~ujkJptamM4{u zEC=P|%a@d|E?--Is{CU4e*k_xoKxk6dtRgqB9zhXc|WyP3^u@x;9D=Jo19H}@} zai-$;ikB6yE1fHqm0p#7D+g5$sT^4eD#urTRk^itd*$)UpDHg@SyXXVLRD~8=c?GM zp;bjyBdR7<&90hTwX^EGszX&*s&sd&ey#dYZBZ?&cCS`f`&JLG&Z!<+T~|G!dQ$bO z>J8Q3RG+WDR(+!et&!JIH63gGY65B!YX;Y(*3{Qbs+m&LR`XTO`kIq97iuomVzp!~ zUF%;PQ5#j8QCmkyay}N4kzo8JRIMYvhEHGj$_p zkK8}<=*VLupNxDn^6e<6QJqGqMx~6(7?m|@%BZ=c;Ha-hZ5y>?)b&yKM%^DRj&>OB zG`iR5l+go6SC1Y$T0eU2=uM-yjJ`7Z?&x3Zs5;9!>$=W$J?awbit4KBYU;Ms?XBBi z_hF317}=PhG0|gU#^jFCjwv29Ym8w`-OmO=_$RX-ddlpAE7VR@6jLD9{~ce2aaF>$OPG7F<1rGfcxM%csb60T*SC2 z-8lWYspF=PJ2UR`xU1vs$9s(LIDXjpvhfw;*N@*me&_ht6Oakmg!l=G6OtxOnJ{+( zoN#Qy*$L+-G83&Q+D=THm^ZOt;*yE0C$63Nc;X)u|C|&xDSlFqN#iC>pEPsQrAfCZ z-JR?`Ie2pDNmD@to3WO70Zxl;SD6B~w;USv%#}VCuoCKTbU{jhSXW&30Paw7h8r)0(HXO4@tr-tyJe(Obv**lSGw051n%Oe*?#xFspUjGw z)pb_^UGZI+>p6pb4ShvbH~r!KKH=f?;7L{VuNMFu!gdRiiWifn;Nz>yn|mr3)l_z zh5g_>xCkzRkKk+gX5Qd=IrE0j+codtyu@vJt_{Bnth5Z+%FU(xH zX5lvrH!pm#@O`7CF{&}Xu}9#;QipIKFX0#(9m48kaUMZ(P~9rtzD` zEsfh7cQx*9eAr~u)U&CkX-?CkrX@|wnpWtVRyVC{+ShcX>3>Zpnoc*JYr5HVyXjuj zgQiDK&zoL0{n6Z^*|yoO*{?aEIkY*VIl8$^bGPOm%}LFv&FRfq&AH7L&DG7d&7+&^ zoA);#Z9d=pbMuwv>&-Wte`)@$`S<1*%^zB9T0C1iwJ2LuEuk&pEp08UTGqCF)v}>w zQ_I#C-Hw*sE&E!&Z8_9(q~%!4@s?99XIp-1x!7{0<$BAlmb)$YS{}4KYI)l7qUCkV zpDphfA&c-u9Tv$JQH$6`!XnE>HjC^RIW2Nsnx7C_nvjsh1j~c*1BpP)Ky23QcDc}_JaX%2pj?TgOiYfkTggJ>7{I&?HN6FLt1 z4Ri){7W5|c5wr+e3@w3{Ld&31DCiT^05w4^P&d>In+sbBTMb(aTMyd;+Xj08`xo{S zRthVF!C)0I9n21M!rU+~tPd6`Usj$~o?ZS!`Ihp%<@?KDmzS4Umcz?y%bUwF<(~3r zd4GAbVnD@^ilG(zD}JdsRgqJ1wxYg*R6(hrS1>DDD%vUsR1T{gQ8^k^nOXTu<)z9i zmARF9m48*V8w5qJ?QR%x|&i=gQvnrz(>I|;bY-b;nU$c@LYHv{7-lR z90b1yC&GDf0lXD1f`gQBbwTo-l)o!TGuKm7tSM8qKe`~?D(AtXHs@jHHRBcx+P#dfb*G3Vkh&04H z#CF6^#2&;x#8Jd?#0$hn1O!ozs6^Bw8WC1R00AIEh%j;h2$_mpi`<6Xf!vMUi#&on zhWrl+LBf!g$ZBLGvI*IR1du^w7#XcgtxK!Rs@qk!r*41U!MdO8eyJnWaqIYXEp=^m ziaJ&Oul3jJ|ERxSf200x{r!4!y`a9OUQ{osSJ!JBrZp^XSlaMy!^(!NhU|vF8j2d8 zHk33xZzyX3y=$;H^frVVA`P*|L5=B+M;p&IUTD13c%|`rKYrX(#Mm7_gNzK$|db6Opr8$BA68#l= z40=3zB6Xdar6mZCqQ4QM;sh4!HRXaL=hPGSaP z(l8mA8JL}zqnNvxr(B#`h8i z5K;+43Bw7a2$_U&glUACggJ!yghhl^gpGvlgr5jU2&W0Z63!ETBU~X|C)_05BK%Fb zM<^zg5y}aTgeC%sKqW8;YyyuUA#@NF1T{fNun<6QLXbF+IEeTaaRhNRaSU-haXN7p zaV~KIaWQcxn2LnusG3 zi7X5%mf6AL?^z z85KrtprWWmDuqg?vZ!3DnA%R2Q&m(g)lBWC_RQfWhJ!)c>vnY3}VX|$QNIkfq- zMYQd-T-qI4HLa0Gq_JsIS_e%>`%LSkS!i7}AFYQL1ku8@7<~|Z6nzSP8ht)}5q&BB zTly;cM*8>kE%fd5UG($xXY>zr4qZgo(QWh|dM`cBNMWQh(iwvpqZpZtaf}I!$&5LS zrHnObav6UxZZRG*o-;l$zzjG8!Ki1T7-$BCL1(ZS zATC3|XlHz4bTI%%kda^xU=Ct_!5qRI%^brV&z#7d!d%Nd!^~xtF=5OGCV|Oi@|jYm zjHzU5n0ls_X=l2a9;TleVWqQ1uqLslu;#KBuoknHu~x7)u(DY{u(q;xunw|LvM#f( zvIptrr)^pZ>tk)n`84Jcju&^u^i^CGJq%0Xr$f zU}v(&vZu0VuxGR9u@|yevcF@mV`s59v3If$vrn&EbCq+Alg}yO6msr!9&w&<{^305lyRy!C=QiF=Lk5h95JVz zBj3H;cQ8yOVo_o5RiJ=5hbx z-T`s%avyLXb6;>@a!a{yxgWSy+$JuWE8wF=MfZNYY=Z)Y^ z;!WYrAn2q1!T0a8E^umlo8yFe@WBrpoh0-L}q2nc!weS)YkRXAKYUN~Dg zSGY{LLbzJER=7d9Rk%aATewenQ24X(tT0cQFT5=T3GWLZ37-i66TTLf3EvCBLbwnm zBnkOKkWknmR0!2Vo$#};OXw83g+5`AFxfJoWl&3c%kY+wE#MYpOMMHfrMZRNLT$}% z-P5|S^Zd0`d+xkTlM9V~3qHK`p2hmp14$*GWMNyt8UsNC}6cvk}iT)M6 z5|xU_i>Hg1h?j|1h*yi(iZ_UliF3qf#TUev#J9wMi|>gaiXV$PVv$%Y){6~dlh`V@ zOHw66CBq~mC0|QsN#;rxNES<$N~jW^L?%&40+L=ypCl@YOH-t&(sb!yDQKv4xO9{> zQ#wvMLHeC^oit0jNxE6OO}bOMN4j77qx7)!nDm77lr%@0E6tPsDJ_uJNr_UjlqO|J zd)o)Jr?#iJXS8o<-`T#qeP8>5_Q&n7+DqHtw!d$ewts3jw42&39pgG?bZ(~2C$WyK8z=(ggC;y(pa(X41ybSgXw zpQ1+*RD=~VQa=vnra;tW!29o0J$OUP)52m0YDj*{U=uO-i%UrgSK~m0@K} z83(C`sD`SBt466ZRpV6CR5MhwRr6F?s%+IJ)n?T;)lStB)p6Ac)o-fHs^3+4sy|gX zRCiVPRgY9pRA3cU1yfb3;3|X)uM(=-R1#IYN~ToM z!D^TqrzWV0YKoe!W~n9W4z*m}sWz)^YKOX8?bQs?jMa?SOw>%#OxMiPEZ3~itk$g6 zY|vzDPH4_)E@&=ku4?XU9%>$Go@oBjJlA~CKr}E-g9fERYj7GONJG(ZHGEBrMx-%m zEE=oEu5oERny98rfD;@W3*GXi?mC$E3~V%YqcA--)pyMk7@I?Z?s@7Qd_UZ zXz^N-ma64w`Pvq(NSoAsqx)93UYDiYrrW98qua0hQFmIGqx(&FMVG7lLszJ~tpn-q z>*{n`Jt$2-Og}Efc|IwMg1jxp8ik$4gFvG zd-{j^B7L#`mHxfHQV%zz8%7&44bu&?408<&42uoR3@Z$q44VyG4Lc0G4SNmy4c86t z4P1lQ&}U3BW*A2rzcx-X&NR+5W*M`MJB>erj6WHV8jl+<7=JU~G~P1)ZMXJ`JDxwH#@PNtWHiR zzf))$W}0A{WSVN4Zpty`n(|Bqrb5$g(>>EeQ<3SJ>9q-Lf}1cVoQZ6rnV2RJ&m=Up znG~kaCYQ-=3YdCLeWrd>(mc?dVIFDz#yrP7&%D^Y%)G+9#=PFV(Y)P!z*PFn=G3x+boAHhb_k}KU>aP&Rf71q@~`1vNT)B z7OEv=O|_<3Gps|bqpg|NJ=Wva6V_AKGuBJiE7mG&vlU~-TZvYdm1B+A(rp>GFKu7h z#@NQ$_SsI@PTJ1cezje({ceNXFgBcxZ)>rMY*HIYW>eZUHoeVY^VxcAL0i}sv&Fko zx>CE+x~6t5>H4uNw+qt6v=6XPvahmlv~RL+wr{f^vLCizuwSxYwO_O6+Y9W4_S<%l z{a^bld#Sz5{@xC@!|WCIYCFcxw;LV99n&2L9A_QZ9CsWb$G?tOjyH~Xj*kwgqXOip zcGNmZ4yuFUU^zGrzN5tLoUKl&^OMuyv^gElZl~87bcUT#XWTWRl)o+6BV7h%SnY?qazlE~hKlJ-B;T_Yd9sx-WO%?S9o=(T(fw=vH*A zyLH{4yN&LV?r+=^-80;?-SgZF-7DSM?jPJ+-TT}}-8bB~-5=al?ix4J-Rvg2X>O*w z)vb1G-Jje>x5J(Aq$J>)&&J?=f>J>|{w-ts>1KKIsmv0l8F zg% zMc-xLHDA83!1vHs=BxHK`Y1k{kL~06gg&va-6!`MeGXsH*XIlSBK~xLhW|_dF#kyZ z*ZxWVDgK%MIsW0Za3zo%_#<#Va3fF>coBFRC=I*~ybn|cssr@_ zQ~({o1?T}*fEy48+5_^yr+_hF4!8r6KrE2x8PM}h&%~a|J=1z-_AKgI(zCp0WlvVm z#h$A@Wj(MSeotFZpeF&O0I5JaFc=sLWCCM>iNF+KI8@CSWtL4cHDG z08Rp@fpfq`;4*Lx$Oj4l5Ksa<2cSR&Pz}@qbwDG~3}68QAOzX~3D5y305zZkJ_DV- zDZMj#SN9(2E$IEwOYi;E>+J3BjrPWaDZ$iWdT?-XXmEINa&TI3W^i_JZg75ZQE(|J zcqCXDga$dm&d{LH*wEC_^w5mZ!qDQ-lF<54R%lOXf9S{1;n1Ld3t`da(seX2fVAJ7*K4-1bE zuMh7C?+Tv`p9!B0UkG0cUkzUigYv@#;lgl9_(k|-xHSAW{2>epmxrsuHDPwRBWw#t zA{mjXkrk2sk#mvTkw=jyk*ATD5oiP+sgK|y#0V+Ej&LKqh$PYxkwx?oL&O+yN4$|> zBpiuF64A71Ms!H@tLWV5#^|Z&mFVx$8_~a_ccOQr527W}7oh0NXle9q6d9F8P0?^H zE%rrhNbIZFh}h`Ztl09{irC87s@R^`@z{yjsaQ_zTNBaBwlkvgvG4XNn3GvDCY4MryW$|z0tKw_o>*E{a+3`K`eer|wpW;X3 zKgTb|FU7CMuf_A@1@Q;*NAZ&Qi}=fUY5Zdx8n1{~#~b66I4#bMbK?AXOI#J##I=dJ$@|3~uE{{R}N B&_nQPI7j7 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 Lzx@9b{dWH!FVcj9 diff --git a/main.cpp b/main.cpp index ffdcb19503..e4c8a2b464 100644 --- a/main.cpp +++ b/main.cpp @@ -487,8 +487,10 @@ void update_pos(float frametime) balls.updateHand(myHead.getPos() + myHand.getPos(), glm::vec3(0,0,0), myHand.getRadius()); // Update all this stuff to any agents that are nearby and need to see it! - char test[] = "BXXX"; - broadcast(UDP_socket, test, strlen(test)); + const int MAX_BROADCAST_STRING = 200; + char broadcast_string[MAX_BROADCAST_STRING]; + int broadcast_bytes = myHead.getBroadcastData(broadcast_string); + broadcast_to_agents(UDP_socket, broadcast_string, broadcast_bytes); } void display(void) @@ -542,7 +544,17 @@ void display(void) // Show field vectors if (display_field) field_render(); - if (display_head) myHead.render(); + // Render my own head + if (display_head) { + glPushMatrix(); + glLoadIdentity(); + glTranslatef(0.f, 0.f, -7.f); + myHead.render(); + glPopMatrix(); + } + + // Render heads of other agents + if (!display_head) render_agents(); if (display_hand) myHand.render(); @@ -550,10 +562,10 @@ void display(void) if (!display_head) balls.render(); // Render the world box - if (!display_head) render_world_box(); + if (!display_head && stats_on) render_world_box(); - glm::vec3 test(0.5, 0.5, 0.5); - render_vector(&test); + //glm::vec3 test(0.5, 0.5, 0.5); + //render_vector(&test); glPopMatrix(); @@ -581,7 +593,7 @@ void display(void) sprintf(val, "%d,%d", target_x, target_y); drawtext(target_x, target_y-20, 0.08, 0, 1.0, 0, val, 0, 1, 0); } - if (display_head_mouse && !display_head) + if (display_head_mouse && !display_head && stats_on) { glPointSize(10.0f); glColor4f(1.0, 1.0, 0.0, 0.8); @@ -717,7 +729,8 @@ void key(unsigned char k, int x, int y) void read_network() { // Receive packets - int bytes_recvd = network_receive(UDP_socket, incoming_packet, delay); + in_addr from_addr; + int bytes_recvd = network_receive(UDP_socket, &from_addr, incoming_packet, delay); if (bytes_recvd > 0) { packetcount++; @@ -742,11 +755,11 @@ void read_network() // Message from Spaceserver // update_agents(&incoming_packet[1], bytes_recvd - 1); - } else if (incoming_packet[0] == 'B') { + } else if (incoming_packet[0] == 'H') { // // Broadcast packet from another agent // - //std::cout << "Got broadcast from agent\n"; + update_agent(from_addr, &incoming_packet[1], bytes_recvd - 1); } } } @@ -850,10 +863,11 @@ int main(int argc, char** argv) incoming_packet = new char[MAX_PACKET_SIZE]; // Test network loopback + in_addr from_addr; char test_data[] = "Test!"; int bytes_sent = network_send(UDP_socket, test_data, 5); if (bytes_sent) printf("%d bytes sent.", bytes_sent); - int test_recv = network_receive(UDP_socket, incoming_packet, delay); + int test_recv = network_receive(UDP_socket, &from_addr, incoming_packet, delay); printf("Received %i bytes\n", test_recv); // Load textures diff --git a/network.cpp b/network.cpp index 7cc72a53a4..953d7e1832 100644 --- a/network.cpp +++ b/network.cpp @@ -116,7 +116,7 @@ int network_send(int handle, char * packet_data, int packet_size) return sent_bytes; } -int network_receive(int handle, char * packet_data, int delay /*msecs*/) +int network_receive(int handle, in_addr * from_addr, char * packet_data, int delay /*msecs*/) { int received_bytes = recvfrom(handle, (char*)packet_data, MAX_PACKET_SIZE, 0, (sockaddr*)&dest_address, &fromLength ); @@ -149,7 +149,4 @@ int network_receive(int handle, char * packet_data, int delay /*msecs*/) } } - - - } diff --git a/network.h b/network.h index ea3f98cd72..1e51419005 100644 --- a/network.h +++ b/network.h @@ -22,7 +22,7 @@ const int UDP_PORT = 30001; const char DESTINATION_IP[] = "127.0.0.1"; // Address and port of spaceserver process to advertise other agents -const char SPACESERVER_IP[] = "127.0.0.1"; +const char SPACESERVER_IP[] = "192.168.1.16"; const int SPACESERVER_PORT = 40000; // Randomly send a ping packet every N packets sent @@ -30,7 +30,7 @@ const int PING_PACKET_COUNT = 20; int network_init(); int network_send(int handle, char * packet_data, int packet_size); -int network_receive(int handle, char * packet_data, int delay /*msecs*/); +int network_receive(int handle, in_addr * from_addr, char * packet_data, int delay /*msecs*/); timeval network_send_ping(int handle); int notify_spaceserver(int handle, float x, float y, float z);