X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fgame.c;h=2007694df12ea6cff8a73cd6c091b9198c65c659;hb=6a120e64b1c3092d8929292882641d376ad0993b;hp=a997b692282e06c7323bc4a9cdc6d3cd4b1bde02;hpb=f242719e98650720b5d3ed43aca62a4f1fe3ec10;p=vrlugburz diff --git a/src/game.c b/src/game.c index a997b69..2007694 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; @@ -44,7 +44,6 @@ int game_init(void) if(load_level(&lvl, "data/test.lvl") == -1) { return -1; } - gen_level_geom(&lvl); init_player(&player); player.lvl = &lvl; @@ -60,26 +59,51 @@ void game_shutdown(void) free_program(sdr_foo); } -#define STEP_INTERVAL 1000 +#define STEP_INTERVAL 128 void update(float dt) { static long prev_step; - int step[][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}}; + int dir; + int step[][2] = {{1, 0}, {0, -1}, {-1, 0}, {0, 1}}; cgm_vec3 vdir = {0, 0, -1}; - upd_player_xform(&player); cgm_vmul_m3v3(&vdir, player.view_xform); - player.dir = (int)(2.0f * (atan2(vdir.z, vdir.x) + M_PI) / M_PI + 0.5f); + 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[INP_FWD]) { + 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) @@ -101,7 +125,9 @@ void game_display(void) glLoadMatrixf(proj_matrix); glMatrixMode(GL_MODELVIEW); - glLoadMatrixf(player.view_xform); + glLoadIdentity(); + glTranslatef(0, 0, -cam_dist); + glMultMatrixf(player.view_xform); draw_level(); @@ -120,11 +146,20 @@ static void draw_level(void) cell = lvl.cells; for(i=0; itile) { + cgm_mrotation_y(xform, cell->tilerot * M_PI / 2.0f); + + glPushMatrix(); + glMultMatrixf(xform); + draw_meshgroup(&cell->tile->mgrp); + glPopMatrix(); + } + for(k=0; knum_mgrp; k++) { draw_meshgroup(cell->mgrp + k); } @@ -151,6 +186,24 @@ void game_keyboard(int key, int press) game_quit(); return; } + + switch(key) { + case 'w': + input_state[INP_FWD] = press; + break; + + case 'a': + input_state[INP_LEFT] = press; + break; + + case 's': + input_state[INP_BACK] = press; + break; + + case 'd': + input_state[INP_RIGHT] = press; + break; + } } void game_mbutton(int bn, int press, int x, int y)