From 7573667ca598be0f07a81155b5552a7459ef3c7e Mon Sep 17 00:00:00 2001 From: TerraMaster85 Date: Sun, 23 Nov 2025 21:03:22 -0500 Subject: [PATCH] feat: some groundwork for thrusters --- crates/unified/src/client/key_input.rs | 1 - crates/unified/src/ecs.rs | 5 +---- crates/unified/src/server/player/thrust.rs | 14 ++++++++------ crates/unified/src/shared_plugins.rs | 5 +++-- crates/unified/src/thrust.rs | 7 ++++--- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/crates/unified/src/client/key_input.rs b/crates/unified/src/client/key_input.rs index e8b85ab4dd12b160b16bb40dfdbf7c41a01746e0..08a22dff934f3ebfc90d17be569e5d5139951338 100644 --- a/crates/unified/src/client/key_input.rs +++ b/crates/unified/src/client/key_input.rs @@ -1,4 +1,3 @@ -use crate::ecs::ThrustEvent; use bevy::dev_tools::picking_debug::DebugPickingMode; use crate::prelude::*; use bevy::{ diff --git a/crates/unified/src/ecs.rs b/crates/unified/src/ecs.rs index 018ab4a5543776a672b592748cdd21cafba139ed..5058a210699c350ad30064233d63eae71828a696 100644 --- a/crates/unified/src/ecs.rs +++ b/crates/unified/src/ecs.rs @@ -23,9 +23,6 @@ pub struct FuelText; #[derive(Component)] pub struct PowerText; -#[derive(Debug, Deserialize, Message, Serialize)] -pub struct ThrustEvent(pub ThrustSolution); - #[derive(Component, Serialize, Deserialize, Debug)] #[require( RigidBody::Dynamic, @@ -82,4 +79,4 @@ pub struct PlayerStorage { } #[derive(Component)] -pub struct Me; \ No newline at end of file +pub struct Me; diff --git a/crates/unified/src/server/player/thrust.rs b/crates/unified/src/server/player/thrust.rs index d375d37d279da620e58249fe64d48043354b0431..720b856dc7e4ad1119e8a9fe292f64407eb8ab1b 100644 --- a/crates/unified/src/server/player/thrust.rs +++ b/crates/unified/src/server/player/thrust.rs @@ -1,5 +1,4 @@ use crate::prelude::*; -use crate::ecs::ThrustEvent; use crate::server::ConnectedNetworkEntity; pub fn server_thrust_plugin(app: &mut App) { @@ -8,14 +7,15 @@ pub fn server_thrust_plugin(app: &mut App) { } pub fn process_thrust_events( - mut events: MessageReader>, + mut events: MessageReader>, clients: Query<&ConnectedNetworkEntity>, q_ls_me: Query>, + mut commands: Commands ) { for FromClient { client_id, - message: event, + message: thrust_solution, } in events.read() { let player_hearty_entity = match client_id { @@ -27,8 +27,10 @@ pub fn process_thrust_events( }, ClientId::Server => &q_ls_me.iter().next().unwrap() }; - let thrust_solution = &event.0; - if !thrust_solution.converged { return }; +/ + commands.entity(player_hearty_entity).insert(thrust_solution); + trace!("installed thrust solution {:?}", thrust_solution); + /* TODO: @tm85: have fun! TODO: The ThrustSolution contains a set of thrusters that should be on. TODO: All other thrusters should be off. @@ -65,4 +67,4 @@ pub fn process_thrust_events( TODO: Handle this with Option<&Component> in the query */ } -} \ No newline at end of file +} diff --git a/crates/unified/src/shared_plugins.rs b/crates/unified/src/shared_plugins.rs index 616b6f7427f040a23569899ffe0cfaa2ffe63b6f..21ca8d0e7bae9d5f2683671f02df0b8b347e1aee 100644 --- a/crates/unified/src/shared_plugins.rs +++ b/crates/unified/src/shared_plugins.rs @@ -1,6 +1,6 @@ use crate::attachment::{Joint, JointOf, PartInShip, Peer, Ship, SnapOf, SnapOfJoint}; use crate::config::planet::{Planet, PlanetConfigCollection}; -use crate::ecs::{DragRequestEvent, Part, Particles, Player, PlayerStorage, ThrustEvent}; +use crate::ecs::{DragRequestEvent, Part, Particles, Player, PlayerStorage}; use bevy::app::{App, PluginGroup, PluginGroupBuilder}; use bevy_common_assets::toml::TomlAssetPlugin; use crate::prelude::*; @@ -8,6 +8,7 @@ use bevy_replicon::prelude::{AppRuleExt, Channel, ClientMessageAppExt}; use crate::config::part::PartConfig; use crate::config::world::GlobalWorldConfig; use crate::physics::register_physics_components_for_replication; +use crate::thrust::ThrustSolution; pub struct SharedPluginGroup; @@ -28,7 +29,7 @@ impl PluginGroup for SharedPluginGroup { } pub fn register_everything(app: &mut App) { - app.add_client_message::(Channel::Ordered) + app.add_mapped_client_message::(Channel::Ordered) .add_mapped_client_message::(Channel::Ordered) .replicate::() .replicate::() diff --git a/crates/unified/src/thrust.rs b/crates/unified/src/thrust.rs index a3297f5562984fbaefb5bd636f2fbcd860b1436b..4541a24dcfd0153f35692accea22ed120b9056b4 100644 --- a/crates/unified/src/thrust.rs +++ b/crates/unified/src/thrust.rs @@ -1,12 +1,13 @@ use std::collections::BTreeSet; -use bevy::prelude::{Entity, Resource}; +use bevy::prelude::{Entity, Resource, Compenent}; use serde::{Deserialize, Serialize}; /// A thrust solution, found by the thrust solver on the client. /// `thrusters_on` is the set of thrusters that should be on. /// Any thrusters not in this set should be off. -#[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone, Resource)] +#[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone, Resource, Component, MapEntities)] pub struct ThrustSolution { + #[entities] pub thrusters_on: BTreeSet, pub converged: bool -} \ No newline at end of file +}