Преглед на файлове

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

(0,0) at the bottom left.
legacy
Sam Hocevar sam преди 14 години
родител
ревизия
9e2c239e74
променени са 9 файла, в които са добавени 36 реда и са изтрити 25 реда
  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 Целия файл

@@ -64,10 +64,10 @@ void DebugSprite::TickDraw(float deltams)
int y = data->y;
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,
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()


+ 4
- 4
src/font.cpp Целия файл

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

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



+ 1
- 1
src/gtk/editor.cpp Целия файл

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

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

gtk_main();


+ 2
- 1
src/gtk/glmapview.cpp Целия файл

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

if (mapviewer)
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 */
Ticker::TickGame();


+ 2
- 2
src/input.cpp Целия файл

@@ -42,9 +42,9 @@ Float2 Input::GetAxis(int axis)
/* Simulate a joystick using the keyboard. This SDL call is free. */
Uint8 *keystate = SDL_GetKeyState(NULL);
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.y += up;
if (left && up)
{
f.x *= invsqrt2;


+ 5
- 1
src/map.cpp Целия файл

@@ -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))
parser++;
if (*parser == ',')


+ 1
- 1
src/test-map.cpp Целия файл

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

/* 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 */
new SdlInput();


+ 17
- 11
src/tileset.cpp Целия файл

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

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

@@ -65,6 +65,12 @@ TileSet::TileSet(char const *path)
SDL_Quit();
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()
@@ -113,8 +119,8 @@ char const *TileSet::GetName()

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);
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);
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);
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();
}
}


+ 1
- 1
src/video.cpp Целия файл

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

void Video::Clear()


Зареждане…
Отказ
Запис