diff --git a/src/layer.cpp b/src/layer.cpp index 53b03638..b74d01eb 100644 --- a/src/layer.cpp +++ b/src/layer.cpp @@ -1,25 +1,14 @@ #include "layer.h" -Layer::Layer(char const *name, int w, int h, FILE *fp) +Layer::Layer(int w, int h, int z, char const *base64) { width = w; height = h; + level = z; data = new unsigned int[w * h]; - if (sscanf(name, "Ground %d", &z) == 1) - ; - else if (sscanf(name, "Ground Decal %d", &z) == 1) - ; - else if (sscanf(name, "Object %d", &z) == 1) - z++; - else if (sscanf(name, "Wall %d", &z) == 1) - z++; - else if (sscanf(name, "Wall Decal %d", &z) == 1) - z++; - else - z = -1; - +#if 0 fread(data, sizeof(unsigned int), width * height, fp); for (int n = 0; n < width * height; n++) { @@ -27,6 +16,7 @@ Layer::Layer(char const *name, int w, int h, FILE *fp) // XXX: endianness swapping might be necessary here data[n] = i ? i - 1 : 0; } +#endif } Layer::~Layer() @@ -36,7 +26,7 @@ Layer::~Layer() int Layer::GetZ() { - return z; + return level; } unsigned int Layer::GetTile(int x, int y) diff --git a/src/layer.h b/src/layer.h index eb25e905..10f9ae76 100644 --- a/src/layer.h +++ b/src/layer.h @@ -11,14 +11,14 @@ class Layer { public: - Layer(char const *name, int w, int h, FILE *fp); + Layer(int w, int h, int z, char const *base64); ~Layer(); int GetZ(); unsigned int GetTile(int x, int y); private: - int width, height, z; + int width, height, level; unsigned int *data; }; diff --git a/src/map.cpp b/src/map.cpp index e74d3d52..9dc89228 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -9,6 +9,58 @@ Map::Map(char const *path) : layers(0), nlayers(0) { + char tmp[BUFSIZ]; + int firstgid = 0, width = 0, height = 0, level = 0, data = 0; + + FILE *fp = fopen(path, "r"); + + if (!fp) + return; + + while (!feof(fp)) + { + char str[1024]; + int i, j, k; + char a, b; + + fgets(tmp, BUFSIZ, fp); + + if (data) + { + if (--data == 0) + { + layers[nlayers] = new Layer(width, height, level, tmp); + nlayers++; + } + } + else if (sscanf(tmp, "