This commit is contained in:
2025-07-05 16:59:17 -04:00
parent c1fac3a1f3
commit 992e2f703f
7 changed files with 59 additions and 14 deletions

View File

@@ -1,22 +1,16 @@
use crate::{ use crate::{
components::{ components::{
camera::{CameraAttachment, CameraMode, CameraPitch, FollowCam, MainCamera}, camera::{CameraAttachment, CameraMode, CameraPitch, MainCamera},
player::PlayerDrag, player::PlayerDrag,
tags::{Player, Ship}, tags::{Player, Ship},
}, },
plugins::{state_management::StateManagementPlugin, *}, plugins::{state_management::StateManagementPlugin, *},
states::{ states::play::PlayStartupSystems,
game::*,
input::{InputState, PlayerState},
menu::MenuState,
play::PlayStartupSystems,
},
}; };
use bevy::{ use bevy::{
prelude::*, prelude::*,
window::{CursorGrabMode, PrimaryWindow}, window::{CursorGrabMode, PrimaryWindow},
}; };
use bevy_asset_loader::prelude::*;
use bevy_rapier3d::prelude::*; use bevy_rapier3d::prelude::*;
#[derive(Default)] #[derive(Default)]

View File

@@ -15,6 +15,8 @@ pub use follow_cam::*;
pub use game::*; pub use game::*;
pub use main_menu::*; pub use main_menu::*;
pub use player::*; pub use player::*;
#[allow(unused_imports)]
pub use ship::*; pub use ship::*;
#[allow(unused_imports)]
pub use ship_cam::*; pub use ship_cam::*;
pub use types::*; pub use types::*;

View File

@@ -9,7 +9,7 @@ use crate::{
player::{GravityDirection, JumpSpeed, MoveSpeed, PlayerDrag, PlayerForce, PlayerMotion, PlayerVelocity}, player::{GravityDirection, JumpSpeed, MoveSpeed, PlayerDrag, PlayerForce, PlayerMotion, PlayerVelocity},
tags::Player, tags::Player,
}, },
states::{input::PlayerInputSystems, play::PlaySystems}, states::{input::InputWorldSystems, play::PlaySystems},
utils::{input::get_mouse_delta, rotation::get_alignment_rotation_preserve_twist}, utils::{input::get_mouse_delta, rotation::get_alignment_rotation_preserve_twist},
}; };
@@ -17,7 +17,7 @@ pub struct PlayerPlugin;
impl Plugin for PlayerPlugin { impl Plugin for PlayerPlugin {
fn build(&self, app: &mut App) { 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( app.add_systems(
Update, Update,
(apply_gravity, apply_forces, apply_motion, apply_drag) (apply_gravity, apply_forces, apply_motion, apply_drag)

View File

@@ -3,7 +3,7 @@ use bevy::prelude::*;
pub struct ShipCamPlugin; pub struct ShipCamPlugin;
impl Plugin for ShipCamPlugin { impl Plugin for ShipCamPlugin {
fn build(&self, app: &mut App) { fn build(&self, _app: &mut App) {
todo!() todo!()
} }
} }

View File

@@ -5,7 +5,10 @@ use crate::{
configure_sets, configure_sets,
states::{ states::{
game::{GameState, InGameSystems, MenuSystems}, game::{GameState, InGameSystems, MenuSystems},
input::{InputState, PlayerInputSystems, PlayerState}, input::{
InputDetachedSystems, InputMenuSystems, InputState, InputWorldSystems, PlayerFreeFloatingSystems,
PlayerOnFootSystems, PlayerPilotingSystems, PlayerState,
},
menu::{ menu::{
MainMenuSystems, MenuCleanupSystems, MenuStartupSystems, MenuState, OptionsMenuSystems, SavesMenuSystems, MainMenuSystems, MenuCleanupSystems, MenuStartupSystems, MenuState, OptionsMenuSystems, SavesMenuSystems,
}, },
@@ -74,10 +77,40 @@ impl Plugin for StateManagementPlugin {
//Input //Input
configure_sets!( configure_sets!(
app, app,
PlayerInputSystems InputWorldSystems
.run_if(in_state(InputState::World)) .run_if(in_state(InputState::World))
.in_set(PlaySystems) .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 //State Transitions
app.add_systems(Update, game_startup.in_set(PlayStartupSystems)); app.add_systems(Update, game_startup.in_set(PlayStartupSystems));

View File

@@ -9,7 +9,13 @@ pub enum InputState {
} }
#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)] #[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)] #[derive(States, Debug, Default, Clone, PartialEq, Eq, Hash)]
pub enum PlayerState { pub enum PlayerState {
@@ -18,3 +24,12 @@ pub enum PlayerState {
FreeFloating, FreeFloating,
Piloting, 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;

View File

@@ -2,6 +2,7 @@ use std::f32::consts::PI;
use bevy::prelude::*; use bevy::prelude::*;
#[allow(dead_code)]
pub fn get_alignment_rotation(cur_dir: Dir3, target_dir: Vec3) -> Quat { pub fn get_alignment_rotation(cur_dir: Dir3, target_dir: Vec3) -> Quat {
let tgt = target_dir.normalize(); let tgt = target_dir.normalize();
let axis = cur_dir.cross(tgt); let axis = cur_dir.cross(tgt);