- display_manager.add_drawable(this, LAYER_BACKGROUNDTILES);
- display_manager.add_drawable(this, LAYER_TILES);
- display_manager.add_drawable(this, LAYER_FOREGROUNDTILES);
+ tilemanager = TileManager::instance();
+}
+
+TileMap::TileMap(LispReader& reader)
+ : solid(false), speed(1), width(0), height(0), layer(LAYER_TILES)
+{
+ tilemanager = TileManager::instance();
+
+ std::string layer;
+ if(reader.read_string("layer", layer)) {
+ if(layer == "background")
+ layer = LAYER_BACKGROUNDTILES;
+ else if(layer == "interactive")
+ layer = LAYER_TILES;
+ else if(layer == "foreground")
+ layer = LAYER_FOREGROUNDTILES;
+ else
+ std::cout << "Unknown layer '" << layer << "' in tilemap.\n";
+ }
+
+ reader.read_bool("solid", solid);
+ reader.read_float("speed", speed);
+
+ if(solid && speed != 1) {
+ std::cout << "Speed of solid tilemap is not 1. fixing.\n";
+ speed = 1;
+ }
+
+ if(!reader.read_int("width", width) ||
+ !reader.read_int("height", height))
+ throw std::runtime_error("No width or height specified in tilemap.");
+
+ if(!reader.read_int_vector("tiles", tiles))
+ throw std::runtime_error("No tiles in tilemap.");
+ if(int(tiles.size()) != width*height)
+ throw std::runtime_error("wrong number of tiles in tilemap.");