From 93e98f54771c751d63b055f98c02de8ed91549c2 Mon Sep 17 00:00:00 2001 From: hodasemi Date: Sat, 5 Apr 2025 14:18:41 +0200 Subject: [PATCH] Next fixes --- character_window/src/character/mod.rs | 20 +++++------ character_window/src/inventory/content.rs | 13 ++++---- .../src/inventory/jewel_right_side.rs | 33 ++++++++++--------- character_window/src/inventory/mod.rs | 3 +- 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/character_window/src/character/mod.rs b/character_window/src/character/mod.rs index 8f4fec1..456623a 100644 --- a/character_window/src/character/mod.rs +++ b/character_window/src/character/mod.rs @@ -166,7 +166,8 @@ impl CharacterPage { let level = entity.get_component::()?; let attributes = entity.get_component::()?; - let gui_handler = resources.get::(); + let (gui_handler, attribute_settings): (&mut GuiHandler, &mut AttributeSettings) = + resources.get_mut()?; level_label.set_text(gui_handler, format!("Level: {}", level.level()))?; level_progress.set_text( @@ -178,11 +179,7 @@ impl CharacterPage { gui_handler, format!( "Attributes ({})", - Self::available_attribute_points( - resources.get::(), - attributes, - level - ) + Self::available_attribute_points(attribute_settings, attributes, level) ), )?; @@ -222,15 +219,16 @@ impl CharacterPage { let attribute_settings = resources.get::(); let item_settings = resources.get::(); - let level = multi_mut.get::()?; - let attributes = multi_mut.get::()?; + let (level, attributes, statistics, items): ( + &mut Level, + &mut Attributes, + &mut Statistics, + &mut ItemSlotContainer, + ) = entity.get_components_mut()?; if Self::available_attribute_points(attribute_settings, attributes, level) > 0 { upgrade(attributes); - let statistics = multi_mut.get::()?; - let items = multi_mut.get::()?; - statistics.update(attributes, attribute_settings, (&*items, item_settings)); upgraded = true; diff --git a/character_window/src/inventory/content.rs b/character_window/src/inventory/content.rs index c09a70b..8b17873 100644 --- a/character_window/src/inventory/content.rs +++ b/character_window/src/inventory/content.rs @@ -67,21 +67,22 @@ impl Content { fn equip_item(world: &mut World, hero: Entity, item_index: usize) -> Result<()> { let (entity, resources) = world.entity_resources(hero)?; - let hero_items = multi_mut.get::()?; - let inventory = multi_mut.get::>()?; - let attributes = multi_mut.get::()?; + let (hero_items, inventory, attributes, statistics): ( + &mut ItemSlotContainer, + &mut Inventory, + &mut Attributes, + &mut Statistics, + ) = entity.get_components_mut()?; // remove item from inventory let item = inventory.remove_item(item_index); // add or swap items with equipment - if let Some(old_item) = hero_items.insert(item.clone(), attributes, &mut multi_mut)? { + if let Some(old_item) = hero_items.insert(item.clone(), attributes, entity)? { inventory.insert_item(old_item, item_index); } // update hero stats - let statistics = multi_mut.get::()?; - statistics.update( attributes, resources.get::(), diff --git a/character_window/src/inventory/jewel_right_side.rs b/character_window/src/inventory/jewel_right_side.rs index 23c70d5..e3592b6 100644 --- a/character_window/src/inventory/jewel_right_side.rs +++ b/character_window/src/inventory/jewel_right_side.rs @@ -232,15 +232,19 @@ impl JewelRightSide { pub fn combine(world: &mut World, hero: Entity) -> Result { let (entity, resources) = world.entity_resources(hero)?; - let reference_info = resources.get::>(); + let (reference_info, lower_info, item_system, attribute_settings, item_settings): ( + &mut ReferenceObject, + &mut LowerJewels, + &mut ItemSystem, + &mut AttributeSettings, + &mut ItemSettings, + ) = resources.get_mut()?; - if reference_info.is_none() { + if reference_info.some().is_none() { return Ok(false); } - let lower_info = resources.get::(); - - if let Some(upper_info) = reference_info { + if let Some(upper_info) = reference_info.some() { match upper_info { ReferenceObject::Item { item, source } => { // check that is there something in lower @@ -278,11 +282,12 @@ impl JewelRightSide { } } ReferenceItemSource::Slots(opt_index) => { - let attribute_settings = resources.get::(); - let item_settings = resources.get::(); - - let inventory = multi_mut.get::>()?; - let item_slots = multi_mut.get::()?; + let (inventory, item_slots, statistics, attributes): ( + &mut Inventory, + &mut ItemSlotContainer, + &mut Statistics, + &mut Attributes, + ) = entity.get_components_mut()?; let slot = item.slot; let item = item_slots.item_mut(slot, *opt_index).as_mut().unwrap(); @@ -309,9 +314,6 @@ impl JewelRightSide { } } - let statistics = multi_mut.get::()?; - let attributes = multi_mut.get::()?; - statistics.update( attributes, attribute_settings, @@ -332,9 +334,6 @@ impl JewelRightSide { return Ok(false); } - let item_settings = resources.get::(); - let item_system = resources.get::>(); - let inventory = entity.get_component_mut::>()?; let upper_jewel = inventory.jewel_mut_at(*index); @@ -362,6 +361,8 @@ impl JewelRightSide { debug_assert_eq!(*jewel, inventory.remove_jewel(*i)) }); } + + ReferenceObject::Empty => unreachable!(), } } diff --git a/character_window/src/inventory/mod.rs b/character_window/src/inventory/mod.rs index d3b0550..d8a6867 100644 --- a/character_window/src/inventory/mod.rs +++ b/character_window/src/inventory/mod.rs @@ -7,6 +7,7 @@ use std::marker::PhantomData; use std::sync::{Arc, Weak}; use anyhow::Result; +use ecs::*; use engine::prelude::*; use rpg_components::components::inventory::Inventory; use rpg_components::items::ability_book::Ability; @@ -42,7 +43,7 @@ impl InventoryPage { reference: Weak, close: &Arc