Browse Source

Start to handle differences between vertical and horizontal tiles.

legacy
Sam Hocevar sam 14 years ago
parent
commit
2edd7f4dbf
7 changed files with 46 additions and 14 deletions
  1. +1
    -1
      src/debugsprite.cpp
  2. +31
    -3
      src/scene.cpp
  3. +1
    -1
      src/sdlinput.cpp
  4. +2
    -2
      src/tiler.cpp
  5. +1
    -1
      src/tiler.h
  6. +9
    -5
      src/tileset.cpp
  7. +1
    -1
      src/tileset.h

+ 1
- 1
src/debugsprite.cpp View File

@@ -53,7 +53,7 @@ void DebugSprite::TickRender(float delta_time)
Asset::TickRender(delta_time); Asset::TickRender(delta_time);


data->game->GetScene()->AddTile((data->tiler << 16) | 15, 300, 200, 32, 1); data->game->GetScene()->AddTile((data->tiler << 16) | 15, 300, 200, 32, 1);
data->game->GetScene()->AddTile((data->tiler << 16) | 31, 300, 232, 0, 1);
data->game->GetScene()->AddTile((data->tiler << 16) | 31, 300, 200, 0, 1);
} }


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


+ 31
- 3
src/scene.cpp View File

@@ -7,7 +7,19 @@
# include "config.h" # include "config.h"
#endif #endif


#include <stdlib.h>
#include <cstdlib>
#include <cmath>

#ifdef WIN32
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
#endif
#if defined __APPLE__ && defined __MACH__
# include <OpenGL/gl.h>
#else
# define GL_GLEXT_PROTOTYPES
# include <GL/gl.h>
#endif


#include "scene.h" #include "scene.h"
#include "tiler.h" #include "tiler.h"
@@ -15,7 +27,7 @@
struct Tile struct Tile
{ {
uint32_t prio, code; uint32_t prio, code;
int x, y;
int x, y, z, o;
}; };


/* /*
@@ -64,6 +76,8 @@ void Scene::AddTile(uint32_t code, int x, int y, int z, int o)
data->tiles[data->ntiles].code = code; data->tiles[data->ntiles].code = code;
data->tiles[data->ntiles].x = x; data->tiles[data->ntiles].x = x;
data->tiles[data->ntiles].y = y; data->tiles[data->ntiles].y = y;
data->tiles[data->ntiles].z = z;
data->tiles[data->ntiles].o = o;
data->ntiles++; data->ntiles++;
} }


@@ -71,8 +85,22 @@ void Scene::Render() // XXX: rename to Blit()
{ {
qsort(data->tiles, data->ntiles, sizeof(Tile), SceneData::Compare); qsort(data->tiles, data->ntiles, sizeof(Tile), SceneData::Compare);


// XXX: debug stuff
glPushMatrix();
static float f = 0.0f;
f += 0.05f;
glTranslatef(320.0f, 240.0f, 0.0f);
glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
glRotatef(30.0f * sinf(f), 0.0f, 0.0f, 1.0f);
//glRotatef(30.0f, 0.0f, 0.0f, 1.0f);
glTranslatef(-320.0f, -240.0f, 0.0f);

for (int i = 0; i < data->ntiles; i++) for (int i = 0; i < data->ntiles; i++)
Tiler::Render(data->tiles[i].code, data->tiles[i].x, data->tiles[i].y);
Tiler::BlitTile(data->tiles[i].code, data->tiles[i].x,
data->tiles[i].y, data->tiles[i].z, data->tiles[i].o);

glPopMatrix();
// XXX: end of debug stuff


free(data->tiles); free(data->tiles);
data->tiles = 0; data->tiles = 0;


+ 1
- 1
src/sdlinput.cpp View File

@@ -50,7 +50,7 @@ void SdlInput::TickGame(float delta_time)
/* Handle mouse input */ /* Handle mouse input */
int mx, my; int mx, my;
SDL_GetMouseState(&mx, &my); SDL_GetMouseState(&mx, &my);
data->game->SetMouse(mx * (640 - 32) / 640, my * (480 - 32) / 480);
data->game->SetMouse(mx * (640 - 32) / 320 - 320, my * (480 - 32) / 240 - 240);


/* Handle keyboard and WM input */ /* Handle keyboard and WM input */
SDL_Event event; SDL_Event event;


+ 2
- 2
src/tiler.cpp View File

@@ -94,10 +94,10 @@ void Tiler::Deregister(int id)
data->tilesets[id] = NULL; data->tilesets[id] = NULL;
} }


void Tiler::Render(uint32_t code, int x, int y)
void Tiler::BlitTile(uint32_t code, int x, int y, int z, int o)
{ {
int id = (code >> 16) - 1; /* ID 0 is for the empty tileset */ int id = (code >> 16) - 1; /* ID 0 is for the empty tileset */


data->tilesets[id]->BlitTile(code & 0xffff, x, y);
data->tilesets[id]->BlitTile(code & 0xffff, x, y, z, o);
} }



+ 1
- 1
src/tiler.h View File

@@ -20,7 +20,7 @@ public:
static int Register(char const *path); static int Register(char const *path);
static void Deregister(int id); static void Deregister(int id);


static void Render(uint32_t code, int x, int y);
static void BlitTile(uint32_t code, int x, int y, int z, int o);
}; };


#endif // __DH_TILER_H__ #endif // __DH_TILER_H__


+ 9
- 5
src/tileset.cpp View File

@@ -8,6 +8,7 @@
#endif #endif


#include <cstdlib> #include <cstdlib>
#include <cmath>


#ifdef WIN32 #ifdef WIN32
# define WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN
@@ -108,23 +109,26 @@ char const *TileSet::GetName()
return data->name; return data->name;
} }


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


float sqrt2 = sqrtf(2.0f);
int off = o ? 32 : 0;

if (!data->img) if (!data->img)
{ {
glBindTexture(GL_TEXTURE_2D, data->texture); glBindTexture(GL_TEXTURE_2D, data->texture);
glBegin(GL_QUADS); glBegin(GL_QUADS);
glTexCoord2f(tx, ty); glTexCoord2f(tx, ty);
glVertex2f(x, y);
glVertex3f(x, sqrt2 * (y + off), sqrt2 * (z + off));
glTexCoord2f(tx + .0625f, ty); glTexCoord2f(tx + .0625f, ty);
glVertex2f(x + 32, y);
glVertex3f(x + 32, sqrt2 * (y + off), sqrt2 * (z + off));
glTexCoord2f(tx + .0625f, ty + .0625f); glTexCoord2f(tx + .0625f, ty + .0625f);
glVertex2f(x + 32, y + 32);
glVertex3f(x + 32, sqrt2 * (y + 32), sqrt2 * z);
glTexCoord2f(tx, ty + .0625f); glTexCoord2f(tx, ty + .0625f);
glVertex2f(x, y + 32);
glVertex3f(x, sqrt2 * (y + 32), sqrt2 * z);
glEnd(); glEnd();
} }
} }


+ 1
- 1
src/tileset.h View File

@@ -35,7 +35,7 @@ public:
/* New methods */ /* New methods */
char const *GetName(); char const *GetName();


void BlitTile(uint32_t id, int x, int y);
void BlitTile(uint32_t id, int x, int y, int z, int o);


private: private:
TileSetData *data; TileSetData *data;


Loading…
Cancel
Save