diff --git a/src/plugins/game.rs b/src/plugins/game.rs index 162ccb2..3bc74ac 100644 --- a/src/plugins/game.rs +++ b/src/plugins/game.rs @@ -1,22 +1,16 @@ use crate::{ components::{ - camera::{CameraAttachment, CameraMode, CameraPitch, FollowCam, MainCamera}, + camera::{CameraAttachment, CameraMode, CameraPitch, MainCamera}, player::PlayerDrag, tags::{Player, Ship}, }, plugins::{state_management::StateManagementPlugin, *}, - states::{ - game::*, - input::{InputState, PlayerState}, - menu::MenuState, - play::PlayStartupSystems, - }, + states::play::PlayStartupSystems, }; use bevy::{ prelude::*, window::{CursorGrabMode, PrimaryWindow}, }; -use bevy_asset_loader::prelude::*; use bevy_rapier3d::prelude::*; #[derive(Default)] diff --git a/src/plugins/mod.rs b/src/plugins/mod.rs index 7c277e5..23b8bdf 100644 --- a/src/plugins/mod.rs +++ b/src/plugins/mod.rs @@ -15,6 +15,8 @@ pub use follow_cam::*; pub use game::*; pub use main_menu::*; pub use player::*; +#[allow(unused_imports)] pub use ship::*; +#[allow(unused_imports)] pub use ship_cam::*; pub use types::*; diff --git a/src/plugins/player.rs b/src/plugins/player.rs index 198ed08..608f534 100644 --- a/src/plugins/player.rs +++ b/src/plugins/player.rs @@ -9,7 +9,7 @@ use crate::{ player::{GravityDirection, JumpSpeed, MoveSpeed, PlayerDrag, PlayerForce, PlayerMotion, PlayerVelocity}, tags::Player, }, - states::{input::PlayerInputSystems, play::PlaySystems}, + states::{input::InputWorldSystems, play::PlaySystems}, utils::{input::get_mouse_delta, rotation::get_alignment_rotation_preserve_twist}, }; @@ -17,7 +17,7 @@ pub struct PlayerPlugin; impl Plugin for PlayerPlugin { fn build(&self, app: &mut App) { - app.add_systems(PreUpdate, (keyboard_input, player_look).in_set(PlayerInputSystems)); + app.add_systems(PreUpdate, (keyboard_input, player_look).in_set(InputWorldSystems)); app.add_systems( Update, (apply_gravity, apply_forces, apply_motion, apply_drag) diff --git a/src/plugins/ship_cam.rs b/src/plugins/ship_cam.rs index 7b8f015..892a87b 100644 --- a/src/plugins/ship_cam.rs +++ b/src/plugins/ship_cam.rs @@ -3,7 +3,7 @@ use bevy::prelude::*; pub struct ShipCamPlugin; impl Plugin for ShipCamPlugin { - fn build(&self, app: &mut App) { + fn build(&self, _app: &mut App) { todo!() } } diff --git a/src/plugins/state_management.rs b/src/plugins/state_management.rs index ae40bb4..1a7db3f 100644 --- a/src/plugins/state_management.rs +++ b/src/plugins/state_management.rs @@ -5,7 +5,10 @@ use crate::{ configure_sets, states::{ game::{GameState, InGameSystems, MenuSystems}, - input::{InputState, PlayerInputSystems, PlayerState}, + input::{ + InputDetachedSystems, InputMenuSystems, InputState, InputWorldSystems, PlayerFreeFloatingSystems, + PlayerOnFootSystems, PlayerPilotingSystems, PlayerState, + }, menu::{ MainMenuSystems, MenuCleanupSystems, MenuStartupSystems, MenuState, OptionsMenuSystems, SavesMenuSystems, }, @@ -74,10 +77,40 @@ impl Plugin for StateManagementPlugin { //Input configure_sets!( app, - PlayerInputSystems + InputWorldSystems .run_if(in_state(InputState::World)) .in_set(PlaySystems) ); + configure_sets!( + app, + InputMenuSystems.run_if(in_state(InputState::Menu)).in_set(PlaySystems) + ); + configure_sets!( + app, + InputDetachedSystems + .run_if(in_state(InputState::Detached)) + .in_set(PlaySystems) + ); + + //Player + configure_sets!( + app, + PlayerOnFootSystems + .run_if(in_state(PlayerState::OnFoot)) + .in_set(PlaySystems) + ); + configure_sets!( + app, + PlayerFreeFloatingSystems + .run_if(in_state(PlayerState::FreeFloating)) + .in_set(PlaySystems) + ); + configure_sets!( + app, + PlayerPilotingSystems + .run_if(in_state(PlayerState::Piloting)) + .in_set(PlaySystems) + ); //State Transitions app.add_systems(Update, game_startup.in_set(PlayStartupSystems)); diff --git a/src/states/input.rs b/src/states/input.rs index a34cec1..b7a15b3 100644 --- a/src/states/input.rs +++ b/src/states/input.rs @@ -9,7 +9,13 @@ pub enum InputState { } #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)] -pub struct PlayerInputSystems; +pub struct InputWorldSystems; + +#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)] +pub struct InputMenuSystems; + +#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)] +pub struct InputDetachedSystems; #[derive(States, Debug, Default, Clone, PartialEq, Eq, Hash)] pub enum PlayerState { @@ -18,3 +24,12 @@ pub enum PlayerState { FreeFloating, Piloting, } + +#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)] +pub struct PlayerOnFootSystems; + +#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)] +pub struct PlayerFreeFloatingSystems; + +#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)] +pub struct PlayerPilotingSystems; diff --git a/src/utils/rotation.rs b/src/utils/rotation.rs index 39e25ae..8b9db39 100644 --- a/src/utils/rotation.rs +++ b/src/utils/rotation.rs @@ -2,6 +2,7 @@ use std::f32::consts::PI; use bevy::prelude::*; +#[allow(dead_code)] pub fn get_alignment_rotation(cur_dir: Dir3, target_dir: Vec3) -> Quat { let tgt = target_dir.normalize(); let axis = cur_dir.cross(tgt);