void recv_create_terrain(void) { int i; if ((i = new_terrain())) { char filename[MAXSTR]; int w = recv_value(); int h = recv_value(); int n = recv_value(); int m = recv_value(); int l = recv_value(); recv_array(filename, l + 1, 1); /* HACK: Clients load data from disk instead of broadcast. */ if (load_terrain(i, filename, w, h)) { terrain[i].count = 1; terrain[i].w = w; terrain[i].h = h; terrain[i].n = n; terrain[i].m = m; terrain[i].o = 3396000; terrain[i].bias = DEFAULT_BIAS; terrain[i].magn = DEFAULT_MAGN; /* Encapsulate this object in an entity. */ recv_create_entity(); } } }
static unsigned int new_terrain(void) { unsigned int i; void *v; if ((i = vec_add(terrain, sizeof (struct terrain)))) { memset(terrain +i, 0, sizeof (struct terrain)); return i; } if ((v = vec_gro(terrain, sizeof (struct terrain)))) { terrain = (struct terrain *) v; return new_terrain(); } return 0; }
bool gamemap::try_merge_terrains(const t_translation::t_terrain terrain) { if(tcodeToTerrain_.count(terrain) == 0) { const std::map<t_translation::t_terrain, terrain_type>::const_iterator base_iter = tcodeToTerrain_.find(t_translation::t_terrain(terrain.base, t_translation::NO_LAYER)); const std::map<t_translation::t_terrain, terrain_type>::const_iterator overlay_iter = tcodeToTerrain_.find(t_translation::t_terrain(t_translation::NO_LAYER, terrain.overlay)); if(base_iter == tcodeToTerrain_.end() || overlay_iter == tcodeToTerrain_.end()) { return false; } terrain_type new_terrain(base_iter->second, overlay_iter->second); terrainList_.push_back(new_terrain.number()); tcodeToTerrain_.insert(std::pair<t_translation::t_terrain, terrain_type>( new_terrain.number(), new_terrain)); return true; } return true; // Terrain already exists, nothing to do }
int send_create_terrain(const char *filename, int w, int h, int n) { int l = strlen(filename); int i; if ((i = new_terrain())) { /* If the file exists and is successfully loaded... */ if (load_terrain(i, filename, w, h)) { terrain[i].count = 1; terrain[i].w = w; terrain[i].h = h; terrain[i].n = n; terrain[i].m = DEFAULT_SIZE; terrain[i].o = 3396000; terrain[i].bias = DEFAULT_BIAS; terrain[i].magn = DEFAULT_MAGN; /* Pack the header and data. */ send_event(EVENT_CREATE_TERRAIN); send_value(terrain[i].w); send_value(terrain[i].h); send_value(terrain[i].n); send_value(terrain[i].m); send_value(l); send_array(filename, l + 1, 1); /* Encapsulate this object in an entity. */ return send_create_entity(TYPE_TERRAIN, i); } } return -1; }