From 071b4dc40805ed648e1b876a2eaafc0c80925ff0 Mon Sep 17 00:00:00 2001 From: hodasemi Date: Sun, 6 Apr 2025 07:17:03 +0200 Subject: [PATCH] Start more complex cases --- character_window/src/inventory/content.rs | 8 +++---- .../src/inventory/item_right_side.rs | 22 ++++++++++------- .../src/inventory/jewel_right_side.rs | 24 ++++++++++--------- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/character_window/src/inventory/content.rs b/character_window/src/inventory/content.rs index 8b17873..17d4b93 100644 --- a/character_window/src/inventory/content.rs +++ b/character_window/src/inventory/content.rs @@ -292,14 +292,14 @@ impl Content { let jewel = inventory.jewel_at(jewel_index).clone(); // remove from reference if placed there - let socket_object = world.resources.get_mut::>(); - if let Some(ReferenceObject::Jewel { index, .. }) = socket_object { + let socket_object: &mut ReferenceObject = world.resources.get_mut()?; + if let Some(ReferenceObject::Jewel { index, .. }) = socket_object.some() { if *index == jewel_index { - *socket_object = None; + *socket_object = ReferenceObject::Empty; } } - let lower_jewels = world.resources.get_mut::(); + let lower_jewels: &mut LowerJewels = world.resources.get_mut()?; // check if that jewel is already added if !lower_jewels.jewels.iter().any(|content| match content { diff --git a/character_window/src/inventory/item_right_side.rs b/character_window/src/inventory/item_right_side.rs index 49adbed..c5329f2 100644 --- a/character_window/src/inventory/item_right_side.rs +++ b/character_window/src/inventory/item_right_side.rs @@ -230,8 +230,19 @@ mod macros { let (entity, resources) = world.entity_resources($hero)?; - let items = multi_mut.get::()?; - let inventory = multi_mut.get::>()?; + let ( + items, + inventory, + statistics, + attributes, + status + ): ( + &mut ItemSlotContainer, + &mut Inventory, + &mut Statistics, + &mut Attributes, + &mut CharacterStatus + ) = entity.get_components_mut()?; if let Some($item) = items.[<$item>]() { inventory.add_item($item.clone()); @@ -239,10 +250,7 @@ mod macros { } if found_item { - items.[](&mut multi_mut)?; - - let statistics = multi_mut.get::()?; - let attributes = multi_mut.get::()?; + items.[](entity)?; statistics.update( attributes, @@ -250,8 +258,6 @@ mod macros { (&*items, resources.get::()) ); - let status = multi_mut.get::()?; - if status.current_health > statistics.health { status.current_health = statistics.health.clone(); } diff --git a/character_window/src/inventory/jewel_right_side.rs b/character_window/src/inventory/jewel_right_side.rs index e3592b6..3217df3 100644 --- a/character_window/src/inventory/jewel_right_side.rs +++ b/character_window/src/inventory/jewel_right_side.rs @@ -374,15 +374,19 @@ impl RightSide for JewelRightSide { fn refresh(&mut self, world: &mut World, _hero: Entity) -> Result<()> { let (reference, lower) = self.elements()?; - let gui_handler = resources.get::(); - let reference_info = resources.get::>(); - let lower_info = resources.get::(); + let (gui_handler, reference_info, lower_info): ( + &mut GuiHandler, + &mut ReferenceObject, + &mut LowerJewels, + ) = world.resources.get_mut()?; - match reference_info.as_ref() { + match reference_info.some() { Some(reference_info) => { let icon = match reference_info { ReferenceObject::Item { item, .. } => item.icon(), ReferenceObject::Jewel { jewel, .. } => jewel.icon(), + + ReferenceObject::Empty => unreachable!(), }; reference.set_icon(gui_handler, &icon)?; @@ -401,13 +405,11 @@ impl RightSide for JewelRightSide { } fn disable(&mut self, world: &mut World, _hero: Entity) -> Result<()> { - *world.resources.get_mut::>() = None; - world - .resources - .get_mut::() - .jewels - .iter_mut() - .for_each(|j| *j = None); + let reference_object: &mut ReferenceObject = world.resources.get_mut()?; + *reference_object = ReferenceObject::Empty; + + let lower_jewels: &mut LowerJewels = world.resources.get_mut()?; + lower_jewels.jewels.iter_mut().for_each(|j| *j = None); Ok(()) }