(0,0) at the bottom left.legacy
@@ -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() | ||||
@@ -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); | ||||
} | } | ||||
@@ -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(); | ||||
@@ -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(); | ||||
@@ -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; | ||||
@@ -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 == ',') | ||||
@@ -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(); | ||||
@@ -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(); | ||||
} | } | ||||
} | } | ||||
@@ -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() | ||||