X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fmain.c;h=c2192ee2e54ac7bc0db4ed72ecac7d21bdb1ee71;hb=2c28fb640747244df7009a86df557d22a07ad5b1;hp=0201cbc9f93b58ee3aa9073389c2931dbd940f2f;hpb=5e9496165d81a0f9923d67969dcb64a2f81ffdab;p=voxscape diff --git a/src/main.c b/src/main.c index 0201cbc..c2192ee 100644 --- a/src/main.c +++ b/src/main.c @@ -7,12 +7,20 @@ #include "glfb.h" #include "voxscape.h" +enum { + INP_FWD = 1, + INP_BACK = 2, + INP_LEFT = 4, + INP_RIGHT = 8 +}; + int init(void); void cleanup(void); void display(void); void idle(void); void reshape(int x, int y); void keyb(unsigned char key, int x, int y); +void keyb_up(unsigned char key, int x, int y); int win_width, win_height; @@ -20,6 +28,9 @@ int win_width, win_height; #define FB_H 480 unsigned int fb[FB_W * FB_H]; +unsigned int input; +int32_t pos[2]; + struct voxscape *vox; @@ -33,6 +44,7 @@ int main(int argc, char **argv) glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyb); + glutKeyboardUpFunc(keyb_up); glutIdleFunc(idle); if(init() == -1) { @@ -47,12 +59,15 @@ int main(int argc, char **argv) int init(void) { + pos[0] = 512 << 16; + pos[1] = 512 << 16; + if(!(vox = vox_open("data/height.png", "data/color.png"))) { return -1; } vox_framebuf(vox, FB_W, FB_H, fb); - vox_proj(vox, 45, 5, 100); - vox_view(vox, 512 << 16, 512 << 16, 0); + vox_proj(vox, 45, 1, 200); + vox_view(vox, pos[0], pos[1], 0); glfb_setup(FB_W, FB_H, GLFB_RGBA32, FB_W * 4); return 0; @@ -63,9 +78,25 @@ void cleanup(void) vox_free(vox); } +#define WALK_SPEED 0x40000 +void update(void) +{ + if(input & INP_FWD) pos[1] += WALK_SPEED; + if(input & INP_BACK) pos[1] -= WALK_SPEED; + if(input & INP_LEFT) pos[0] -= WALK_SPEED; + if(input & INP_RIGHT) pos[0] += WALK_SPEED; + + vox_view(vox, pos[0], pos[1], 0); +} + void display(void) { + update(); + + memset(fb, 0, sizeof fb); + vox_render(vox); + vox_sky_grad(vox, 0xcc77ff, 0x5588cc); glfb_update(fb); glfb_display(); @@ -93,6 +124,40 @@ void keyb(unsigned char key, int x, int y) case 27: exit(0); + case 'w': + input |= INP_FWD; + break; + case 's': + input |= INP_BACK; + break; + case 'a': + input |= INP_LEFT; + break; + case 'd': + input |= INP_RIGHT; + break; + + default: + break; + } +} + +void keyb_up(unsigned char key, int x, int y) +{ + switch(key) { + case 'w': + input &= ~INP_FWD; + break; + case 's': + input &= ~INP_BACK; + break; + case 'a': + input &= ~INP_LEFT; + break; + case 'd': + input &= ~INP_RIGHT; + break; + default: break; }