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;
16 std::vector<TileGroup>* TileManager::tilegroups_ = 0;
18 TileManager::TileManager()
20 std::string filename = datadir + "images/tilesets/supertux.stgt";
21 load_tileset(filename);
24 void TileManager::load_tileset(std::string filename)
26 lisp_object_t* root_obj = lisp_read_from_file(filename);
29 st_abort("Couldn't load file", filename);
31 if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-tiles") == 0)
33 lisp_object_t* cur = lisp_cdr(root_obj);
36 while(!lisp_nil_p(cur))
38 lisp_object_t* element = lisp_car(cur);
40 if (strcmp(lisp_symbol(lisp_car(element)), "tile") == 0)
42 std::vector<std::string> editor_filenames;
44 Tile* tile = new Tile;
50 tile->fullbox = false;
54 tile->anim_speed = 25;
56 LispReader reader(lisp_cdr(element));
57 assert(reader.read_int("id", &tile->id));
58 reader.read_bool("solid", &tile->solid);
59 reader.read_bool("brick", &tile->brick);
60 reader.read_bool("ice", &tile->ice);
61 reader.read_bool("water", &tile->water);
62 reader.read_bool("fullbox", &tile->fullbox);
63 reader.read_bool("distro", &tile->distro);
64 reader.read_int("data", &tile->data);
65 reader.read_int("anim-speed", &tile->anim_speed);
66 reader.read_int("next-tile", &tile->next_tile);
67 reader.read_string_vector("images", &tile->filenames);
68 reader.read_string_vector("editor-images", &editor_filenames);
70 for(std::vector<std::string>::iterator it = tile->
72 it != tile->filenames.end();
75 texture_type cur_image;
76 tile->images.push_back(cur_image);
77 texture_load(&tile->images[tile->images.size()-1],
78 datadir + "images/tilesets/" + (*it),
81 for(std::vector<std::string>::iterator it = editor_filenames.begin();
82 it != editor_filenames.end();
85 texture_type cur_image;
86 tile->editor_images.push_back(cur_image);
87 texture_load(&tile->editor_images[tile->editor_images.size()-1],
88 datadir + "images/tilesets/" + (*it),
92 if (tile->id + tileset_id >= int(tiles.size())
94 tiles.resize(tile->id + tileset_id+1);
96 tiles[tile->id + tileset_id] = tile;
98 else if (strcmp(lisp_symbol(lisp_car(element)), "tileset") == 0)
100 LispReader reader(lisp_cdr(element));
101 std::string filename;
102 reader.read_string("file", &filename);
103 filename = datadir + "images/tilesets/" + filename;
104 load_tileset(filename);
106 else if (strcmp(lisp_symbol(lisp_car(element)), "tilegroup") == 0)
110 tilegroups_ = new std::vector<TileGroup>;
111 tilegroups_->push_back(new_);
112 LispReader reader(lisp_cdr(element));
113 tilegroups_->back().name;
114 reader.read_string("name", &tilegroups_->back().name);
115 reader.read_int_vector("tiles", &tilegroups_->back().tiles);
117 else if (strcmp(lisp_symbol(lisp_car(element)), "properties") == 0)
119 LispReader reader(lisp_cdr(element));
120 reader.read_int("id", &tileset_id);
125 puts("Unhandled symbol");