diff options
author | taw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5> | 2008-07-25 22:37:03 +0000 |
---|---|---|
committer | taw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5> | 2008-07-25 22:37:03 +0000 |
commit | 624f89ba0f43fd38787817b9ae42bb6adde5241b (patch) | |
tree | 73eda21101a603052b031f44d0a7f69399a94ccf /src | |
parent | d6d128b9a8734ee430f96228ceaf8f1f945189b5 (diff) |
Initial mouse stuff (needs work)
git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@172 84d2e878-0bd5-11dd-ad15-13eda11d74c5
Diffstat (limited to 'src')
-rw-r--r-- | src/game.c | 1 | ||||
-rw-r--r-- | src/main.c | 21 | ||||
-rw-r--r-- | src/render.c | 13 | ||||
-rw-r--r-- | src/types.h | 1 |
4 files changed, 24 insertions, 12 deletions
@@ -284,6 +284,7 @@ Game *game_new(int width, int height, GameOptions gameopts) { g->cur_room_z = 4; g->num_rooms = 0; g->view_angle = deg2rad(+20.0); + g->view_yaw = 0.0; g->view_dist = 5.0; g->paused = 0; g->pause_rel = 1; @@ -71,6 +71,11 @@ static void main_help(const char *n) { main_version(); } +int main_event_filter(const SDL_Event *event) { + if ( event->type == SDL_MOUSEMOTION ) return 0; + return 1; +} + int main(int argc, char *argv[]) { SDL_Event event; @@ -188,8 +193,9 @@ int main(int argc, char *argv[]) { } SDL_WM_SetCaption("Thrust3D", "Thrust3D"); - SDL_ShowCursor(SDL_ENABLE); - SDL_WM_GrabInput(SDL_GRAB_ON); + SDL_ShowCursor(SDL_DISABLE); + //SDL_WM_GrabInput(SDL_GRAB_ON); + SDL_SetEventFilter(main_event_filter); /* World setup */ Game *game; @@ -199,6 +205,8 @@ int main(int argc, char *argv[]) { finished = 0; while ( !finished ) { + int mx, my; + /* Timer advances only when game is not paused */ if ( !game->paused ) { game->tlast = t; @@ -230,10 +238,6 @@ int main(int argc, char *argv[]) { if ( event.key.keysym.sym == SDLK_DOWN ) game->reverse = 0; if ( event.key.keysym.sym == SDLK_p ) game->pause_rel = 1; break; - case SDL_MOUSEMOTION : - printf("Mouse! %i\n", event.motion.y); - //game->view_angle -= event.motion.yrel*0.001; - break; case SDL_VIDEOEXPOSE : /* Don't bother redrawing if not paused - not long to wait! */ if ( game->paused ) render_draw(game, t); @@ -242,6 +246,11 @@ int main(int argc, char *argv[]) { finished = 1; break; } + + SDL_GetMouseState(&mx, &my); + game->view_yaw = mx*0.005; + game->view_angle = my*0.005; + if ( !game->paused ) { physics_step(game, t); render_draw(game, t); diff --git a/src/render.c b/src/render.c index f518b90..95ac6ef 100644 --- a/src/render.c +++ b/src/render.c @@ -711,12 +711,13 @@ void render_draw(Game *game, Uint32 t) { gluPerspective(50.0, (GLfloat)r->width/(GLfloat)r->height, 0.1, 100.0); /* Depth buffer 10cm to 100m */ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - gluLookAt(game->lander->x-(game->view_dist*sinf(game->lander->yaw)*cosf(game->view_angle)), - game->lander->y-(game->view_dist*cosf(game->lander->yaw)*cosf(game->view_angle)), - game->lander->z+(game->view_dist*sinf(game->view_angle)), - game->lander->x, game->lander->y, game->lander->z, - sqrtf(2.0)*sinf(game->lander->yaw)*sinf(game->view_angle), - sqrtf(2.0)*cosf(game->lander->yaw)*sinf(game->view_angle), sqrtf(2.0)*cosf(game->view_angle)); + gluLookAt(game->lander->x-(game->view_dist*sinf(game->lander->yaw)), + game->lander->y-(game->view_dist*cosf(game->lander->yaw)), + game->lander->z, /* Look from */ + game->lander->x, game->lander->y, game->lander->z, /* Look at */ + 0.0, 0.0, 1.0); /* Up */ + //glRotatef(rad2deg(game->view_yaw), 0.0, 0.0, 1.0); + glRotatef(rad2deg(-game->view_angle), 1.0, 0.0, 0.0); if ( r->shaders ) glUseProgram(r->lighting_program); if ( r->shaders ) render_setuni(game->render->lighting_program, "texture", 0); /* GL_TEXTURE0 */ if ( r->shaders ) render_setuni(game->render->lighting_program, "texture_only", 0); diff --git a/src/types.h b/src/types.h index 200a9cc..ae335ba 100644 --- a/src/types.h +++ b/src/types.h @@ -252,6 +252,7 @@ typedef struct { int num_rooms; float view_angle; + float view_yaw; float view_dist; int paused; int pause_rel; |