Browse Source

Support tilesets larger than 512x512 and switch the coordinates system to

(0,0) at the bottom left.
legacy
Sam Hocevar sam 14 years ago
parent
commit
9e2c239e74
9 changed files with 36 additions and 25 deletions
  1. +3
    -3
      src/debugsprite.cpp
  2. +4
    -4
      src/font.cpp
  3. +1
    -1
      src/gtk/editor.cpp
  4. +2
    -1
      src/gtk/glmapview.cpp
  5. +2
    -2
      src/input.cpp
  6. +5
    -1
      src/map.cpp
  7. +1
    -1
      src/test-map.cpp
  8. +17
    -11
      src/tileset.cpp
  9. +1
    -1
      src/video.cpp

+ 3
- 3
src/debugsprite.cpp View File

@@ -64,10 +64,10 @@ void DebugSprite::TickDraw(float deltams)
int y = data->y; int y = data->y;
int z = data->z; int z = data->z;


data->game->GetScene()->AddTile((data->tiler << 16) | 15,
x - 16, y - 32, z + 32, 1);
data->game->GetScene()->AddTile((data->tiler << 16) | 31, data->game->GetScene()->AddTile((data->tiler << 16) | 31,
x - 16, y - 32, z, 1);
x - 16, y, z + 32, 1);
data->game->GetScene()->AddTile((data->tiler << 16) | 15,
x - 16, y, z, 1);
} }


DebugSprite::~DebugSprite() DebugSprite::~DebugSprite()


+ 4
- 4
src/font.cpp View File

@@ -120,13 +120,13 @@ void Font::Print(int x, int y, char const *str)


if (ch != ' ') if (ch != ' ')
{ {
glTexCoord2f(tx, ty);
glTexCoord2f(tx, ty + .0625f);
glVertex2f(x, y); glVertex2f(x, y);
glTexCoord2f(tx + .0625f, ty);
glVertex2f(x + data->width, y);
glTexCoord2f(tx + .0625f, ty + .0625f); glTexCoord2f(tx + .0625f, ty + .0625f);
glVertex2f(x + data->width, y);
glTexCoord2f(tx + .0625f, ty);
glVertex2f(x + data->width, y + data->height); glVertex2f(x + data->width, y + data->height);
glTexCoord2f(tx, ty + .0625f);
glTexCoord2f(tx, ty);
glVertex2f(x, y + data->height); glVertex2f(x, y + data->height);
} }




+ 1
- 1
src/gtk/editor.cpp View File

@@ -56,7 +56,7 @@ int main(int argc, char **argv)
GTK_SIGNAL_FUNC(delayed_quit), NULL); GTK_SIGNAL_FUNC(delayed_quit), NULL);
g_object_unref(G_OBJECT(builder)); g_object_unref(G_OBJECT(builder));


glmapview->LoadMap("maps/testmap.tmx");
glmapview->LoadMap("maps/testmap2.tmx");
new DebugFps(); new DebugFps();


gtk_main(); gtk_main();


+ 2
- 1
src/gtk/glmapview.cpp View File

@@ -104,7 +104,8 @@ gboolean GlMapView::IdleTick()


if (mapviewer) if (mapviewer)
mapviewer->SetPOV(gtk_adjustment_get_value(hadj), mapviewer->SetPOV(gtk_adjustment_get_value(hadj),
gtk_adjustment_get_value(vadj));
mapviewer->GetHeight() - glarea->allocation.height
- gtk_adjustment_get_value(vadj));


/* Tick the game */ /* Tick the game */
Ticker::TickGame(); Ticker::TickGame();


+ 2
- 2
src/input.cpp View File

@@ -42,9 +42,9 @@ Float2 Input::GetAxis(int axis)
/* Simulate a joystick using the keyboard. This SDL call is free. */ /* Simulate a joystick using the keyboard. This SDL call is free. */
Uint8 *keystate = SDL_GetKeyState(NULL); Uint8 *keystate = SDL_GetKeyState(NULL);
int left = keystate[SDLK_d] - (keystate[SDLK_a] | keystate[SDLK_q]); int left = keystate[SDLK_d] - (keystate[SDLK_a] | keystate[SDLK_q]);
int up = keystate[SDLK_s] - (keystate[SDLK_w] | keystate[SDLK_z]);
f.y += up;
int up = (keystate[SDLK_w] | keystate[SDLK_z]) - keystate[SDLK_s] ;
f.x += left; f.x += left;
f.y += up;
if (left && up) if (left && up)
{ {
f.x *= invsqrt2; f.x *= invsqrt2;


+ 5
- 1
src/map.cpp View File

@@ -90,7 +90,11 @@ Map::Map(char const *path)
} }
} }


tiles[ntiles++] = code;
int x = ntiles % data->width;
int y = data->height - 1 - (ntiles / data->width);
tiles[y * data->width + x] = code;
ntiles++;

while (isdigit(*parser)) while (isdigit(*parser))
parser++; parser++;
if (*parser == ',') if (*parser == ',')


+ 1
- 1
src/test-map.cpp View File

@@ -45,7 +45,7 @@ int main(int argc, char **argv)
Video::Setup(video->w, video->h); Video::Setup(video->w, video->h);


/* Create a game */ /* Create a game */
Game *game = new Game("maps/testmap.tmx");
Game *game = new Game("maps/testmap2.tmx");


/* Register an input driver and some debug stuff */ /* Register an input driver and some debug stuff */
new SdlInput(); new SdlInput();


+ 17
- 11
src/tileset.cpp View File

@@ -37,7 +37,8 @@ class TileSetData
private: private:
char *name; char *name;
int *tiles; int *tiles;
int ntiles;
int nw, nh, ntiles;
float tx, ty;


SDL_Surface *img; SDL_Surface *img;
GLuint texture; GLuint texture;
@@ -52,7 +53,6 @@ TileSet::TileSet(char const *path)
data = new TileSetData(); data = new TileSetData();
data->name = strdup(path); data->name = strdup(path);
data->tiles = NULL; data->tiles = NULL;
data->ntiles = 0;
data->img = NULL; data->img = NULL;
data->texture = 0; data->texture = 0;


@@ -65,6 +65,12 @@ TileSet::TileSet(char const *path)
SDL_Quit(); SDL_Quit();
exit(1); exit(1);
} }

data->nw = data->img->w / 32;
data->nh = data->img->h / 32;
data->ntiles = data->nw * data->nh;
data->tx = 32.0f / data->img->w;
data->ty = 32.0f / data->img->h;
} }


TileSet::~TileSet() TileSet::~TileSet()
@@ -113,8 +119,8 @@ char const *TileSet::GetName()


void TileSet::BlitTile(uint32_t id, int x, int y, int z, int o) void TileSet::BlitTile(uint32_t id, int x, int y, int z, int o)
{ {
float tx = .0625f * (id & 0xf);
float ty = .0625f * ((id >> 4) & 0xf);
float tx = data->tx * ((id & 0xffff) % data->nw);
float ty = data->ty * ((id & 0xffff) / data->nw);


float sqrt2 = sqrtf(2.0f); float sqrt2 = sqrtf(2.0f);
int off = o ? 32 : 0; int off = o ? 32 : 0;
@@ -123,14 +129,14 @@ void TileSet::BlitTile(uint32_t id, int x, int y, int z, int o)
{ {
glBindTexture(GL_TEXTURE_2D, data->texture); glBindTexture(GL_TEXTURE_2D, data->texture);
glBegin(GL_QUADS); glBegin(GL_QUADS);
glTexCoord2f(tx, ty + data->ty);
glVertex3f(x, sqrt2 * (y - 70 + off), sqrt2 * (z + off));
glTexCoord2f(tx + data->tx, ty + data->ty);
glVertex3f(x + 32, sqrt2 * (y - 70 + off), sqrt2 * (z + off));
glTexCoord2f(tx + data->tx, ty);
glVertex3f(x + 32, sqrt2 * (y - 38), sqrt2 * z);
glTexCoord2f(tx, ty); glTexCoord2f(tx, ty);
glVertex3f(x, sqrt2 * (y + off), sqrt2 * (z + off));
glTexCoord2f(tx + .0625f, ty);
glVertex3f(x + 32, sqrt2 * (y + off), sqrt2 * (z + off));
glTexCoord2f(tx + .0625f, ty + .0625f);
glVertex3f(x + 32, sqrt2 * (y + 32), sqrt2 * z);
glTexCoord2f(tx, ty + .0625f);
glVertex3f(x, sqrt2 * (y + 32), sqrt2 * z);
glVertex3f(x, sqrt2 * (y - 38), sqrt2 * z);
glEnd(); glEnd();
} }
} }


+ 1
- 1
src/video.cpp View File

@@ -43,7 +43,7 @@ void Video::Setup(int width, int height)
/* Projection matrix: once and for all */ /* Projection matrix: once and for all */
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glLoadIdentity();
glOrtho(0, width, height, 0, -(width + height), width + height);
glOrtho(0, width, 0, height, -(width + height), width + height);
} }


void Video::Clear() void Video::Clear()


Loading…
Cancel
Save