示例#1
0
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';
}
示例#2
0
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";
}
示例#3
0
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);
	}
}
示例#4
0
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';
}
示例#5
0
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);
    }
}
示例#6
0
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';
}
示例#7
0
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();
    }
}
示例#8
0
void ClientSocket::readDestroyItem(DataReader r)
{
	int id = r.readInt();
    std::cout<<"readDestroyItem "<<id<<"\n";
    g.items_map.remove(id);
}
示例#9
0
void ClientSocket::readHit(DataReader r)
{
	int id = r.readInt();
	float x=r.readFloat(), y=r.readFloat();
	g.destroyBullet(id,x,y);
}