int game_update(int mousedx, int mousedy) { const uint8_t* keys = SDL_GetKeyboardState(NULL); double rot = mousedx*PLAYER_ROTSPEED; if (keys[SDL_SCANCODE_LEFT]) rot -= 10*PLAYER_ROTSPEED; if (keys[SDL_SCANCODE_RIGHT]) rot += 10*PLAYER_ROTSPEED; vec2_rotate(&player.dir, rot, &player.dir); vec2_t dir = {0, 0}; double spd = PLAYER_MOVESPEED; if (keys[SDL_SCANCODE_LCTRL]) spd *= .1; if (keys[SDL_SCANCODE_LSHIFT]) spd *= 10.; vec2_t dirCrossed = {player.dir.y, -player.dir.x}; if (keys[SDL_SCANCODE_W] || keys[SDL_SCANCODE_UP]) vec2_add(&dir, &player.dir, &dir); if (keys[SDL_SCANCODE_S] || keys[SDL_SCANCODE_DOWN]) vec2_addScale(&dir, &player.dir, -1, &dir); if (keys[SDL_SCANCODE_A]) vec2_addScale(&dir, &dirCrossed, -1, &dir); if (keys[SDL_SCANCODE_D]) vec2_add(&dir, &dirCrossed, &dir); if (vec2_lengthSq(&dir) > 0.00001) { vec2_normalize(&dir, &dir); camera_t cam = player; cam.dir = dir; raycast_travel(&cam, spd, &m); player.pos = cam.pos; } return keys[SDL_SCANCODE_ESCAPE]; }
double vec2_length(vec2_t* v) { return sqrt(vec2_lengthSq(v)); }