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::{
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)]

View File

@@ -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::*;

View File

@@ -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)

View File

@@ -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!()
}
}

View File

@@ -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));

View File

@@ -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;

View File

@@ -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);