RECEIVE(DROP, id, msg, reliable) { ObjectHandle item = Object::construct((string) msg[1]); if (!item) return; item->unserialize(msg[1]); game.world->temporary.push_back(item); }
RECEIVE(BUILD, id, msg, reliable) { if (!reliable) return; GridPoint g = ToGridPoint(msg[1]); if (!g.isValid()) return; ObjectHandle structure = Object::construct((string) msg[2]); if (!structure) return; structure->unserialize(msg[2]); game.world->terrain->structures[g] = structure; TO(Structure,structure)->updateTextures(); }
RECEIVE(ITEMINFO, id, msg, reliable) { if (!reliable) return; game.world->temporary.clear(); for (size_t i = 1; i < msg.size(); ++i) { ObjectHandle item = Object::construct((string) msg[i]); if (!item) continue; item->unserialize(msg[i]); game.world->temporary.push_back(item); } }
RECEIVE(PLAYERINFO, id, msg, reliable) { if (!reliable) return; for (size_t i = 1; i < msg.size(); i += 2) { ObjectHandle player = Player(); player->unserialize((string) msg[i+1]); Player *p = TO(Player,player); Player::Id pid = p->id; game.topId = MAX(game.topId,pid) + 1; game.root->children.insert(player); game.players[pid] = player; nodes[(long) msg[i]] = pid; p->updateTextures(); } }
RECEIVE(STRUCTINFO, id, msg, reliable) { if (!reliable) return; Terrain *t = TO(Terrain,game.world->terrain); t->structures.clear(); for (size_t i = 1; i < msg.size(); i += 2) { GridPoint g = ToGridPoint(msg[i]); if (!g.isValid()) continue; ObjectHandle structure = Object::construct((string) msg[i+1]); if (!structure) continue; structure->unserialize(msg[i+1]); t->structures[g] = structure; TO(Structure,structure)->updateTextures(); } }
RECEIVE(FIRE, id, msg, reliable) { ObjectHandle laser = LaserBeam(); laser->unserialize(msg[1]); game.world->addLaserBeam(laser); }