From a8718d50c94fc024c893a6f592a205f71bb94b99 Mon Sep 17 00:00:00 2001 From: Monty Marz Date: Mon, 18 Oct 2021 22:18:40 +0200 Subject: [PATCH] crafting station model, explanatory text part 1 --- assets/voxygen/item_image_manifest.ron | 2 +- .../salvaging_station/salvaging_station-0.vox | Bin 5168 -> 3864 bytes assets/voxygen/voxel/sprite_manifest.ron | 2 +- voxygen/src/hud/crafting.rs | 141 +++++++++++------- 4 files changed, 90 insertions(+), 55 deletions(-) diff --git a/assets/voxygen/item_image_manifest.ron b/assets/voxygen/item_image_manifest.ron index 57c18023ac..eb92ff183c 100644 --- a/assets/voxygen/item_image_manifest.ron +++ b/assets/voxygen/item_image_manifest.ron @@ -37,7 +37,7 @@ ), Tool("SalvagingBench"): VoxTrans( "voxel.sprite.salvaging_station.salvaging_station-0", - (0.0, 0.0, 0.0), (-90.0, 20.0, 0.0), 1.0, + (0.0, 0.0, 0.0), (-50.0, 40.0, 30.0), 0.9, ), // Weapons // Diary Example Images diff --git a/assets/voxygen/voxel/sprite/salvaging_station/salvaging_station-0.vox b/assets/voxygen/voxel/sprite/salvaging_station/salvaging_station-0.vox index c2fa637b22d24a974e66513e57a6a3ec87262fb9..f572a73b750c798bb04bee56d1317ed09d9aa2d1 100644 GIT binary patch literal 3864 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 L{Im6+X{)~jn&Xc{ diff --git a/assets/voxygen/voxel/sprite_manifest.ron b/assets/voxygen/voxel/sprite_manifest.ron index c3807ec7ba..80531c078d 100644 --- a/assets/voxygen/voxel/sprite_manifest.ron +++ b/assets/voxygen/voxel/sprite_manifest.ron @@ -3221,7 +3221,7 @@ SalvagingBench: Some(( variations: [ ( model: "voxygen.voxel.sprite.salvaging_station.salvaging_station-0", - offset: (-8.5, -7.5, 0.0), + offset: (-7.0, -8.0, 0.0), lod_axes: (0.0, 0.0, 0.0), ), ], diff --git a/voxygen/src/hud/crafting.rs b/voxygen/src/hud/crafting.rs index 962c8f0427..a3ecd7e18d 100644 --- a/voxygen/src/hud/crafting.rs +++ b/voxygen/src/hud/crafting.rs @@ -142,12 +142,12 @@ pub enum CraftingTab { Armor, Weapon, ProcessedMaterial, - Dismantle, Food, Potion, Bag, Utility, Glider, + Dismantle, // Needs to be the last one or widget alignment will be messed up } impl CraftingTab { @@ -155,7 +155,6 @@ impl CraftingTab { match self { CraftingTab::All => "hud.crafting.tabs.all", CraftingTab::Armor => "hud.crafting.tabs.armor", - CraftingTab::Dismantle => "hud.crafting.tabs.dismantle", CraftingTab::Food => "hud.crafting.tabs.food", CraftingTab::Glider => "hud.crafting.tabs.glider", CraftingTab::Potion => "hud.crafting.tabs.potion", @@ -164,6 +163,7 @@ impl CraftingTab { CraftingTab::Weapon => "hud.crafting.tabs.weapon", CraftingTab::Bag => "hud.crafting.tabs.bag", CraftingTab::ProcessedMaterial => "hud.crafting.tabs.processed_material", + CraftingTab::Dismantle => "hud.crafting.tabs.dismantle", } } @@ -171,7 +171,6 @@ impl CraftingTab { match self { CraftingTab::All => imgs.icon_globe, CraftingTab::Armor => imgs.icon_armor, - CraftingTab::Dismantle => imgs.icon_dismantle, CraftingTab::Food => imgs.icon_food, CraftingTab::Glider => imgs.icon_glider, CraftingTab::Potion => imgs.icon_potion, @@ -180,13 +179,14 @@ impl CraftingTab { CraftingTab::Weapon => imgs.icon_weapon, CraftingTab::Bag => imgs.icon_bag, CraftingTab::ProcessedMaterial => imgs.icon_processed_material, + CraftingTab::Dismantle => imgs.icon_dismantle, } } fn satisfies(self, recipe: &Recipe) -> bool { let (item, _count) = &recipe.output; match self { - CraftingTab::All => true, + CraftingTab::All | CraftingTab::Dismantle => true, CraftingTab::Food => item.tags().contains(&ItemTag::Food), CraftingTab::Armor => match item.kind() { ItemKind::Armor(_) => !item.tags().contains(&ItemTag::Bag), @@ -207,8 +207,6 @@ impl CraftingTab { ItemKind::Tool(_) => !item.tags().contains(&ItemTag::CraftingTool), _ => false, }, - // Only has salavging UI which doesn't use recipes - CraftingTab::Dismantle => false, } } } @@ -374,53 +372,55 @@ impl<'a> Widget for Crafting<'a> { }; let sel_crafting_tab = &self.show.crafting_tab; for (i, crafting_tab) in CraftingTab::iter().enumerate() { - let tab_img = crafting_tab.img_id(self.imgs); - // Button Background - let mut bg = Image::new(self.imgs.pixel) - .w_h(40.0, 30.0) - .color(Some(UI_MAIN)); - if i == 0 { - bg = bg.top_left_with_margins_on(state.ids.window_frame, 50.0, -40.0) - } else { - bg = bg.down_from(state.ids.category_bgs[i - 1], 0.0) - }; - bg.set(state.ids.category_bgs[i], ui); - // Category Button - if Button::image(if crafting_tab == *sel_crafting_tab { - self.imgs.wpn_icon_border_pressed - } else { - self.imgs.wpn_icon_border - }) - .wh_of(state.ids.category_bgs[i]) - .middle_of(state.ids.category_bgs[i]) - .hover_image(if crafting_tab == *sel_crafting_tab { - self.imgs.wpn_icon_border_pressed - } else { - self.imgs.wpn_icon_border_mo - }) - .press_image(if crafting_tab == *sel_crafting_tab { - self.imgs.wpn_icon_border_pressed - } else { - self.imgs.wpn_icon_border_press - }) - .with_tooltip( - self.tooltip_manager, - self.localized_strings.get(crafting_tab.name_key()), - "", - &tabs_tooltip, - TEXT_COLOR, - ) - .set(state.ids.category_tabs[i], ui) - .was_clicked() - { - events.push(Event::ChangeCraftingTab(crafting_tab)) - }; - // Tab images - Image::new(tab_img) - .middle_of(state.ids.category_tabs[i]) - .w_h(20.0, 20.0) - .graphics_for(state.ids.category_tabs[i]) - .set(state.ids.category_imgs[i], ui); + if crafting_tab != CraftingTab::Dismantle { + let tab_img = crafting_tab.img_id(self.imgs); + // Button Background + let mut bg = Image::new(self.imgs.pixel) + .w_h(40.0, 30.0) + .color(Some(UI_MAIN)); + if i == 0 { + bg = bg.top_left_with_margins_on(state.ids.window_frame, 50.0, -40.0) + } else { + bg = bg.down_from(state.ids.category_bgs[i - 1], 0.0) + }; + bg.set(state.ids.category_bgs[i], ui); + // Category Button + if Button::image(if crafting_tab == *sel_crafting_tab { + self.imgs.wpn_icon_border_pressed + } else { + self.imgs.wpn_icon_border + }) + .wh_of(state.ids.category_bgs[i]) + .middle_of(state.ids.category_bgs[i]) + .hover_image(if crafting_tab == *sel_crafting_tab { + self.imgs.wpn_icon_border_pressed + } else { + self.imgs.wpn_icon_border_mo + }) + .press_image(if crafting_tab == *sel_crafting_tab { + self.imgs.wpn_icon_border_pressed + } else { + self.imgs.wpn_icon_border_press + }) + .with_tooltip( + self.tooltip_manager, + self.localized_strings.get(crafting_tab.name_key()), + "", + &tabs_tooltip, + TEXT_COLOR, + ) + .set(state.ids.category_tabs[i], ui) + .was_clicked() + { + events.push(Event::ChangeCraftingTab(crafting_tab)) + }; + // Tab images + Image::new(tab_img) + .middle_of(state.ids.category_tabs[i]) + .w_h(20.0, 20.0) + .graphics_for(state.ids.category_tabs[i]) + .set(state.ids.category_imgs[i], ui); + } } // TODO: Consider UX for filtering searches, maybe a checkbox or a dropdown if @@ -1021,6 +1021,41 @@ impl<'a> Widget for Crafting<'a> { .set(state.ids.ingredients[i], ui); } } + } else if *sel_crafting_tab == CraftingTab::Dismantle { + // Title + + Text::new("Dismantling") + .mid_top_with_margin_on(state.ids.align_ing, -40.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(24)) + .color(TEXT_COLOR) + .parent(state.ids.window) + .set(state.ids.title_ing, ui); + + // Bench Icon + + Image::new(animate_by_pulse( + &self + .item_imgs + .img_ids_or_not_found_img(Tool("SalvagingBench".to_string())), + self.pulse, + )) + .w_h(120.0, 120.0) + .mid_top_with_margin_on(state.ids.align_ing, 40.0) + .parent(state.ids.align_ing) + .set(state.ids.output_img_frame, ui); + + // Explanation + + Text::new("Explanation goes here") + .mid_bottom_with_margin_on(state.ids.output_img_frame, -40.0) + .font_id(self.fonts.cyri.conrod_id) + .font_size(self.fonts.cyri.scale(14)) + .color(TEXT_COLOR) + .parent(state.ids.window) + .set(state.ids.ingredients_txt, ui); + + // Colored Overlays } // Search / Title Recipes