diff options
Diffstat (limited to 'sdl/pyramid.c')
-rw-r--r-- | sdl/pyramid.c | 113 |
1 files changed, 5 insertions, 108 deletions
diff --git a/sdl/pyramid.c b/sdl/pyramid.c index 94c3946..ff40dff 100644 --- a/sdl/pyramid.c +++ b/sdl/pyramid.c @@ -23,6 +23,8 @@ #include <GL/glew.h> #include <GL/freeglut.h> #include <sys/time.h> +#include "client.h" +#include "event.h" #include "gldraw.h" #include "glframe.h" #include "gltools.h" @@ -45,25 +47,10 @@ const char *window_icon_path = "tux.png"; const unsigned int sdl_video_flags = SDL_OPENGL | SDL_RESIZABLE; unsigned int maxfps_w = 60; -/* client extends functionality of the host platform */ -struct client -{ - /* display lists identifiers */ - GLuint ground_list; - GLuint triangle_list; - - /* pyramid texture handle */ - GLuint textures[2]; - - GLfloat xrot; - GLfloat yrot; -}; - /* function prototypes */ static int client_init(struct client *); static int client_destroy(struct client *); -static void keys(SDL_keysym *, const unsigned int *, const int); -static void process_events(void); +static inline void process_events(void); static void render(void); static int client_init(struct client *p) @@ -100,99 +87,9 @@ static int client_destroy(struct client *p) return 0; } -static void keys(SDL_keysym *keysym, const unsigned int *keys_held, const int flag) +static inline void process_events(void) { - if (!flag) - { - switch (keysym->sym) - { - case SDLK_ESCAPE: program_running = 0; break; - case SDLK_w: p.c->xrot -= 5.0f; break; - case SDLK_s: p.c->xrot += 5.0f; break; - case SDLK_a: p.c->yrot -= 5.0f; break; - case SDLK_d: p.c->yrot += 5.0f; break; - case SDLK_UP: glframe_move_forward(&p.camera, 0.5f); break; - case SDLK_DOWN: glframe_move_forward(&p.camera, -0.5f); break; - case SDLK_LEFT: glframe_rotate_local_y(&p.camera, 0.1f); break; - case SDLK_RIGHT: glframe_rotate_local_y(&p.camera, -0.1f); break; - case SDLK_n: glframe_rotate_local_x(&p.camera, 0.1f); break; - case SDLK_m: glframe_rotate_local_x(&p.camera, -0.1f); break; - default: break; - } - } - else - { - if (keys_held[SDLK_w]) - p.c->xrot -= 5.0f; - if (keys_held[SDLK_s]) - p.c->xrot += 5.0f; - if (keys_held[SDLK_a]) - p.c->yrot -= 5.0f; - if (keys_held[SDLK_d]) - p.c->yrot += 5.0f; - - if (keys_held[SDLK_UP]) - glframe_move_forward(&p.camera, 0.05f); - if (keys_held[SDLK_DOWN]) - glframe_move_forward(&p.camera, -0.05f); - if (keys_held[SDLK_LEFT]) - glframe_rotate_local_y(&p.camera, 0.02f); - if (keys_held[SDLK_RIGHT]) - glframe_rotate_local_y(&p.camera, -0.02f); - - if (keys_held[SDLK_n]) - glframe_rotate_local_x(&p.camera, 0.02f); - if (keys_held[SDLK_m]) - glframe_rotate_local_x(&p.camera, -0.02f); - } - - p.c->xrot = (GLfloat) ((const int) p.c->xrot % 360); - p.c->yrot = (GLfloat) ((const int) p.c->yrot % 360); -} - -static void process_events(void) -{ - /* process SDL events */ - SDL_Event event; - unsigned static int keys_held[323]; - SDLKey sym; - /* helper flag for keys() */ - int flag = 0; - - while (SDL_PollEvent(&event)) - { - sym = event.key.keysym.sym; - - switch (event.type) - { - case SDL_KEYUP: - { - /* reset the key to 0 */ - keys_held[sym] = 0; - break; - } - case SDL_KEYDOWN: - { - keys_held[sym] = 1; - keys(&event.key.keysym, keys_held, flag); - break; - } - case SDL_VIDEORESIZE: { window_resize(event.resize.w, event.resize.h); break; } - case SDL_QUIT: { program_running = 0; break; } - default: break; - } - } - - /* below code has to be placed here, check for keys that are being constantly held */ - if (keys_held[SDLK_w] || keys_held[SDLK_s] || keys_held[SDLK_a] || keys_held[SDLK_d] || - keys_held[SDLK_UP] || keys_held[SDLK_DOWN] || keys_held[SDLK_LEFT] || keys_held[SDLK_RIGHT] || - keys_held[SDLK_n] || keys_held[SDLK_m]) - { - flag = !flag; - keys(NULL, keys_held, flag); - } - else - flag = !flag; + sdl_process_events(); } static void render(void) |