int main(int argc, char* argv[]){ parse_args(argc, argv); init_ui(); init_structs(); init_plotter(); start_debug(); int x; while (!options.quit) { clear(); set_terminal_size(); draw_axis(); replot_functions(); x = input(); if(x == -1) break; refresh(); } clean_plotter(); clean_ui(); return 0; }
// handle input void input(Level &level, Player &player) { SDL_Event ev; GLCoord newpos(player.pos); const Uint8 *keystate = SDL_GetKeyboardState(NULL); float speed = 0.1; if(keystate[SDL_SCANCODE_LSHIFT] || keystate[SDL_SCANCODE_RSHIFT]) speed = 0.5; if(keystate[SDL_SCANCODE_W]) move(newpos, GLCoord(0, speed, 0), player.cameraDirection); if(keystate[SDL_SCANCODE_A]) move(newpos, GLCoord(-speed, 0, 0), player.cameraDirection); if(keystate[SDL_SCANCODE_S]) move(newpos, GLCoord(0, -speed, 0), player.cameraDirection); if(keystate[SDL_SCANCODE_D]) move(newpos, GLCoord(speed, 0, 0), player.cameraDirection); if(keystate[SDL_SCANCODE_LEFT]) player.cameraDirection -= GLCoord(0, 0, 5); if(keystate[SDL_SCANCODE_RIGHT]) player.cameraDirection += GLCoord(0, 0, 5); if(player.cameraDirection.z < 0) player.cameraDirection.z += 360; if(player.cameraDirection.z >= 360) player.cameraDirection.z -= 360; if(player.collisions) { newpos = check_collisions(level, player.pos, newpos); } player.pos = newpos; while(SDL_PollEvent(&ev)) { switch(ev.type) { case SDL_KEYDOWN: switch(ev.key.keysym.sym) { case SDLK_c: if(player.collisions) { player.pos.z = 50; glDisable(GL_FOG); } else { player.pos.z = 0.5; glEnable(GL_FOG); } player.collisions = !player.collisions; break; case SDLK_p: place(level, player.pos, player.cameraTarget - player.pos); break; case SDLK_x: dig(level, player.pos, player.cameraTarget - player.pos); break; case SDLK_q: clean_ui(); exit(0); } break; } } }