From 562e5c4ab6cb48a4d9bdc8b25a2c533d83531304 Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Mon, 6 Apr 2026 17:38:12 -0500 Subject: [PATCH] fix: recipe list order --- crates/unified/assets/config/recipes.rc.toml | 4 +- crates/unified/src/client/crafting/ui.rs | 59 ++++++++++++++------ crates/unified/src/config/recipe.rs | 7 ++- 3 files changed, 48 insertions(+), 22 deletions(-) diff --git a/crates/unified/assets/config/recipes.rc.toml b/crates/unified/assets/config/recipes.rc.toml index f80bdae66ecaccc1f5943c0eef47a1cb830676dc..688c0c5f11e401e362fffba47a2b7311282b75e3 100644 --- a/crates/unified/assets/config/recipes.rc.toml +++ b/crates/unified/assets/config/recipes.rc.toml @@ -1,7 +1,7 @@ [recipes] Frame = [ - { Silicon = 10 } + { order = 0, inputs = { Silicon = 10 } } ] Thruster = [ - { Silicon = 20, Carbon = 20 } + { order = 1, inputs = { Silicon = 20, Carbon = 20 } } ] diff --git a/crates/unified/src/client/crafting/ui.rs b/crates/unified/src/client/crafting/ui.rs index a96899e4900e9dd3a2e5bbae0a791aaa097dd3f1..af497c96f9f4f7ae71b8680054533b6df2535058 100644 --- a/crates/unified/src/client/crafting/ui.rs +++ b/crates/unified/src/client/crafting/ui.rs @@ -161,23 +161,7 @@ fn initial_create_recipe_list( if let Some(strong_recipes_config) = recipes_config.get(&recipe_collection.handle.clone().unwrap()) { for recipe_holder in &added_recipes_holders { let mut recipe_holder = commands.get_entity(recipe_holder).unwrap(); - for (module_name, recipes) in &strong_recipes_config.recipes { - for recipe in recipes { - let resource_list = recipe.iter() - .map(|(resource_name, quantity)| format!("{} {}", quantity, resource_name)) - .collect::>().join(", "); - recipe_holder.with_child(( - Node { - ..Default::default() - }, - TextFont { - font_size: 10.0, - ..Default::default() - }, - Text::new(format!("{}: {}", module_name, resource_list)), - )); - } - } + create_recipe_list(&mut recipe_holder, strong_recipes_config); recipe_holder .insert(RecipesHolder) .remove::(); @@ -187,6 +171,9 @@ fn initial_create_recipe_list( fn update_recipe_list( mut ev_config: MessageReader>, recipe_collection: ResMut, + assets: ResMut>, + mut commands: Commands, + recipes_holders: Query>, ) { let Some(handle) = recipe_collection.handle.as_ref() else { return @@ -196,10 +183,48 @@ fn update_recipe_list( if let AssetEvent::Modified { id } = ev { if *id == handle.id() { debug!("recipe list config modified - reloading lists"); + let strong_recipes_config = assets.get(*id).unwrap(); + for recipe_holder in &recipes_holders { + let mut recipe_holder = commands.get_entity(recipe_holder).unwrap(); + recipe_holder.despawn_children(); + create_recipe_list(&mut recipe_holder, strong_recipes_config); + } } } } } +fn create_recipe_list( + recipe_holder: &mut EntityCommands, + strong_recipes_config: &RecipesConfig, +) { + let mut ui_recipes = Vec::new(); + for (module_name, recipes) in &strong_recipes_config.recipes { + for recipe in recipes { + let resource_list = recipe.inputs.iter() + .map(|(resource_name, quantity)| format!("{} {}", quantity, resource_name)) + .collect::>().join(", "); + ui_recipes.push(( + recipe.order, + (Node { + ..Default::default() + }, + TextFont { + font_size: 10.0, + ..Default::default() + }, + Text::new(format!("{}: {}", module_name, resource_list))) + )); + } + } + // ordering stuff + ui_recipes.sort_by(|a, b| a.0.cmp(&b.0)); + let ui_recipes = ui_recipes.iter().map(|recipe| &recipe.1).collect::>(); + recipe_holder.with_children(move |parent| { + for recipe in ui_recipes { + parent.spawn(recipe.clone()); + } + }); +} fn drill_button( mut interaction_query: Query< diff --git a/crates/unified/src/config/recipe.rs b/crates/unified/src/config/recipe.rs index 18337f58792f359505a60bb9935f59ecf26823bd..d67f651e99cf3ca7b4d9e6018de682a8351de3c1 100644 --- a/crates/unified/src/config/recipe.rs +++ b/crates/unified/src/config/recipe.rs @@ -7,10 +7,11 @@ use crate::prelude::*; #[derive(Deserialize, Asset, TypePath, Component, Serialize, Clone, Debug)] #[require(Replicated)] pub struct RecipesConfig { - pub recipes: HashMap>>, + pub recipes: HashMap>, } -/*#[derive(Deserialize, TypePath, Component, Serialize, Clone, Debug)] +#[derive(Deserialize, TypePath, Component, Serialize, Clone, Debug)] pub struct Recipe { + pub order: usize, pub inputs: HashMap, -}*/ +}