Exemplo n.º 1
0
Arquivo: MC.cpp Projeto: angjminer/mc
static Vec3f get_walk_direction()
{
	constexpr float sincos_45 = 0.7071067f;

	Vec3f look_dir, up, right;
	get_camera_vectors(&look_dir, &up, &right, camera.orientation);

	float fb_move = 0.0f;
	float lr_move = 0.0f;
	if (camera_state & PCS_MOVING_FORWARD)
		fb_move += 1.0f;
	if (camera_state & PCS_MOVING_BACKWARD)
		fb_move -= 1.0f;
	if (camera_state & PCS_MOVING_LEFT)
		lr_move -= 1.0f;
	if (camera_state & PCS_MOVING_RIGHT)
		lr_move += 1.0f;

	if (camera_state & (PCS_MOVING_FORWARD | PCS_MOVING_BACKWARD) &&
		camera_state & (PCS_MOVING_LEFT | PCS_MOVING_RIGHT))
	{
		fb_move *= sincos_45;
		lr_move *= sincos_45;
	}

	return look_dir * Vec3f(fb_move) + right * Vec3f(lr_move);
}
Exemplo n.º 2
0
void PlayerCamera::apply_transform()
{
	get_camera_vectors(&look_dir, &up, &right, transform.orientation);
	frustum = ::transform(frustum_identity, transform);
}