~starkingdoms/starkingdoms

ref: 11e8a560ca3014cf9edbaacaf41d2818fdaabc3d starkingdoms/crates/unified/src/server/craft.rs -rw-r--r-- 985 bytes
11e8a560ghostly_zsh feat: crafting buttons cause parts to spawn 20 hours 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
use crate::{ecs::{CraftPartRequest, Part}, prelude::*, server::part::{SpawnPartBundle, SpawnPartRequest}};

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

fn receive_crafting_request(
    mut craft_part_request: MessageReader<FromClient<CraftPartRequest>>,
    mut part_query: Query<(&Transform, &Part)>,
    mut commands: Commands,
    asset_server: Res<AssetServer>,
) {
    for request in craft_part_request.read() {
        let Ok((transform, part)) = part_query.get(request.crafting_part) else {
            warn!("When receiving a crafting request, the crafting part didn't exist.");
            continue;
        };

        commands.spawn(SpawnPartBundle {
            req: SpawnPartRequest(asset_server.load(
                         format!("config/parts/{}.part.toml", request.crafted_part.to_lowercase()))),
            transform: transform.with_translation(transform.translation + vec3(50.0, 0.0, 0.0)),
        });
    }
}