2 // C++ Implementation: tile
7 // Author: Tobias Glaesser <tobi.web@gmx.de>, (C) 2004
9 // Copyright: See COPYING file that comes with this distribution
15 TileManager* TileManager::instance_ = 0;
17 TileManager::TileManager()
19 std::string filename = datadir + "images/tilesets/main.stgt";
20 load_tileset(filename);
23 void TileManager::load_tileset(std::string filename)
25 lisp_object_t* root_obj = lisp_read_from_file(filename);
28 st_abort("Couldn't load file", filename);
30 if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-tiles") == 0)
32 lisp_object_t* cur = lisp_cdr(root_obj);
35 while(!lisp_nil_p(cur))
37 lisp_object_t* element = lisp_car(cur);
39 if (strcmp(lisp_symbol(lisp_car(element)), "tile") == 0)
42 std::vector<std::string> filenames;
44 Tile* tile = new Tile;
48 tile->fullbox = false;
50 tile->anim_speed = 25;
52 LispReader reader(lisp_cdr(element));
53 reader.read_int("id", &id);
54 reader.read_bool("solid", &tile->solid);
55 reader.read_bool("brick", &tile->brick);
56 reader.read_bool("ice", &tile->ice);
57 reader.read_bool("fullbox", &tile->fullbox);
58 reader.read_int("alpha", (int*)&tile->alpha);
59 reader.read_int("anim-speed", &tile->anim_speed);
60 reader.read_string_vector("images", &filenames);
62 for(std::vector<std::string>::iterator it = filenames.begin(); it != filenames.end(); ++it)
64 texture_type cur_image;
65 tile->images.push_back(cur_image);
66 texture_load(&tile->images[tile->images.size()-1],
67 datadir + "images/tilesets/" + (*it),
71 if (id+tileset_id >= int(tiles.size()))
72 tiles.resize(id+tileset_id+1);
74 tiles[id+tileset_id] = tile;
76 else if (strcmp(lisp_symbol(lisp_car(element)), "tileset") == 0)
78 LispReader reader(lisp_cdr(element));
80 reader.read_string("file", &filename);
81 filename = datadir + "images/tilesets/" + filename;
82 load_tileset(filename);
84 else if (strcmp(lisp_symbol(lisp_car(element)), "properties") == 0)
86 LispReader reader(lisp_cdr(element));
87 reader.read_int("id", &tileset_id);
92 puts("Unhandled symbol");