mouse movement now changes player orientation relatively, not absolutely
This commit is contained in:
parent
0456b8506c
commit
6e3d958638
|
@ -24,25 +24,6 @@ impl Plugin for CameraControllerPlugin {
|
||||||
// it because it felt nice.
|
// it because it felt nice.
|
||||||
pub const RADIANS_PER_DOT: f32 = 1.0 / 180.0;
|
pub const RADIANS_PER_DOT: f32 = 1.0 / 180.0;
|
||||||
|
|
||||||
#[derive(Component)]
|
|
||||||
pub struct CameraController {
|
|
||||||
pub enabled: bool,
|
|
||||||
pub initialized: bool,
|
|
||||||
pub pitch: f32,
|
|
||||||
pub yaw: f32,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for CameraController {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self {
|
|
||||||
enabled: true,
|
|
||||||
initialized: false,
|
|
||||||
pitch: 1.0, // pitch=0/yaw=0 -> face sun
|
|
||||||
yaw: 0.3,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn setup_camera(
|
fn setup_camera(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
) {
|
) {
|
||||||
|
@ -57,7 +38,6 @@ fn setup_camera(
|
||||||
transform: Transform::from_xyz(0.0, 0.0, 8.0).looking_at(Vec3::ZERO, Vec3::Y),
|
transform: Transform::from_xyz(0.0, 0.0, 8.0).looking_at(Vec3::ZERO, Vec3::Y),
|
||||||
..default()
|
..default()
|
||||||
},
|
},
|
||||||
CameraController::default(),
|
|
||||||
BloomSettings {
|
BloomSettings {
|
||||||
composite_mode: BloomCompositeMode::EnergyConserving,
|
composite_mode: BloomCompositeMode::EnergyConserving,
|
||||||
..default()
|
..default()
|
||||||
|
@ -67,8 +47,8 @@ fn setup_camera(
|
||||||
|
|
||||||
pub fn sync_camera_to_player(
|
pub fn sync_camera_to_player(
|
||||||
settings: Res<settings::Settings>,
|
settings: Res<settings::Settings>,
|
||||||
mut q_camera: Query<&mut Transform, With<CameraController>>,
|
mut q_camera: Query<&mut Transform, With<Camera>>,
|
||||||
q_playercam: Query<(&actor::Actor, &Transform), (With<actor::PlayerCamera>, Without<actor::PlayerDrivesThis>, Without<CameraController>)>,
|
q_playercam: Query<(&actor::Actor, &Transform), (With<actor::PlayerCamera>, Without<actor::PlayerDrivesThis>, Without<Camera>)>,
|
||||||
) {
|
) {
|
||||||
if q_camera.is_empty() || q_playercam.is_empty() {
|
if q_camera.is_empty() || q_playercam.is_empty() {
|
||||||
return;
|
return;
|
||||||
|
@ -126,14 +106,14 @@ fn run_camera_controller(
|
||||||
rocket_sound_controller: Query<&AudioSink, With<audio::ComponentRocketSound>>,
|
rocket_sound_controller: Query<&AudioSink, With<audio::ComponentRocketSound>>,
|
||||||
ion_sound_controller: Query<&AudioSink, With<audio::ComponentIonSound>>,
|
ion_sound_controller: Query<&AudioSink, With<audio::ComponentIonSound>>,
|
||||||
mut q_engine: Query<&mut actor::Engine, With<actor::PlayerDrivesThis>>,
|
mut q_engine: Query<&mut actor::Engine, With<actor::PlayerDrivesThis>>,
|
||||||
mut q_camera: Query<(&mut CameraController, &mut Projection)>,
|
mut q_camera: Query<&mut Projection, With<Camera>>,
|
||||||
q_player: Query<&actor::LifeForm, With<actor::Player>>,
|
q_player: Query<&actor::LifeForm, With<actor::Player>>,
|
||||||
mut q_playercam: Query<(
|
mut q_playercam: Query<(
|
||||||
&mut Transform,
|
&mut Transform,
|
||||||
&mut actor::Engine,
|
&mut actor::Engine,
|
||||||
&mut AngularVelocity,
|
&mut AngularVelocity,
|
||||||
&mut LinearVelocity,
|
&mut LinearVelocity,
|
||||||
), (With<actor::PlayerCamera>, Without<actor::PlayerDrivesThis>, Without<CameraController>)>,
|
), (With<actor::PlayerCamera>, Without<actor::PlayerDrivesThis>, Without<Camera>)>,
|
||||||
) {
|
) {
|
||||||
let dt = time.delta_seconds();
|
let dt = time.delta_seconds();
|
||||||
let mut play_thruster_sound = false;
|
let mut play_thruster_sound = false;
|
||||||
|
@ -145,14 +125,10 @@ fn run_camera_controller(
|
||||||
}
|
}
|
||||||
|
|
||||||
if let (
|
if let (
|
||||||
Ok((mut controller, mut projection)),
|
Ok(mut projection),
|
||||||
Ok(lifeform),
|
Ok(lifeform),
|
||||||
Ok((mut player_transform, player_engine, mut angularvelocity, mut v)),
|
Ok((mut player_transform, player_engine, mut angularvelocity, mut v)),
|
||||||
) = (q_camera.get_single_mut(), q_player.get_single(), q_playercam.get_single_mut()) {
|
) = (q_camera.get_single_mut(), q_player.get_single(), q_playercam.get_single_mut()) {
|
||||||
if !controller.enabled {
|
|
||||||
mouse_events.clear();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if angularvelocity.length_squared() > 0.0001 {
|
if angularvelocity.length_squared() > 0.0001 {
|
||||||
angularvelocity.x *= 0.98;
|
angularvelocity.x *= 0.98;
|
||||||
|
@ -242,11 +218,9 @@ fn run_camera_controller(
|
||||||
|
|
||||||
if mouse_delta != Vec2::ZERO {
|
if mouse_delta != Vec2::ZERO {
|
||||||
// Apply look update
|
// Apply look update
|
||||||
controller.pitch = (controller.pitch
|
let pitch = (mouse_delta.y * RADIANS_PER_DOT * settings.mouse_sensitivity).clamp(-PI / 2., PI / 2.);
|
||||||
+ mouse_delta.y * RADIANS_PER_DOT * settings.mouse_sensitivity)
|
let yaw = mouse_delta.x * RADIANS_PER_DOT * settings.mouse_sensitivity;
|
||||||
.clamp(-PI / 2., PI / 2.);
|
player_transform.rotation *= Quat::from_euler(EulerRot::ZYX, 0.0, -yaw, pitch).normalize();
|
||||||
controller.yaw += mouse_delta.x * RADIANS_PER_DOT * settings.mouse_sensitivity;
|
|
||||||
player_transform.rotation = Quat::from_euler(EulerRot::ZYX, 0.0, -controller.yaw, controller.pitch).normalize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let fov = (lifeform.adrenaline * lifeform.adrenaline * lifeform.adrenaline * 45.0 + 45.0).to_radians();
|
let fov = (lifeform.adrenaline * lifeform.adrenaline * lifeform.adrenaline * 45.0 + 45.0).to_radians();
|
||||||
|
|
Loading…
Reference in a new issue