- if(iter.item() == "tile") {
- Tile* tile = new Tile();
- tile->parse(*(iter.lisp()));
- while(tile->id >= tiles.size()) {
- tiles.push_back(0);
- }
- if(tiles[tile->id] != 0) {
- log_warning << "Tile with ID " << tile->id << " redefined" << std::endl;
- }
- tiles[tile->id] = tile;
- } else if(iter.item() == "tilegroup") {
- TileGroup tilegroup;
- const lisp::Lisp* tilegroup_lisp = iter.lisp();
- tilegroup_lisp->get("name", tilegroup.name);
- tilegroup_lisp->get_vector("tiles", tilegroup.tiles);
- tilegroups.insert(tilegroup);
- } else if (iter.item() == "tiles") {
- // List of ids (use 0 if the tile should be ignored)
- std::vector<unsigned int> ids;
- // List of attributes of the tile
- std::vector<unsigned int> attributes;
- std::string image;
-
- // width and height of the image in tile units, this is used for two
- // purposes:
- // a) so we don't have to load the image here to know its dimensions
- // b) so that the resulting 'tiles' entry is more robust,
- // ie. enlarging the image won't break the tile id mapping
- // FIXME: height is actually not used, since width might be enough for
- // all purposes, still feels somewhat more natural this way
- unsigned int width = 0;
- unsigned int height = 0;
-
- iter.lisp()->get_vector("ids", ids);
- iter.lisp()->get_vector("attributes", attributes);
- iter.lisp()->get("image", image);
- iter.lisp()->get("width", width);
- iter.lisp()->get("height", height);