void ClientSocket::readInit(DataReader r) { g.id = r.readInt(); cout<<"got ID "<<g.id<<'\n'; int w=r.readInt(), h=r.readInt(); Area& a=g.area; a.w=w,a.h=h; a.a = new int[w*h]; r.read(a.a, 4*w*h); int b = r.readInt(); a.bases.resize(b); r.read(&a.bases[0], 4*b); cout<<"got map "<<a.w<<' '<<a.h<<'\n'; }
void ClientSocket::readName(DataReader r){ int id = r.readInt(); char buf[33]; r.read(buf,32); if(g.names.size()<=id)g.names.resize(id+20); g.names[id] = buf; std::cout<<id<<" is "<<buf<<"\n"; }
void ClientSocket::readItems(DataReader r) { int n=r.readInt(); Item it; for(int i=0; i<n; ++i) { r.read(&it, sizeof(it)); g.items_map.insert(it); } }
void ClientSocket::readLightning(DataReader r) { int cnt = r.readInt(); vector<int> ids((int*)r.cur, ((int*)r.cur)+cnt); g.lightnings.push_back(make_pair(0.0, ids)); double l = length(g.units[g.unitIndex[ids[0]]].loc - g.player->loc); sounds.push_back(Sound(ELECTROSOUND, distvol(l))); // cout<<"adding lightning "<<cnt<<'\n'; }
void ClientSocket::readDead(DataReader r){ int n = r.readInt(); for(int i=0;i<n;i++) { Unit u; r.read(&u,sizeof(Unit)); u.shootTime = timef(); g.deadUnits.push_back(u); } }
void ClientSocket::readState(DataReader r) { int n = r.readInt(); // cout<<"reading "<<n<<" units\n"; double d = g.player->d; int mx=g.player->movex, my=g.player->movey; g.units.resize(n); memcpy(&g.units[0], r.cur, n*sizeof(Unit)); for(int i=0; i<n; ++i) g.units[i].id &= 0xffff; for(int i=0; i<n; ++i) if (g.units[i].type==0 && g.units[i].id==g.id) { Unit& u = g.units[i]; u.d=d; u.movex = mx, u.movey = my; break; } // Unit& u = g.units[0]; cout<<"jee "<<u.loc<<'\n'; }
void ClientSocket::readStats(DataReader r){ int n = r.readInt(); g.kills.clear(); g.teamkills.clear(); g.deaths.clear(); g.kills.resize(2000,-1); g.teamkills.resize(2000,-1); g.deaths.resize(2000,-1); for(int i=0;i<n;i++) { int id = r.readInt(); if (id<0 || id>=g.kills.size()) { for(int j=0; j<3; ++j) r.readInt(); continue; } g.kills[id]=r.readInt(); g.teamkills[id]=r.readInt(); g.deaths[id]=r.readInt(); } }
void ClientSocket::readDestroyItem(DataReader r) { int id = r.readInt(); std::cout<<"readDestroyItem "<<id<<"\n"; g.items_map.remove(id); }
void ClientSocket::readHit(DataReader r) { int id = r.readInt(); float x=r.readFloat(), y=r.readFloat(); g.destroyBullet(id,x,y); }