@@ -7,8 +7,8 @@ noinst_LIBRARIES = liblolcore.a | |||
liblolcore_a_SOURCES = \ | |||
core.h tiler.cpp tiler.h dict.cpp dict.h \ | |||
audio.cpp audio.h scene.cpp scene.h font.cpp font.h layer.cpp layer.h \ | |||
map.cpp map.h entity.cpp entity.h ticker.cpp ticker.h lolgl.h \ | |||
audio.cpp audio.h scene.cpp scene.h font.cpp font.h \ | |||
entity.cpp entity.h ticker.cpp ticker.h lolgl.h \ | |||
tileset.cpp tileset.h forge.cpp forge.h video.cpp video.h \ | |||
world.cpp world.h sample.cpp sample.h sampler.cpp sampler.h \ | |||
profiler.cpp profiler.h text.cpp text.h emitter.cpp emitter.h numeric.h utils.h \ | |||
@@ -195,8 +195,6 @@ static inline int isnan(float f) | |||
// Other objects | |||
#include "dict.h" | |||
#include "map.h" | |||
#include "layer.h" | |||
#include "mesh/mesh.h" | |||
#include "mesh/primitive.h" | |||
#include "application/application.h" | |||
@@ -1,71 +0,0 @@ | |||
// | |||
// Lol Engine | |||
// | |||
// Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net> | |||
// This program is free software; you can redistribute it and/or | |||
// modify it under the terms of the Do What The Fuck You Want To | |||
// Public License, Version 2, as published by Sam Hocevar. See | |||
// http://www.wtfpl.net/ for more details. | |||
// | |||
#if defined HAVE_CONFIG_H | |||
# include "config.h" | |||
#endif | |||
#include <cstdlib> | |||
#include "core.h" | |||
using namespace std; | |||
namespace lol | |||
{ | |||
Layer::Layer(int w, int h, int z, int o, uint32_t *in_data) | |||
{ | |||
width = w; | |||
height = h; | |||
altitude = z; | |||
orientation = o; | |||
data = in_data; | |||
#if 0 | |||
fread(data, sizeof(unsigned int), width * height, fp); | |||
for (int n = 0; n < width * height; n++) | |||
{ | |||
unsigned int i = data[n]; | |||
// XXX: endianness swapping might be necessary here | |||
data[n] = i ? i - 1 : 0; | |||
} | |||
#endif | |||
} | |||
Layer::~Layer() | |||
{ | |||
free(data); | |||
} | |||
void Layer::Render(int /* x */, int /* y */, int /* z */) | |||
{ | |||
static int error = 1; | |||
if (error && !(error = 0)) | |||
Log::Error("FIXME: Layer::Render no longer works\n"); | |||
#if 0 | |||
for (int j = 0; j < height; j++) | |||
for (int i = 0; i < width; i++) | |||
if (data[j * width + i]) | |||
scene.AddTile(data[j * width + i], | |||
vec3(x + i * 32, | |||
y + j * 32 - altitude, | |||
altitude + z), | |||
orientation); | |||
#endif | |||
} | |||
int Layer::GetZ() | |||
{ | |||
return altitude; | |||
} | |||
} /* namespace lol */ | |||
@@ -1,43 +0,0 @@ | |||
// | |||
// Lol Engine | |||
// | |||
// Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net> | |||
// This program is free software; you can redistribute it and/or | |||
// modify it under the terms of the Do What The Fuck You Want To | |||
// Public License, Version 2, as published by Sam Hocevar. See | |||
// http://www.wtfpl.net/ for more details. | |||
// | |||
// | |||
// The Layer class | |||
// --------------- | |||
// A Layer object is a subset of a Map. | |||
// | |||
#if !defined __LOL_LAYER_H__ | |||
#define __LOL_LAYER_H__ | |||
#include <stdint.h> | |||
namespace lol | |||
{ | |||
class Layer | |||
{ | |||
public: | |||
Layer(int w, int h, int z, int o, uint32_t *data); | |||
~Layer(); | |||
int GetZ(); | |||
void Render(int x, int y, int z); | |||
private: | |||
int width, height, altitude, orientation; | |||
uint32_t *data; | |||
}; | |||
} /* namespace lol */ | |||
#endif // __LOL_LAYER_H__ | |||
@@ -159,9 +159,7 @@ | |||
<ClCompile Include="image\render\noise.cpp" /> | |||
<ClCompile Include="input\controller.cpp" /> | |||
<ClCompile Include="input\input.cpp" /> | |||
<ClCompile Include="layer.cpp" /> | |||
<ClCompile Include="light.cpp" /> | |||
<ClCompile Include="map.cpp" /> | |||
<ClCompile Include="math\constants.cpp" /> | |||
<ClCompile Include="math\geometry.cpp" /> | |||
<ClCompile Include="math\half.cpp" /> | |||
@@ -276,7 +274,6 @@ | |||
<ClInclude Include="input\input.h" /> | |||
<ClInclude Include="input\input_internal.h" /> | |||
<ClInclude Include="input\keys.h" /> | |||
<ClInclude Include="layer.h" /> | |||
<ClInclude Include="light.h" /> | |||
<ClInclude Include="loldebug.h" /> | |||
<ClInclude Include="lolgl.h" /> | |||
@@ -327,7 +324,6 @@ | |||
<ClInclude Include="lol\unit.h" /> | |||
<ClInclude Include="mesh\mesh.h" /> | |||
<ClInclude Include="mesh\primitive.h" /> | |||
<ClInclude Include="map.h" /> | |||
<ClInclude Include="messageservice.h" /> | |||
<ClInclude Include="numeric.h" /> | |||
<ClInclude Include="platform.h" /> | |||
@@ -207,18 +207,12 @@ | |||
<ClCompile Include="gradient.cpp"> | |||
<Filter>...</Filter> | |||
</ClCompile> | |||
<ClCompile Include="layer.cpp"> | |||
<Filter>...</Filter> | |||
</ClCompile> | |||
<ClCompile Include="light.cpp"> | |||
<Filter>...</Filter> | |||
</ClCompile> | |||
<ClCompile Include="ticker.cpp"> | |||
<Filter>...</Filter> | |||
</ClCompile> | |||
<ClCompile Include="map.cpp"> | |||
<Filter>...</Filter> | |||
</ClCompile> | |||
<ClCompile Include="platform.cpp"> | |||
<Filter>...</Filter> | |||
</ClCompile> | |||
@@ -477,9 +471,6 @@ | |||
<ClInclude Include="gradient.h"> | |||
<Filter>...</Filter> | |||
</ClInclude> | |||
<ClInclude Include="layer.h"> | |||
<Filter>...</Filter> | |||
</ClInclude> | |||
<ClInclude Include="light.h"> | |||
<Filter>...</Filter> | |||
</ClInclude> | |||
@@ -489,9 +480,6 @@ | |||
<ClInclude Include="lolgl.h"> | |||
<Filter>...</Filter> | |||
</ClInclude> | |||
<ClInclude Include="map.h"> | |||
<Filter>...</Filter> | |||
</ClInclude> | |||
<ClInclude Include="numeric.h"> | |||
<Filter>...</Filter> | |||
</ClInclude> | |||
@@ -570,9 +558,6 @@ | |||
<ClInclude Include="platform\ps3\threadbase.h"> | |||
<Filter>platform\ps3</Filter> | |||
</ClInclude> | |||
<ClInclude Include="map.h"> | |||
<Filter>src\...</Filter> | |||
</ClInclude> | |||
<ClInclude Include="lol\base\array.h"> | |||
<Filter>lol\base</Filter> | |||
</ClInclude> | |||
@@ -1,180 +0,0 @@ | |||
// | |||
// Lol Engine | |||
// | |||
// Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net> | |||
// This program is free software; you can redistribute it and/or | |||
// modify it under the terms of the Do What The Fuck You Want To | |||
// Public License, Version 2, as published by Sam Hocevar. See | |||
// http://www.wtfpl.net/ for more details. | |||
// | |||
#if defined HAVE_CONFIG_H | |||
# include "config.h" | |||
#endif | |||
#include <cstdio> | |||
#include <cstring> | |||
#include <cstdlib> | |||
#include <ctype.h> | |||
#include "core.h" | |||
using namespace std; | |||
namespace lol | |||
{ | |||
/* | |||
* LevelMap implementation class | |||
*/ | |||
class LevelMapData | |||
{ | |||
friend class LevelMap; | |||
static int const MAX_TILESETS = 128; | |||
private: | |||
TileSet *tilesets[MAX_TILESETS]; | |||
int ntilers; | |||
Array<Layer *> m_layers; | |||
int width, height; | |||
}; | |||
/* | |||
* Public LevelMap class | |||
*/ | |||
LevelMap::LevelMap(char const *path) | |||
: data(new LevelMapData()) | |||
{ | |||
data->ntilers = 0; | |||
data->width = 0; | |||
data->height = 0; | |||
char tmp[BUFSIZ]; | |||
int gids[LevelMapData::MAX_TILESETS]; | |||
uint32_t *tiles = nullptr; | |||
int level = 0, orientation = 0, ntiles = 0; | |||
FILE *fp = fopen(path, "r"); | |||
if (!fp) | |||
return; | |||
while (!feof(fp)) | |||
{ | |||
char str[1024]; | |||
int i, j, k; | |||
char a, b; | |||
/* Read a line, then decide what to do with it. */ | |||
fgets(tmp, BUFSIZ, fp); | |||
if (tiles && !strchr(tmp, '<')) | |||
{ | |||
/* We are in the process of reading layer data. Only stop | |||
* when we have read the expected number of tiles. */ | |||
char const *parser = tmp; | |||
while (ntiles < data->width * data->height) | |||
{ | |||
uint32_t code = 0; | |||
int id = atoi(parser); | |||
if (id) | |||
{ | |||
for (int n = 0; n < data->ntilers; n++) | |||
{ | |||
if (id < gids[n]) | |||
continue; | |||
if (n == data->ntilers - 1 | |||
|| id < gids[n + 1]) | |||
{ | |||
static int error = 1; | |||
if (error && !(error = 0)) | |||
Log::Error("tilesets no longer work this way\n"); | |||
//code = (data->tilesets[n] << 16) | (id - gids[n]); | |||
break; | |||
} | |||
} | |||
} | |||
int x = ntiles % data->width; | |||
int y = data->height - 1 - (ntiles / data->width); | |||
tiles[y * data->width + x] = code; | |||
ntiles++; | |||
while (isdigit(*parser)) | |||
parser++; | |||
if (*parser == ',') | |||
parser++; | |||
if (!isdigit(*parser)) | |||
break; | |||
} | |||
if (ntiles == data->width * data->height) | |||
{ | |||
Layer *l = new Layer(data->width, data->height, | |||
level, orientation, tiles); | |||
data->m_layers.Push(l); | |||
tiles = nullptr; | |||
//Log::Debug("new layer %ix%i\n", data->width, data->height); | |||
} | |||
} | |||
else if (sscanf(tmp, " <tileset firstgid=\"%i\"", &i) == 1) | |||
{ | |||
/* This is a tileset description. Remember its first gid value. */ | |||
gids[data->ntilers] = i; | |||
} | |||
else if (sscanf(tmp, " <image source=\"%[^\"]\"", str) == 1) | |||
{ | |||
/* This is a tileset image file. Associate it with firstgid. */ | |||
data->tilesets[data->ntilers] = Tiler::Register(str, ivec2(32), | |||
ivec2::zero); | |||
data->ntilers++; | |||
//Log::Debug("new tiler %s\n", str); | |||
} | |||
else if (sscanf(tmp, " <layer name=\"%c%i%c%*[^\"]\" " | |||
"width=\"%i\" height=\"%i\"", &a, &i, &b, &j, &k) == 5) | |||
{ | |||
/* This is a layer description. Prepare to read the data. */ | |||
orientation = toupper(a) == 'V' ? 1 : 0; | |||
level = i * 32; | |||
data->width = j; | |||
data->height = k; | |||
tiles = (uint32_t *)malloc(j * k * sizeof(uint32_t)); | |||
ntiles = 0; | |||
} | |||
} | |||
fclose(fp); | |||
} | |||
LevelMap::~LevelMap() | |||
{ | |||
for (int i = 0; i < data->ntilers; i++) | |||
Tiler::Deregister(data->tilesets[i]); | |||
for (int i = 0; i < data->m_layers.Count(); i++) | |||
delete data->m_layers[i]; | |||
delete data; | |||
} | |||
void LevelMap::Render(int x, int y, int z) | |||
{ | |||
for (int i = 0; i < data->m_layers.Count(); i++) | |||
data->m_layers[i]->Render(x, y, z); | |||
} | |||
int LevelMap::GetWidth() | |||
{ | |||
return data->width * 32; | |||
} | |||
int LevelMap::GetHeight() | |||
{ | |||
return data->height * 32; | |||
} | |||
} /* namespace lol */ | |||
@@ -1,43 +0,0 @@ | |||
// | |||
// Lol Engine | |||
// | |||
// Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net> | |||
// This program is free software; you can redistribute it and/or | |||
// modify it under the terms of the Do What The Fuck You Want To | |||
// Public License, Version 2, as published by Sam Hocevar. See | |||
// http://www.wtfpl.net/ for more details. | |||
// | |||
// | |||
// The LevelMap class | |||
// ------------------ | |||
// A LevelMap object is a collection of Layers and other information (to be | |||
// determined later). | |||
// | |||
#if !defined __LOL_LEVELMAP_H__ | |||
#define __LOL_LEVELMAP_H__ | |||
namespace lol | |||
{ | |||
class LevelMapData; | |||
class LevelMap | |||
{ | |||
public: | |||
LevelMap(char const *path); | |||
~LevelMap(); | |||
void Render(int x, int y, int z); | |||
int GetWidth(); | |||
int GetHeight(); | |||
private: | |||
LevelMapData *data; | |||
}; | |||
} /* namespace lol */ | |||
#endif // __LOL_MAP_H__ | |||