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); }
void PlayerCamera::apply_transform() { get_camera_vectors(&look_dir, &up, &right, transform.orientation); frustum = ::transform(frustum_identity, transform); }