buf[i] = 0;
}
+static int poll_events(SDL_Surface **screen, struct camera *cam)
+{
+ SDL_Event event;
+
+ while (SDL_PollEvent(&event)) {
+ switch (event.type) {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym) {
+ case SDLK_ESCAPE:
+ printf("\nExiting. Good bye!\n");
+ return 1;
+ case SDLK_LEFT:
+ cam->speed.x = -CAM_SPEED;
+ break;
+ case SDLK_RIGHT:
+ cam->speed.x = CAM_SPEED;
+ break;
+ case SDLK_UP:
+ cam->speed.y = -CAM_SPEED;
+ break;
+ case SDLK_DOWN:
+ cam->speed.y = CAM_SPEED;
+ break;
+ case SDLK_PLUS:
+ cam->zoom_rate = CAM_ZOOM_RATE;
+ break;
+ case SDLK_MINUS:
+ cam->zoom_rate = 1 / CAM_ZOOM_RATE;
+ break;
+ default:
+ break;
+ }
+ break;
+ case SDL_KEYUP:
+ switch (event.key.keysym.sym) {
+ case SDLK_LEFT:
+ cam->speed.x = 0;
+ break;
+ case SDLK_RIGHT:
+ cam->speed.x = 0;
+ break;
+ case SDLK_UP:
+ cam->speed.y = 0;
+ break;
+ case SDLK_DOWN:
+ cam->speed.y = 0;
+ break;
+ case SDLK_PLUS:
+ cam->zoom_rate = 1;
+ break;
+ case SDLK_MINUS:
+ cam->zoom_rate = 1;
+ break;
+ default:
+ break;
+ }
+ break;
+ case SDL_VIDEORESIZE:
+ *screen = SDL_SetVideoMode(event.resize.w,
+ event.resize.h,
+ 32,
+ screen[0]->flags);
+ break;
+ }
+ }
+
+ return 0;
+}
+
static void loop(SDL_Surface *screen, int num_of_planets)
{
struct planet *planet, *pl1, *pl2;
struct camera camera;
- SDL_Event event;
int i, planets;
int old_ticks, ticks, framecount = 0, last_fps_time = 0;
int last_framecount = 0;
move_camera(&camera, time);
- while (SDL_PollEvent(&event)) {
- switch (event.type) {
- case SDL_KEYDOWN:
- switch (event.key.keysym.sym) {
- case SDLK_ESCAPE:
- printf("\nExiting. Good bye!\n");
- return;
- case SDLK_LEFT:
- camera.speed.x = -CAM_SPEED;
- break;
- case SDLK_RIGHT:
- camera.speed.x = CAM_SPEED;
- break;
- case SDLK_UP:
- camera.speed.y = -CAM_SPEED;
- break;
- case SDLK_DOWN:
- camera.speed.y = CAM_SPEED;
- break;
- case SDLK_PLUS:
- camera.zoom_rate = CAM_ZOOM_RATE;
- break;
- case SDLK_MINUS:
- camera.zoom_rate = 1 / CAM_ZOOM_RATE;
- break;
- default:
- break;
- }
- break;
- case SDL_KEYUP:
- switch (event.key.keysym.sym) {
- case SDLK_ESCAPE:
- printf("\nExiting. Good bye!\n");
- return;
- case SDLK_LEFT:
- camera.speed.x = 0;
- break;
- case SDLK_RIGHT:
- camera.speed.x = 0;
- break;
- case SDLK_UP:
- camera.speed.y = 0;
- break;
- case SDLK_DOWN:
- camera.speed.y = 0;
- break;
- case SDLK_PLUS:
- camera.zoom_rate = 1;
- break;
- case SDLK_MINUS:
- camera.zoom_rate = 1;
- break;
- default:
- break;
- }
- break;
- case SDL_VIDEORESIZE:
- screen = SDL_SetVideoMode(event.resize.w,
- event.resize.h,
- 32,
- screen->flags);
- break;
- }
- }
+ if (poll_events(&screen, &camera))
+ return;
old_ticks = ticks;
ticks = SDL_GetTicks();