tilemap rendering
This commit is contained in:
parent
de0e18afa4
commit
5e041ffbf0
|
@ -8,9 +8,12 @@ void init() {
|
||||||
sprites[1].tile = 3;
|
sprites[1].tile = 3;
|
||||||
sprites[1].x = 10;
|
sprites[1].x = 10;
|
||||||
sprites[1].y = 100;
|
sprites[1].y = 100;
|
||||||
|
|
||||||
|
maps[0].tiles[20][1] = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tick() {
|
void tick() {
|
||||||
sprites[0].x += 1;
|
sprites[0].x += 1;
|
||||||
sprites[1].x += 2;
|
sprites[1].x += 2;
|
||||||
|
maps[0].scrollx += 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,15 +25,24 @@
|
||||||
#include "vec2i.h"
|
#include "vec2i.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
|
||||||
|
#define MAX_SPRITES 256
|
||||||
|
#define TILEMAP_MAX_SIZE 1024
|
||||||
|
#define MAX_TILEMAPS 4
|
||||||
|
|
||||||
struct gsa_sprite {
|
struct gsa_sprite {
|
||||||
u16 tile;
|
u16 tile;
|
||||||
i32 x, y;
|
i32 x, y;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_SPRITES 256
|
struct gsa_map {
|
||||||
|
u16 tiles[TILEMAP_MAX_SIZE][TILEMAP_MAX_SIZE];
|
||||||
|
i32 w, h;
|
||||||
|
i32 scrollx, scrolly;
|
||||||
|
};
|
||||||
|
|
||||||
extern struct gsa_sprite sprites[MAX_SPRITES];
|
extern struct gsa_sprite sprites[MAX_SPRITES];
|
||||||
extern struct sw_image8 *_gfx;
|
extern struct sw_image8 *_gfx;
|
||||||
|
extern struct gsa_map maps[MAX_TILEMAPS];
|
||||||
|
|
||||||
int gsa_main(int argc, char *argv[]);
|
int gsa_main(int argc, char *argv[]);
|
||||||
|
|
||||||
|
|
|
@ -16,4 +16,7 @@ typedef i8 bool;
|
||||||
#define true 1
|
#define true 1
|
||||||
#define false 0
|
#define false 0
|
||||||
|
|
||||||
|
i32 i32_max(i32 v1, i32 v2);
|
||||||
|
i32 i32_min(i32 v1, i32 v2);
|
||||||
|
|
||||||
#endif /* GUARD_649E63003BEAE79ECA2B813C4E131C9A */
|
#endif /* GUARD_649E63003BEAE79ECA2B813C4E131C9A */
|
||||||
|
|
|
@ -48,6 +48,7 @@ skunk_sources = [
|
||||||
'src/image8.c',
|
'src/image8.c',
|
||||||
'src/shader.c',
|
'src/shader.c',
|
||||||
'src/skunkworks.c',
|
'src/skunkworks.c',
|
||||||
|
'src/types.c',
|
||||||
'src/vec2i.c',
|
'src/vec2i.c',
|
||||||
'src/window.c'
|
'src/window.c'
|
||||||
]
|
]
|
||||||
|
|
30
src/gsa.c
30
src/gsa.c
|
@ -3,12 +3,14 @@
|
||||||
#include "gl.h"
|
#include "gl.h"
|
||||||
#include "image8.h"
|
#include "image8.h"
|
||||||
#include "shader.h"
|
#include "shader.h"
|
||||||
|
#include "types.h"
|
||||||
#include <gl/gl.h>
|
#include <gl/gl.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#define GSA_NOMAIN
|
#define GSA_NOMAIN
|
||||||
#include "gsa.h"
|
#include "gsa.h"
|
||||||
|
|
||||||
struct gsa_sprite sprites[256];
|
struct gsa_sprite sprites[256];
|
||||||
|
struct gsa_map maps[MAX_TILEMAPS];
|
||||||
|
|
||||||
struct sw_image8 *_gfx;
|
struct sw_image8 *_gfx;
|
||||||
struct sw_window *_win;
|
struct sw_window *_win;
|
||||||
|
@ -159,12 +161,36 @@ static void update_palette_gl() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _gsa_tick() {
|
void _gsa_tick() {
|
||||||
i32 i;
|
i32 i, x, y, startx, starty, endx, endy;
|
||||||
|
|
||||||
tick();
|
tick();
|
||||||
|
|
||||||
next_render_vert = 0;
|
next_render_vert = 0;
|
||||||
/* glBegin(GL_TRIANGLES); */
|
|
||||||
|
for(i = 0; i < MAX_TILEMAPS; ++i) {
|
||||||
|
startx = maps[i].scrollx / 16;
|
||||||
|
starty = maps[i].scrolly / 16;
|
||||||
|
endx = i32_min(TILEMAP_MAX_SIZE, startx + 20);
|
||||||
|
endy = i32_min(TILEMAP_MAX_SIZE, starty + 12);
|
||||||
|
startx = i32_max(0, startx);
|
||||||
|
starty = i32_max(0, starty);
|
||||||
|
|
||||||
|
for(x = startx; x <= endx; ++x) {
|
||||||
|
for(y = starty; y <= endy; ++y) {
|
||||||
|
u16 tile = maps[i].tiles[x][y];
|
||||||
|
if(tile) {
|
||||||
|
rect(
|
||||||
|
x * 16 - maps[i].scrollx,
|
||||||
|
y * 16 - maps[i].scrolly,
|
||||||
|
16,
|
||||||
|
16,
|
||||||
|
tile
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for(i = 0; i < MAX_SPRITES; ++i) {
|
for(i = 0; i < MAX_SPRITES; ++i) {
|
||||||
if(sprites[i].tile > 0) {
|
if(sprites[i].tile > 0) {
|
||||||
rect(sprites[i].x, sprites[i].y, 16, 16, sprites[i].tile);
|
rect(sprites[i].x, sprites[i].y, 16, 16, sprites[i].tile);
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
i32 i32_max(i32 v1, i32 v2) {
|
||||||
|
return v1 > v2 ? v1 : v2;
|
||||||
|
}
|
||||||
|
|
||||||
|
i32 i32_min(i32 v1, i32 v2) {
|
||||||
|
return v1 < v2 ? v1 : v2;
|
||||||
|
}
|
Loading…
Reference in New Issue