Example #1
0
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];
}
Example #2
0
double vec2_length(vec2_t* v)
{
	return sqrt(vec2_lengthSq(v));
}