aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-07-25 22:37:03 +0000
committertaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-07-25 22:37:03 +0000
commit624f89ba0f43fd38787817b9ae42bb6adde5241b (patch)
tree73eda21101a603052b031f44d0a7f69399a94ccf /src
parentd6d128b9a8734ee430f96228ceaf8f1f945189b5 (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.c1
-rw-r--r--src/main.c21
-rw-r--r--src/render.c13
-rw-r--r--src/types.h1
4 files changed, 24 insertions, 12 deletions
diff --git a/src/game.c b/src/game.c
index 4d75d2d..1881004 100644
--- a/src/game.c
+++ b/src/game.c
@@ -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;
diff --git a/src/main.c b/src/main.c
index 0614679..8f00f69 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;