X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fgame.c;h=3194196faedbcb15b3dd9ddf5ca790403c586794;hb=8c3ae60742d38e2dbcd9811b16966933df0a5c29;hp=65c7636743db6ccb4f3a2a181d3468720338bed8;hpb=3c7da38bbf5936211348c5b6c31874364060dca8;p=vrlugburz diff --git a/src/game.c b/src/game.c index 65c7636..3194196 100644 --- a/src/game.c +++ b/src/game.c @@ -18,7 +18,7 @@ float win_aspect; int mouse_x, mouse_y; int bnstate[8]; -float cam_dist = 10; +float cam_dist; float view_matrix[16], proj_matrix[16]; unsigned int sdr_foo; @@ -51,8 +51,6 @@ int game_init(void) player.cx = lvl.px; player.cy = lvl.py; - printf("start pos: %d,%d\n", player.cx, player.cy); - return 0; } @@ -62,8 +60,63 @@ void game_shutdown(void) free_program(sdr_foo); } +#define STEP_INTERVAL 128 + +void update(float dt) +{ + static long prev_step; + int dir; + int step[][2] = {{1, 0}, {0, -1}, {-1, 0}, {0, 1}}; + + cgm_vec3 vdir = {0, 0, -1}; + + cgm_vmul_m3v3(&vdir, player.view_xform); + + player.dir = (int)(2.0f * (-atan2(vdir.z, vdir.x) + M_PI) / M_PI + 0.5f) & 3; + + if(time_msec - prev_step >= STEP_INTERVAL) { + if(input_state[INP_FWD]) { + player.cx += step[player.dir][0]; + player.cy += step[player.dir][1]; + prev_step = time_msec; + printf("step[%d] %d,%d\n", player.dir, player.cx, player.cy); + } + if(input_state[INP_BACK]) { + player.cx -= step[player.dir][0]; + player.cy -= step[player.dir][1]; + prev_step = time_msec; + printf("step[%d] %d,%d\n", player.dir, player.cx, player.cy); + } + if(input_state[INP_LEFT]) { + dir = (player.dir + 3) & 3; + player.cx += step[dir][0]; + player.cy += step[dir][1]; + prev_step = time_msec; + printf("step[%d] %d,%d\n", player.dir, player.cx, player.cy); + } + if(input_state[INP_RIGHT]) { + dir = (player.dir + 1) & 3; + player.cx += step[dir][0]; + player.cy += step[dir][1]; + prev_step = time_msec; + printf("step[%d] %d,%d\n", player.dir, player.cx, player.cy); + } + memset(input_state, 0, sizeof input_state); + } + + upd_player_xform(&player); +} + void game_display(void) { + float dt; + static long prev_msec; + + dt = (prev_msec - time_msec) / 1000.0f; + prev_msec = time_msec; + + update(dt); + glClearColor(0.1, 0.1, 0.1, 1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -72,9 +125,10 @@ void game_display(void) glMatrixMode(GL_PROJECTION); glLoadMatrixf(proj_matrix); - upd_player_xform(&player); glMatrixMode(GL_MODELVIEW); - glLoadMatrixf(player.view_xform); + glLoadIdentity(); + glTranslatef(0, 0, -cam_dist); + glMultMatrixf(player.view_xform); draw_level(); @@ -93,7 +147,7 @@ static void draw_level(void) cell = lvl.cells; for(i=0; i