~starkingdoms/starkingdoms

25e4fd63331cdb6c895d19a42630c6ad4954a384 — core 5 months ago 086b9dd
chore: fix warnings
M crates/unified/src/attachment.rs => crates/unified/src/attachment.rs +1 -0
@@ 18,6 18,7 @@ pub struct PartInShip(#[entities] Entity);


#[derive(Component, Serialize, Deserialize)]
#[require(Transform)]
pub struct Joint {
    pub id: JointId,
    pub transform: Transform

M crates/unified/src/client/mod.rs => crates/unified/src/client/mod.rs +3 -3
@@ 22,6 22,7 @@ use bevy::core_pipeline::tonemapping::DebandDither;
use bevy::dev_tools::picking_debug::DebugPickingMode;
use bevy::prelude::*;
use bevy::window::PrimaryWindow;
use bevy_egui::EguiPlugin;
use bevy_replicon::shared::server_entity_map::ServerEntityMap;
use crate::client::net::set_config;
use crate::client::planet::indicators::indicators_plugin;


@@ 68,10 69,9 @@ fn find_me(
    asset_server: Res<AssetServer>,
) {
    for (entity, player, part) in q_clients.iter() {
        let this_id_clientside = entity_map.to_client().get(&player.client).unwrap();
        if *this_id_clientside == entity {
        if player.client == entity {
            commands.entity(entity).insert(Me);
            let mut heart_sprite = Sprite::from_image(asset_server.load("sprites/heart_sprite.png"));
            let mut heart_sprite = Sprite::from_image(asset_server.load("sprites/hearty_heart.png"));
            heart_sprite.custom_size = Some(Vec2::new(part.width, part.height));
            heart_sprite.color = Color::srgb(20.0, 0.0, 0.0);


M crates/unified/src/ecs.rs => crates/unified/src/ecs.rs +1 -0
@@ 47,6 47,7 @@ pub struct PartBundle {

#[derive(Component, Serialize, Deserialize, Debug)]
pub struct Player {
    #[entities]
    pub client: Entity,
}


M crates/unified/src/main.rs => crates/unified/src/main.rs +1 -3
@@ 36,9 36,7 @@ fn main() -> AppExit {

    tracing_subscriber::fmt()
        .with_env_filter(
            EnvFilter::builder()
                .with_default_directive(Level::INFO.into())
                .from_env_lossy(),
            EnvFilter::from_default_env()
        )
        .finish()
        .init();

M crates/unified/src/server/part.rs => crates/unified/src/server/part.rs +18 -12
@@ 7,11 7,13 @@ use crate::config::part::{JointOffset, PartConfig};
use crate::ecs::Part;

pub fn part_config_plugin(app: &mut App) {
    app.add_systems(PreUpdate, handle_spawn_part_requests)
        .add_systems(Update, update_part_requests);
    app.add_systems(Update, handle_spawn_part_requests)
        // delay 1 tick
        .add_systems(PreUpdate, update_part_requests);
}

#[derive(Component, Debug)]
#[require(Transform, Replicated)]
pub struct SpawnPart(pub String);
#[derive(Component)]
struct LoadingPart(Handle<PartConfig>);


@@ 21,19 23,19 @@ struct PartType(AssetId<PartConfig>);
/// STOP DELETING MY ASSET BEVY
struct LiveConfigHandle(Handle<PartConfig>);

// watch for new SpawnPart components and start loading their config files
fn handle_spawn_part_requests(new_parts: Query<(Entity, &SpawnPart), Added<SpawnPart>>, mut commands: Commands, asset_server: Res<AssetServer>, assets: Res<Assets<PartConfig>>, parts: Query<(&Joints, &JointSnaps), With<Part>>,) {
// watch for SpawnPart components and start loading their config files
fn handle_spawn_part_requests(new_parts: Query<(Entity, &SpawnPart), (With<GlobalTransform>)>, mut commands: Commands, asset_server: Res<AssetServer>, assets: Res<Assets<PartConfig>>, parts: Query<(&Joints, &JointSnaps), With<Part>>,transform: Query<&GlobalTransform>) {
    for (new_part, request) in &new_parts {
        trace!(?new_part, ?request, "answering part request");

        let hdl: Handle<PartConfig> = asset_server.load(request.0.clone());

        commands.entity(new_part)
            .remove::<SpawnPart>()
            .insert(LiveConfigHandle(hdl.clone()));
            .insert(LiveConfigHandle(hdl.clone()))
            .remove::<SpawnPart>();

        if let Some(cfg) = assets.get(&hdl) {
            spawn_part(commands.reborrow(), new_part, cfg, &hdl.id(), parts, false);
            spawn_part(commands.reborrow(), new_part, cfg, &hdl.id(), parts, transform,false);
        } else {
            commands.entity(new_part)
                .insert(LoadingPart(hdl.clone()));


@@ 47,6 49,7 @@ fn update_part_requests(
    mut assets: ResMut<Assets<PartConfig>>,
    mut commands: Commands,
    parts: Query<(&Joints, &JointSnaps), With<Part>>,
    transform: Query<&GlobalTransform>
) {
    for ev in ev_config.read() {
        match ev {


@@ 56,7 59,7 @@ fn update_part_requests(
                    if req.0.id() == *id {
                        let Some(asset) = assets.get(*id) else { continue; };

                        spawn_part(commands.reborrow(), loading_part, asset, id, parts, false);
                        spawn_part(commands.reborrow(), loading_part, asset, id, parts, transform,false);
                    }
                }
            },


@@ 65,7 68,7 @@ fn update_part_requests(
                for (existing_part, ptype) in &existing_parts {
                    if ptype.0 == *id {
                        let Some(asset) = assets.get(ptype.0) else { continue; };
                        spawn_part(commands.reborrow(), existing_part, asset, id, parts, true);
                        spawn_part(commands.reborrow(), existing_part, asset, id, parts, transform,true);
                    }
                }
            }


@@ 74,7 77,7 @@ fn update_part_requests(
    }
}

fn spawn_part(mut commands: Commands, entity: Entity, part: &PartConfig, id: &AssetId<PartConfig>, parts: Query<(&Joints, &JointSnaps), With<Part>>, is_update: bool) {
fn spawn_part(mut commands: Commands, entity: Entity, part: &PartConfig, id: &AssetId<PartConfig>, parts: Query<(&Joints, &JointSnaps), With<Part>>, transform: Query<&GlobalTransform>, is_update: bool) {
    commands.entity(entity)
        .remove::<LoadingPart>()
        .insert(Part {


@@ 121,12 124,15 @@ fn spawn_part(mut commands: Commands, entity: Entity, part: &PartConfig, id: &As
                JointOf(entity),
                Replicated,
            )).id();
            commands.spawn((
            trace!(?e, "spawned joint");

            let e = commands.spawn((
                ChildOf(entity),
                JointSnapFor(e),
                <JointOffset as Into<Transform>>::into(joint.snap),
                Replicated,
            ));
            )).id();
            trace!(?e, "spawned jointsnap");
        }
    }
}
\ No newline at end of file

M crates/unified/src/server/player.rs => crates/unified/src/server/player.rs +7 -3
@@ 29,7 29,9 @@ fn handle_new_players(
    q_new_clients: Query<Entity, Added<ConnectedGameEntity>>,
    world_config: Res<WorldConfigResource>,
    planets: Query<(&Transform, &Planet)>,
    asset_server: Res<AssetServer>
    asset_server: Res<AssetServer>,
    gt: Query<&GlobalTransform>,
    child_of: Query<&ChildOf>
) {
    let Some(wc) = &world_config.config else {
        return;


@@ 48,11 50,13 @@ fn handle_new_players(
        new_transform.rotate_z(angle);
        new_transform.translation += spawn_planet_pos.translation;

        info!(?new_transform, "set player's position!");
        info!(?new_transform, ?joined_player, "set player's position!");

        commands.entity(joined_player)
            .insert(new_transform);

        commands.entity(joined_player)
            .insert(SpawnPart("config/parts/hearty.part.toml".to_string()))
            .insert(new_transform)
            .insert(PlayerThrust::default())
            .insert(Player {
                client: joined_player