~starkingdoms/starkingdoms

ref: 4fb7a538004c7b3fb5880cf3e71dbd782e877910 starkingdoms/crates/unified/src/server/player.rs -rw-r--r-- 1.3 KiB
4fb7a538 — core gravity 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use bevy::prelude::*;
use bevy_rapier2d::prelude::{AdditionalMassProperties, Collider, ReadMassProperties, RigidBody};
use bevy_replicon::prelude::{ConnectedClient, Replicated};
use crate::ecs::{Part, PartBundle};
use crate::server::world_config::WorldConfigResource;

pub fn player_management_plugin(mut app: &mut App) {
    app.add_systems(Update, handle_new_players);
}

fn handle_new_players(mut commands: Commands, q_new_clients: Query<Entity, Added<ConnectedClient>>, world_config: Res<WorldConfigResource>) {
    let Some(wc) = &world_config.config else { return; };
    for joined_player in &q_new_clients {
        commands.entity(joined_player)
            .insert(PartBundle {
                part: Part {
                    sprite: "textures/hearty.png".to_string(),
                    width: wc.part.default_width,
                    height: wc.part.default_height,
                    mass: wc.part.default_mass
                },
                transform: Transform::from_xyz(500.0, 0.0, 0.0), // todo,
                collider: Collider::cuboid(wc.part.default_width / 2.0, wc.part.default_height / 2.0),
                additional_mass_properties: AdditionalMassProperties::Mass(wc.part.default_mass)
            })
            .insert(ReadMassProperties::default())
            .insert(RigidBody::Dynamic)
            .insert(Replicated);
    }
}