+#include "tile_manager.h"
+#include "app/globals.h"
+#include "utils/lispreader.h"
+#include "utils/lispwriter.h"
+
+TileMap::TileMap()
+ : solid(false), speed(1), width(0), height(0), layer(LAYER_TILES),
+ vertical_flip(false)
+{
+ tilemanager = TileManager::instance();
+
+ if(solid)
+ flags |= FLAG_SOLID;
+}
+
+TileMap::TileMap(LispReader& reader)
+ : solid(false), speed(1), width(0), height(0), layer(LAYER_TILES),
+ vertical_flip(false)
+{
+ tilemanager = TileManager::instance();
+
+ std::string layer_str;
+ if(reader.read_string("layer", layer_str)) {
+ if(layer_str == "background")
+ layer = LAYER_BACKGROUNDTILES;
+ else if(layer_str == "interactive")
+ layer = LAYER_TILES;
+ else if(layer_str == "foreground")
+ layer = LAYER_FOREGROUNDTILES;
+ else
+ std::cerr << "Unknown layer '" << layer_str << "' 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(solid)
+ flags |= FLAG_SOLID;
+
+ 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.");