~starkingdoms/starkingdoms

6c1144c90bfffed676ce395061837d61a42245f4 — core 30 days ago 61e04aa
chore(netcode-rewrite): general codebase refactor
47 files changed, 161 insertions(+), 130 deletions(-)

A crates/unified/src/client/components/mod.rs
M crates/unified/src/client/crafting/ui.rs
M crates/unified/src/client/input/mod.rs
M crates/unified/src/client/mod.rs
M crates/unified/src/client/parts.rs
M crates/unified/src/client/planet/incoming_planets.rs
M crates/unified/src/client/planet/indicators.rs
R crates/unified/src/{client_plugins => client/plugins}.rs
M crates/unified/src/client/rendering/mod.rs
M crates/unified/src/client/ship/attachment.rs
M crates/unified/src/client/ship/thrusters.rs
M crates/unified/src/client/starfield.rs
M crates/unified/src/client/starguide/init.rs
M crates/unified/src/client/starguide/input.rs
M crates/unified/src/client/starguide/orbit.rs
M crates/unified/src/client/ui.rs
M crates/unified/src/client/zoom.rs
M crates/unified/src/main.rs
M crates/unified/src/server/craft.rs
M crates/unified/src/server/drill.rs
M crates/unified/src/server/earth_parts.rs
M crates/unified/src/server/gravity.rs
M crates/unified/src/server/heat/conduction.rs
M crates/unified/src/server/heat/cooling.rs
M crates/unified/src/server/heat/radiation.rs
M crates/unified/src/server/mod.rs
M crates/unified/src/server/orbit/mod.rs
M crates/unified/src/server/part.rs
M crates/unified/src/server/planets.rs
M crates/unified/src/server/player.rs
M crates/unified/src/server/player/join.rs
M crates/unified/src/server/player/thrust.rs
R crates/unified/src/{server_plugins => server/plugins}.rs
R crates/unified/src/{ => shared}/attachment.rs
R crates/unified/src/{ => shared}/config/mod.rs
R crates/unified/src/{ => shared}/config/part.rs
R crates/unified/src/{ => shared}/config/planet.rs
R crates/unified/src/{ => shared}/config/recipe.rs
R crates/unified/src/{ => shared}/config/world.rs
R crates/unified/src/{ => shared}/ecs.rs
R crates/unified/src/{ => shared}/ecs/thruster.rs
A crates/unified/src/shared/mod.rs
R crates/unified/src/{ => shared}/physics.rs
R crates/unified/src/{shared_plugins => shared/plugins}.rs
R crates/unified/src/{ => shared}/thrust.rs
R crates/unified/src/{ => shared}/world_config.rs
M crates/unified/src/wasm_entrypoint.rs
A crates/unified/src/client/components/mod.rs => crates/unified/src/client/components/mod.rs +49 -0
@@ 0,0 1,49 @@
use crate::prelude::{Component, Deserialize, GizmoConfigGroup, Handle, Image, Reflect, Resource, Serialize};

#[derive(Component)]
pub struct MainCamera;

#[derive(Component)]
pub struct StarguideCamera;

#[derive(Component)]
pub struct OrbitCamera;

#[derive(Default, Reflect, GizmoConfigGroup)]
pub struct StarguideGizmos;

#[derive(Component)]
pub struct StarfieldFront;

#[derive(Component)]
pub struct StarfieldMid;

#[derive(Component)]
pub struct StarfieldBack;

#[derive(Component)]
pub struct FuelText;

#[derive(Component)]
pub struct PowerText;

#[derive(Component)]
pub struct PlanetSensor(pub String);

#[derive(Component)]
pub struct Me;

#[derive(Component)]
pub struct StarguideMe;

#[derive(Resource)]
pub struct StarguideOrbitImage(pub Handle<Image>);

#[derive(Component)]
pub struct StarguideOrbit;

#[derive(Component, Serialize, Deserialize, Debug)]
pub struct CraftingUi;

#[derive(Component, Serialize, Deserialize, Debug)]
pub struct TemperatureSprite;
\ No newline at end of file

M crates/unified/src/client/crafting/ui.rs => crates/unified/src/client/crafting/ui.rs +5 -1
@@ 2,7 2,11 @@ use std::collections::HashMap;

use bevy::{input_focus::AutoFocus, ui::RelativeCursorPosition};

use crate::{attachment::PartInShip, client::colors, config::recipe::RecipesConfig, ecs::{CanCraft, CraftPartRequest, CraftingUi, Drill, MainCamera, Me, Part, SingleStorage, ToggleDrillEvent, VariableStorage}, prelude::*};
use crate::{client::colors, prelude::*};
use crate::client::components::{CraftingUi, MainCamera, Me};
use crate::shared::attachment::PartInShip;
use crate::shared::config::recipe::RecipesConfig;
use crate::shared::ecs::{CanCraft, CraftPartRequest, Drill, Part, SingleStorage, ToggleDrillEvent, VariableStorage};

pub fn crafting_ui_plugin(app: &mut App) {
    app.init_resource::<RecipeCollection>();

M crates/unified/src/client/input/mod.rs => crates/unified/src/client/input/mod.rs +1 -1
@@ 5,7 5,7 @@ use bevy::window::PrimaryWindow;
use leafwing_input_manager::Actionlike;
use leafwing_input_manager::input_map::InputMap;
use leafwing_input_manager::prelude::ActionState;
use crate::ecs::MainCamera;
use crate::client::components::MainCamera;
use crate::prelude::*;

#[derive(Actionlike, PartialEq, Eq, Hash, Clone, Copy, Debug, Reflect)]

M crates/unified/src/client/mod.rs => crates/unified/src/client/mod.rs +4 -2
@@ 8,12 8,12 @@ use crate::client::ui::ui_plugin;
use crate::client::zoom::zoom_plugin;
use crate::client::starguide::init::starguide_init_plugin;
use crate::client::starguide::input::starguide_input_plugin;
use crate::ecs::StarguideGizmos;
use components::StarguideGizmos;
use bevy::dev_tools::picking_debug::DebugPickingMode;
use crate::prelude::*;
use planet::incoming_planets::incoming_planets_plugin;
use crate::client::ship::attachment::client_attachment_plugin;
use crate::ecs::GameplayState;
use crate::shared::ecs::GameplayState;

pub mod colors;
pub mod key_input;


@@ 27,6 27,8 @@ pub mod rendering;
pub mod input;
pub mod starguide;
pub mod crafting;
pub mod components;
pub mod plugins;

pub struct ClientPlugin;


M crates/unified/src/client/parts.rs => crates/unified/src/client/parts.rs +4 -3
@@ 1,12 1,13 @@
use std::f32::consts::PI;

use crate::attachment::{Joint, JointOf, Joints, PartInShip, Peer, SnapOf, SnapOfJoint};
use crate::shared::attachment::{Joint, JointOf, Joints, PartInShip, Peer, SnapOf, SnapOfJoint};
use crate::client::crafting::ui::open_crafting_ui;
use crate::ecs::{Me, Temperature};
use crate::shared::ecs::Temperature;
use crate::client::colors::GREEN;
use crate::ecs::{DragRequestEvent, Part, MAIN_LAYER};
use crate::shared::ecs::{DragRequestEvent, Part, MAIN_LAYER};
use crate::client::input::CursorWorldCoordinates;
use bevy::color::palettes::css::{ORANGE, PURPLE, RED, YELLOW};
use crate::client::components::Me;
use crate::client::ship::attachment::AttachmentDebugRes;
use crate::prelude::*;


M crates/unified/src/client/planet/incoming_planets.rs => crates/unified/src/client/planet/incoming_planets.rs +2 -2
@@ 1,6 1,6 @@
use crate::config::planet::{Planet, SpecialSpriteProperties};
use crate::shared::config::planet::{Planet, SpecialSpriteProperties};
use crate::prelude::*;
use crate::ecs::{MAIN_STAR_LAYERS};
use crate::shared::ecs::{MAIN_STAR_LAYERS};

pub fn incoming_planets_plugin(app: &mut App) {
    app.add_systems(Update, (handle_incoming_planets, handle_updated_planets));

M crates/unified/src/client/planet/indicators.rs => crates/unified/src/client/planet/indicators.rs +3 -3
@@ 1,6 1,6 @@
use crate::ecs::Me;
use crate::config::planet::Planet;
use crate::ecs::MainCamera;
use crate::client::components::Me;
use crate::shared::config::planet::Planet;
use crate::client::components::MainCamera;
use crate::prelude::*;
use bevy::window::PrimaryWindow;


R crates/unified/src/client_plugins.rs => crates/unified/src/client/plugins.rs +0 -0
M crates/unified/src/client/rendering/mod.rs => crates/unified/src/client/rendering/mod.rs +2 -1
@@ 2,7 2,8 @@ use bevy::anti_alias::fxaa::Fxaa;
use bevy::app::{App, Startup};
use bevy::core_pipeline::tonemapping::DebandDither;
use bevy::post_process::bloom::Bloom;
use crate::ecs::{GameplayState, MAIN_LAYER, MainCamera, Me, STARGUIDE_LAYER, StarguideGizmos};
use crate::client::components::{MainCamera, Me, StarguideGizmos};
use crate::shared::ecs::{GameplayState, MAIN_LAYER, STARGUIDE_LAYER};
use crate::prelude::*;

pub fn render_plugin(app: &mut App) {

M crates/unified/src/client/ship/attachment.rs => crates/unified/src/client/ship/attachment.rs +2 -2
@@ 1,8 1,8 @@
use std::ops::Deref;
use bevy::color::palettes::basic::{FUCHSIA, GREEN, WHITE};
use bevy::color::palettes::css::ORANGE;
use crate::attachment::{JointOf, Peer, SnapOf};
use crate::ecs::Part;
use crate::shared::attachment::{JointOf, Peer, SnapOf};
use crate::shared::ecs::Part;
use crate::prelude::*;

pub fn client_attachment_plugin(app: &mut App) {

M crates/unified/src/client/ship/thrusters.rs => crates/unified/src/client/ship/thrusters.rs +4 -4
@@ 6,13 6,13 @@ use bevy::color::palettes::css::LIMEGREEN;
use bevy::math::Vec3Swizzles;
use good_lp::{default_solver, variable, Expression, ProblemVariables, Solution, SolutionStatus, SolverModel};
use leafwing_input_manager::prelude::ActionState;
use crate::attachment::Parts;
use crate::shared::attachment::Parts;
use crate::client::input::ClientAction;
use crate::ecs::thruster::{PartThrusters, Thruster};
use crate::shared::ecs::thruster::{PartThrusters, Thruster};
use crate::prelude::*;
use crate::client::input::util::ActionStateExt;
use crate::ecs::Me;
use crate::thrust::ThrustSolution;
use crate::client::components::Me;
use crate::shared::thrust::ThrustSolution;

pub fn client_thrusters_plugin(app: &mut App) {
    app

M crates/unified/src/client/starfield.rs => crates/unified/src/client/starfield.rs +3 -5
@@ 15,11 15,9 @@ use bevy::{
    transform::components::Transform,
    window::{Window, WindowResized},
};

use crate::{
    ecs::Me,
    ecs::{MainCamera, MAIN_LAYER, StarfieldBack, StarfieldFront, StarfieldMid},
};
use crate::client::components::{MainCamera, StarfieldBack, StarfieldFront, StarfieldMid};
use crate::shared::ecs::MAIN_LAYER;
use crate::client::components::Me;

pub const BACK_STARFIELD_SIZE: f32 = 256.0;
pub const MID_STARFIELD_SIZE: f32 = 384.0;

M crates/unified/src/client/starguide/init.rs => crates/unified/src/client/starguide/init.rs +2 -1
@@ 1,8 1,9 @@
use bevy::anti_alias::fxaa::Fxaa;
use bevy::core_pipeline::tonemapping::DebandDither;
use bevy::post_process::bloom::Bloom;
use crate::client::components::{Me, StarguideCamera, StarguideMe, StarguideOrbit};
use crate::prelude::*;
use crate::ecs::{Me, Part, STARGUIDE_LAYER, StarguideCamera, StarguideMe, StarguideOrbit};
use crate::shared::ecs::{Part, STARGUIDE_LAYER};

pub fn starguide_init_plugin(app: &mut App) {
    app

M crates/unified/src/client/starguide/input.rs => crates/unified/src/client/starguide/input.rs +1 -1
@@ 1,6 1,6 @@
use crate::prelude::*;
use crate::client::input::CursorWorldCoordinates;
use crate::ecs::StarguideCamera;
use crate::client::components::StarguideCamera;

pub fn starguide_input_plugin(app: &mut App) {
    app

M crates/unified/src/client/starguide/orbit.rs => crates/unified/src/client/starguide/orbit.rs +4 -3
@@ 1,7 1,8 @@
use std::f64::consts::PI;


use crate::{config::planet::Planet, ecs::{Me, StarguideCamera, StarguideGizmos}, prelude::*, world_config::WorldConfigResource};
use crate::client::components::{Me, StarguideCamera, StarguideGizmos};
use crate::prelude::*;
use crate::shared::config::planet::Planet;
use crate::shared::world_config::WorldConfigResource;

pub fn starguide_orbit_plugin(app: &mut App) {
    app

M crates/unified/src/client/ui.rs => crates/unified/src/client/ui.rs +3 -4
@@ 1,10 1,9 @@
use crate::prelude::*;

use crate::{
    client::colors,
    ecs::{FuelText, Player, PlayerStorage, PowerText, MainCamera, MAIN_LAYER},
};
use crate::client::colors;
use crate::client::components::{FuelText, MainCamera, PowerText};
use crate::client::rendering::setup_graphics;
use crate::shared::ecs::{Player, PlayerStorage, MAIN_LAYER};

pub fn ui_plugin(app: &mut App) {
    app.add_systems(Startup, setup_ui.after(setup_graphics))

M crates/unified/src/client/zoom.rs => crates/unified/src/client/zoom.rs +3 -6
@@ 2,12 2,9 @@ use bevy::{
    input::mouse::{MouseScrollUnit, MouseWheel},
    prelude::*,
};

use crate::{
    client::starfield::{BACK_STARFIELD_SIZE, FRONT_STARFIELD_SIZE, MID_STARFIELD_SIZE, StarfieldSize}, ecs::{MainCamera, Me, OrbitCamera, StarfieldBack, StarfieldFront, StarfieldMid}
};
use crate::ecs::{StarguideCamera, GameplayState};

use crate::client::components::{MainCamera, Me, OrbitCamera, StarfieldBack, StarfieldFront, StarfieldMid, StarguideCamera};
use crate::client::starfield::{StarfieldSize, BACK_STARFIELD_SIZE, FRONT_STARFIELD_SIZE, MID_STARFIELD_SIZE};
use crate::shared::ecs::GameplayState;
pub fn zoom_plugin(app: &mut App) {
    app.add_systems(Update, on_scroll);
}

M crates/unified/src/main.rs => crates/unified/src/main.rs +5 -12
@@ 16,32 16,25 @@
#![allow(clippy::too_many_arguments, reason = "Le Bevy:tm:")]
#![allow(clippy::too_many_lines, reason = "With the three of us, this is impossible")]

pub mod attachment;
pub mod client;
pub mod client_plugins;
pub mod config;
pub mod ecs;
pub mod server;
pub mod server_plugins;
pub mod shared_plugins;
pub mod world_config;

pub mod physics;
pub mod prelude;

#[cfg(target_arch = "wasm32")]
pub mod wasm_entrypoint;
mod cli;
mod thrust;
pub mod shared;

use std::str::FromStr;
use shared::plugins;
#[cfg(target_arch = "wasm32")]
pub use wasm_entrypoint::*;

use crate::cli::StkArgs;
use crate::client_plugins::ClientPluginGroup;
use client::plugins::ClientPluginGroup;
use crate::prelude::*;
use crate::server_plugins::ServerPluginGroup;
use server::plugins::ServerPluginGroup;

fn run(cli: StkArgs) -> AppExit {
    let mut app = App::new();


@@ 53,7 46,7 @@ fn run(cli: StkArgs) -> AppExit {
                    .disable::<bevy::log::LogPlugin>()
                    .disable::<bevy::ui::UiPlugin>()
            );
            app.add_plugins(shared_plugins::SharedPluginGroup);
            app.add_plugins(plugins::SharedPluginGroup);
            app.add_plugins(ServerPluginGroup);
            app.add_plugins(ClientPluginGroup);
        }

M crates/unified/src/server/craft.rs => crates/unified/src/server/craft.rs +3 -1
@@ 1,6 1,8 @@
use std::collections::HashMap;

use crate::{attachment::{PartInShip, Parts}, ecs::{CraftPartRequest, Part, Player, SingleStorage, VariableStorage}, prelude::*, server::part::{SpawnPartBundle, SpawnPartRequest}};
use crate::{prelude::*, server::part::{SpawnPartBundle, SpawnPartRequest}};
use crate::shared::attachment::{PartInShip, Parts};
use crate::shared::ecs::{CraftPartRequest, Part, Player, SingleStorage, VariableStorage};

pub fn craft_plugin(app: &mut App) {
    app.add_systems(Update, receive_crafting_request);

M crates/unified/src/server/drill.rs => crates/unified/src/server/drill.rs +5 -1
@@ 1,4 1,8 @@
use crate::{attachment::{PartInShip, Parts}, config::planet::Planet, ecs::{Drill, Part, PlanetSensor, Player, SingleStorage, ToggleDrillEvent, VariableStorage}, prelude::*};
use crate::client::components::PlanetSensor;
use crate::prelude::*;
use crate::shared::attachment::{PartInShip, Parts};
use crate::shared::config::planet::Planet;
use crate::shared::ecs::{Drill, Part, Player, SingleStorage, ToggleDrillEvent, VariableStorage};

pub fn drill_plugin(app: &mut App) {
    app.add_systems(Update, (toggle_drill, drill_on_planet, do_drilling));

M crates/unified/src/server/earth_parts.rs => crates/unified/src/server/earth_parts.rs +2 -2
@@ 1,6 1,6 @@
use crate::config::planet::Planet;
use crate::shared::config::planet::Planet;
use crate::server::part::{SpawnPartBundle, SpawnPartRequest};
use crate::world_config::WorldConfigResource;
use crate::shared::world_config::WorldConfigResource;
use bevy::app::App;
use crate::prelude::*;
use bevy::time::Time;

M crates/unified/src/server/gravity.rs => crates/unified/src/server/gravity.rs +3 -3
@@ 1,8 1,8 @@
use crate::config::planet::Planet;
use crate::ecs::Part;
use crate::shared::config::planet::Planet;
use crate::shared::ecs::Part;
use crate::prelude::*;
use crate::server::system_sets::WorldUpdateSet;
use crate::world_config::WorldConfigResource;
use crate::shared::world_config::WorldConfigResource;

pub fn newtonian_gravity_plugin(app: &mut App) {
    app.add_systems(Update, update_gravity.in_set(WorldUpdateSet));

M crates/unified/src/server/heat/conduction.rs => crates/unified/src/server/heat/conduction.rs +2 -1
@@ 1,4 1,5 @@
use crate::{attachment::Peer, prelude::*};
use crate::prelude::*;
use crate::shared::attachment::Peer;

pub fn heat_conduction_plugin(app: &mut App) {
    app.add_systems(Update, propagate_heat);

M crates/unified/src/server/heat/cooling.rs => crates/unified/src/server/heat/cooling.rs +1 -1
@@ 1,5 1,5 @@
use crate::prelude::*;
use crate::ecs::{Cooler, Temperature};
use crate::shared::ecs::{Cooler, Temperature};

pub fn heat_cooling_plugin(app: &mut App) {
    app.add_systems(Update, cool_part);

M crates/unified/src/server/heat/radiation.rs => crates/unified/src/server/heat/radiation.rs +2 -1
@@ 1,4 1,5 @@
use crate::{ecs::{Part, Radiator, Temperature}, prelude::*};
use crate::prelude::*;
use crate::shared::ecs::{Part, Radiator, Temperature};

const STEFAN_BOLTZMANN: f64 = 5.670374419E-8;
const T_ENV: f64 = 4.0; // units: Kelvin

M crates/unified/src/server/mod.rs => crates/unified/src/server/mod.rs +1 -0
@@ 9,6 9,7 @@ pub mod planets;
pub mod player;
mod system_sets;
pub mod orbit;
pub mod plugins;

use crate::server::craft::craft_plugin;
use crate::server::damping::damping_plugin;

M crates/unified/src/server/orbit/mod.rs => crates/unified/src/server/orbit/mod.rs +2 -2
@@ 4,9 4,9 @@ use avian2d::math::TAU;
use avian2d::prelude::{LinearVelocity, Mass};
use bevy::prelude::{Plugin, Transform};
use bevy::time::Time;
use crate::config::planet::{Planet, PlanetSpring};
use crate::shared::config::planet::{Planet, PlanetSpring};
use crate::prelude::{App, Query, Res, Update, Without};
use crate::world_config::WorldConfigResource;
use crate::shared::world_config::WorldConfigResource;

pub struct OrbitPlugin;
impl Plugin for OrbitPlugin {

M crates/unified/src/server/part.rs => crates/unified/src/server/part.rs +4 -4
@@ 1,10 1,10 @@
use std::collections::HashMap;

use crate::attachment::{Joint, JointId, JointOf, Joints, Peer, SnapOf, SnapOfJoint};
use crate::config::part::{CoolingConfig, CraftingConfig, DrillConfig, JointConfig, PartConfig, StorageConfig, StorageType};
use crate::ecs::{CanCraft, Cooler, Drill, Part, PartHandle, Radiator, SingleStorage, Temperature, VariableStorage};
use crate::shared::attachment::{Joint, JointId, JointOf, Joints, Peer, SnapOf, SnapOfJoint};
use crate::shared::config::part::{CoolingConfig, CraftingConfig, DrillConfig, JointConfig, PartConfig, StorageConfig, StorageType};
use crate::shared::ecs::{CanCraft, Cooler, Drill, Part, PartHandle, Radiator, SingleStorage, Temperature, VariableStorage};
use crate::prelude::*;
use crate::ecs::thruster::{PartThrusters, Thruster, ThrusterBundle, ThrusterId, ThrusterOfPart};
use crate::shared::ecs::thruster::{PartThrusters, Thruster, ThrusterBundle, ThrusterId, ThrusterOfPart};

pub fn part_management_plugin(app: &mut App) {
    app.add_systems(PreUpdate, (handle_ready_parts, handle_part_reloading));

M crates/unified/src/server/planets.rs => crates/unified/src/server/planets.rs +4 -2
@@ 1,7 1,9 @@
use crate::{config::planet::{Planet, PlanetBundle, PlanetConfigCollection}, ecs::PlanetSensor, world_config::WorldConfigResource};
use crate::client::components::PlanetSensor;
use bevy::{asset::Handle, math::DVec3};
use crate::prelude::*;
use crate::config::planet::{PlanetSpring, PlanetSpringJoint};
use crate::shared::config::planet::{PlanetSpring, PlanetSpringJoint};
use crate::shared::config::planet::{Planet, PlanetBundle, PlanetConfigCollection};
use crate::shared::world_config::WorldConfigResource;

pub fn planets_plugin(app: &mut App) {
    app.init_resource::<PlanetConfigResource>()

M crates/unified/src/server/player.rs => crates/unified/src/server/player.rs +4 -3
@@ 1,13 1,14 @@
pub mod join;
pub mod thrust;

use crate::attachment::{Joint, JointOf, Joints, PartInShip, Peer, SnapOf, SnapOfJoint};
use crate::ecs::{DragRequestEvent, Me, Part, Player, PlayerStorage};
use crate::shared::attachment::{Joint, JointOf, Joints, PartInShip, Peer, SnapOf, SnapOfJoint};
use crate::shared::ecs::{DragRequestEvent, Part, Player, PlayerStorage};
use crate::server::damping::ModuleJointDamping;
use crate::server::system_sets::PlayerInputSet;
use crate::prelude::*;
use crate::world_config::WorldConfigResource;
use crate::shared::world_config::WorldConfigResource;
use std::f64::consts::PI;
use crate::client::components::Me;

pub fn player_management_plugin(app: &mut App) {
    app.add_systems(

M crates/unified/src/server/player/join.rs => crates/unified/src/server/player/join.rs +5 -4
@@ 1,10 1,11 @@
use crate::config::planet::Planet;
use crate::config::world::GlobalWorldConfig;
use crate::ecs::{Me, Player, PlayerStorage};
use crate::client::components::Me;
use crate::shared::config::planet::Planet;
use crate::shared::config::world::GlobalWorldConfig;
use crate::shared::ecs::{Player, PlayerStorage};
use crate::prelude::*;
use crate::server::ConnectedGameEntity;
use crate::server::part::SpawnPartRequest;
use crate::world_config::WorldConfigResource;
use crate::shared::world_config::WorldConfigResource;

fn join_player(joined_player: Entity, mut commands: Commands, wc: &GlobalWorldConfig,
    planets: Query<(&Transform, &LinearVelocity, &Planet)>, asset_server: &AssetServer

M crates/unified/src/server/player/thrust.rs => crates/unified/src/server/player/thrust.rs +5 -4
@@ 2,11 2,12 @@
//! The thrust solver runs on the client and sends a `ThrustSolution` message;
//! this file receives it and applies it to the physics simulation.

use crate::ecs::{Me, Part, Temperature};
use crate::ecs::thruster::{Thruster, ThrusterOfPart};
use crate::client::components::Me;
use crate::shared::ecs::{Part, Temperature};
use crate::shared::ecs::thruster::{Thruster, ThrusterOfPart};
use crate::prelude::*;
use crate::attachment::Parts;
use crate::thrust::ThrustSolution;
use crate::shared::attachment::Parts;
use crate::shared::thrust::ThrustSolution;

pub fn server_thrust_plugin(app: &mut App) {
    app

R crates/unified/src/server_plugins.rs => crates/unified/src/server/plugins.rs +0 -0
R crates/unified/src/attachment.rs => crates/unified/src/shared/attachment.rs +0 -0
R crates/unified/src/config/mod.rs => crates/unified/src/shared/config/mod.rs +0 -0
R crates/unified/src/config/part.rs => crates/unified/src/shared/config/part.rs +0 -0
R crates/unified/src/config/planet.rs => crates/unified/src/shared/config/planet.rs +0 -0
R crates/unified/src/config/recipe.rs => crates/unified/src/shared/config/recipe.rs +0 -0
R crates/unified/src/config/world.rs => crates/unified/src/shared/config/world.rs +0 -0
R crates/unified/src/ecs.rs => crates/unified/src/shared/ecs.rs +3 -39
@@ 1,6 1,6 @@
pub mod thruster;

use crate::config::part::PartConfig;
use crate::shared::config::part::PartConfig;
use bevy::math::{Quat, Vec2};
use bevy::camera::visibility::RenderLayers;
use crate::prelude::*;


@@ 19,29 19,7 @@ pub const STARGUIDE_LAYER: RenderLayers = RenderLayers::layer(1);
pub static MAIN_STAR_LAYERS: LazyLock<RenderLayers> = LazyLock::new(|| RenderLayers::from_layers(&[0, 1]));
pub const ORBIT_LAYER: RenderLayers = RenderLayers::layer(2);

#[derive(Component)]
pub struct MainCamera;
#[derive(Component)]
pub struct StarguideCamera;
#[derive(Component)]
pub struct OrbitCamera;

#[derive(Default, Reflect, GizmoConfigGroup)]
pub struct StarguideGizmos;

#[derive(Component)]
pub struct StarfieldFront;
#[derive(Component)]
pub struct StarfieldMid;
#[derive(Component)]
pub struct StarfieldBack;
#[derive(Component)]
pub struct FuelText;
#[derive(Component)]
pub struct PowerText;

#[derive(Component)]
pub struct PlanetSensor(pub String); // corresponding planet name
// corresponding planet name

#[derive(Component, Serialize, Deserialize, Debug)]
#[require(


@@ 78,21 56,8 @@ pub struct PlayerStorage {
    pub power: f32,
}

#[derive(Component)]
pub struct Me;
#[derive(Component)]
pub struct StarguideMe;

#[derive(Resource)]
pub struct StarguideOrbitImage(pub Handle<Image>);

#[derive(Component)]
pub struct StarguideOrbit;

#[derive(Component, Serialize, Deserialize, Debug)]
pub struct CanCraft;
#[derive(Component, Serialize, Deserialize, Debug)]
pub struct CraftingUi;
#[derive(Message, Debug, Clone)]
pub struct CraftPartRequest {
    pub crafting_part: Entity,


@@ 103,8 68,6 @@ pub struct CraftPartRequest {
#[derive(Component, Serialize, Deserialize, Debug)]
pub struct Temperature(pub f64);
#[derive(Component, Serialize, Deserialize, Debug)]
pub struct TemperatureSprite;
#[derive(Component, Serialize, Deserialize, Debug)]
pub struct Cooler {
    pub cool_temperature: f64,
    pub heat_cooling_constant: f64,


@@ 137,3 100,4 @@ pub struct VariableStorage {
    pub resources: HashMap<String, f32>,
    pub capacity: f32,
}


R crates/unified/src/ecs/thruster.rs => crates/unified/src/shared/ecs/thruster.rs +0 -0
A crates/unified/src/shared/mod.rs => crates/unified/src/shared/mod.rs +7 -0
@@ 0,0 1,7 @@
pub mod attachment;
pub mod config;
pub mod physics;
pub mod thrust;
pub mod world_config;
pub mod plugins;
pub mod ecs;
\ No newline at end of file

R crates/unified/src/physics.rs => crates/unified/src/shared/physics.rs +0 -0
R crates/unified/src/shared_plugins.rs => crates/unified/src/shared/plugins.rs +7 -7
@@ 1,13 1,13 @@
use crate::ecs::{CraftPartRequest, DragRequestEvent, ToggleDrillEvent};
use crate::thrust::ThrustSolution;
use crate::shared::ecs::{CraftPartRequest, DragRequestEvent, ToggleDrillEvent};
use crate::shared::thrust::ThrustSolution;
use bevy::app::{App, PluginGroup, PluginGroupBuilder};
use bevy_common_assets::toml::TomlAssetPlugin;
use crate::prelude::*;
use crate::config::part::PartConfig;
use crate::config::planet::PlanetConfigCollection;
use crate::config::recipe::RecipesConfig;
use crate::config::world::GlobalWorldConfig;
use crate::world_config::world_config_plugin;
use crate::shared::config::part::PartConfig;
use crate::shared::config::planet::PlanetConfigCollection;
use crate::shared::config::recipe::RecipesConfig;
use crate::shared::config::world::GlobalWorldConfig;
use crate::shared::world_config::world_config_plugin;

pub struct SharedPluginGroup;


R crates/unified/src/thrust.rs => crates/unified/src/shared/thrust.rs +0 -0
R crates/unified/src/world_config.rs => crates/unified/src/shared/world_config.rs +1 -1
@@ 1,4 1,4 @@
use crate::config::world::GlobalWorldConfig;
use crate::shared::config::world::GlobalWorldConfig;
use bevy::asset::Handle;
use crate::prelude::*;


M crates/unified/src/wasm_entrypoint.rs => crates/unified/src/wasm_entrypoint.rs +3 -3
@@ 1,6 1,6 @@
use crate::client_plugins::ClientPluginGroup;
use crate::server_plugins::ServerPluginGroup;
use crate::shared_plugins::SharedPluginGroup;
use crate::client::plugins::ClientPluginGroup;
use crate::server::plugins::ServerPluginGroup;
use crate::shared::plugins::SharedPluginGroup;
use bevy::app::App;
use bevy::log::LogPlugin;
use bevy::ui::UiPlugin;