summaryrefslogtreecommitdiffstats
path: root/sdl/pyramid.c
diff options
context:
space:
mode:
Diffstat (limited to 'sdl/pyramid.c')
-rw-r--r--sdl/pyramid.c113
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)