diff --git a/character_window/src/abilities/ability_right_side.rs b/character_window/src/abilities/ability_right_side.rs index 871bd46..c9ebdeb 100644 --- a/character_window/src/abilities/ability_right_side.rs +++ b/character_window/src/abilities/ability_right_side.rs @@ -28,23 +28,22 @@ impl<A: Ability + 'static> AbilityPageRightSide<A> { "fourth_ability", ]; - pub fn new(world: &mut World, hero: Entity, reference: &Weak<CharacterWindow>) -> Result<Self> { + pub fn new( + commands: &mut Commands, + gui_handler: &mut GuiHandler, + item_settings: &mut ItemSettings, + engine_settings: &mut EngineSettings, + context: &mut Context, + hero: Entity, + reference: &Weak<CharacterWindow>, + ) -> Result<Self> { let snippet = GuiSnippet::from_str( - world, + commands, + gui_handler, include_str!("../../resources/abilities/right_side.xml"), )?; - let color_settings = world - .resources - .get::<ItemSettings>() - .rarity_color_settings - .clone(); - - let (gui_handler, engine_settings, context): ( - &mut GuiHandler, - &mut EngineSettings, - &mut Context, - ) = world.resources.get_mut()?; + let color_settings = item_settings.rarity_color_settings.clone(); Self::rarity_icon_background(gui_handler, &snippet, "common", color_settings.common)?; Self::rarity_icon_background(gui_handler, &snippet, "uncommon", color_settings.uncommon)?; @@ -64,7 +63,7 @@ impl<A: Ability + 'static> AbilityPageRightSide<A> { button.set_callback({ let reference = reference.clone(); - move |world: &mut World| { + move |commands, gui_handler| { if let Some(menu) = reference.upgrade() { let mut tabs = menu.tabs_mut(); let abilities = tabs.abilities::<A>(); diff --git a/character_window/src/abilities/content.rs b/character_window/src/abilities/content.rs index 8d79097..49a386a 100644 --- a/character_window/src/abilities/content.rs +++ b/character_window/src/abilities/content.rs @@ -17,7 +17,8 @@ use super::AbilityPage; impl<A: Ability + 'static> Content<A, AbilityAddon> { fn show_addon_tooltip( - world: &mut World, + commands: &mut Commands, + gui_handler: &mut GuiHandler, hero: Entity, addon_index: usize, reference: &Weak<CharacterWindow>, @@ -30,7 +31,7 @@ impl<A: Ability + 'static> Content<A, AbilityAddon> { let target_y = y; let addon = inventory.addon_at(addon_index); - let gui = addon.create_tooltip(world, (target_x, target_y))?; + let gui = addon.create_tooltip(commands, gui_handler, (target_x, target_y))?; gui.enable(world)?; gui.perform_single_check(world.resources.get_mut()?, x, y)?; diff --git a/character_window/src/abilities/mod.rs b/character_window/src/abilities/mod.rs index a455330..26a2446 100644 --- a/character_window/src/abilities/mod.rs +++ b/character_window/src/abilities/mod.rs @@ -35,20 +35,21 @@ pub struct AbilityPage<A: Ability + 'static> { impl<A: Ability + 'static> AbilityPage<A> { pub fn new( - world: &mut World, + commands: &mut Commands, + gui_handler: &mut GuiHandler, hero: Entity, reference: Weak<CharacterWindow>, close: &Arc<Button>, ) -> Result<Self> { - let gui_handler = world.resources.get_mut_unchecked::<GuiHandler>(); let grid = Grid::new(gui_handler, 2, 1, false)?; let left_base = GuiSnippet::from_str( - world, + commands, + gui_handler, include_str!("../../resources/abilities/left_side.xml"), )?; - grid.attach(world, left_base.clone(), 0, 0, 1, 1)?; + grid.attach(commands, gui_handler, left_base.clone(), 0, 0, 1, 1)?; Self::setup_content_switch(&left_base, reference.clone())?; @@ -57,7 +58,7 @@ impl<A: Ability + 'static> AbilityPage<A> { // abilities let ability_mode = PageContent::new( - Content::new::<_, Self>(world, reference.clone(), { + Content::new::<_, Self>(commands, gui_handler, reference.clone(), { let hero = hero.clone(); move |world| { @@ -71,16 +72,11 @@ impl<A: Ability + 'static> AbilityPage<A> { })?, { let ui = GuiSnippet::from_str( - world, + commands, + gui_handler, include_str!("../../resources/abilities/ability_tooltip.xml"), )?; - let (gui_handler, engine_settings, context): ( - &mut GuiHandler, - &mut EngineSettings, - &mut Context, - ) = world.resources.get_mut()?; - let equip: Arc<Label> = ui.element("equip")?; equip.set_info_icon( gui_handler, @@ -179,7 +175,7 @@ impl<A: Ability + 'static> AbilityPage<A> { }) } - fn update_page(&mut self, world: &mut World) -> Result<()> { + fn update_page(&mut self, commands: &mut Commands, gui_handler: &mut GuiHandler) -> Result<()> { match self.current_mode { 0 => println!("update ability view"), 1 => println!("update addon view"), @@ -191,13 +187,27 @@ impl<A: Ability + 'static> AbilityPage<A> { mode.content_mut().update(world, self.hero)?; self.tooltip - .attach(world, mode.tooltip().clone(), 0, 0, 1, 1)?; - self.content - .attach(world, mode.content_mut().base().clone(), 0, 0, 1, 1)?; + .attach(commands, gui_handler, mode.tooltip().clone(), 0, 0, 1, 1)?; + self.content.attach( + commands, + gui_handler, + mode.content_mut().base().clone(), + 0, + 0, + 1, + 1, + )?; - self.right_side.refresh(world, self.hero)?; - self.grid - .attach(world, self.right_side.base().clone(), 1, 0, 1, 1)?; + self.right_side.refresh(commands, gui_handler, self.hero)?; + self.grid.attach( + commands, + gui_handler, + self.right_side.base().clone(), + 1, + 0, + 1, + 1, + )?; Ok(()) } diff --git a/character_window/src/character/mod.rs b/character_window/src/character/mod.rs index 456623a..3b19c6d 100644 --- a/character_window/src/character/mod.rs +++ b/character_window/src/character/mod.rs @@ -23,7 +23,8 @@ pub struct CharacterPage { impl CharacterPage { pub fn new( - world: &mut World, + commands: &mut Commands, + gui_handler: &mut GuiHandler, hero: Entity, hero_name: &str, reference: &Weak<CharacterWindow>, diff --git a/character_window/src/content.rs b/character_window/src/content.rs index 4962f54..35dad7b 100644 --- a/character_window/src/content.rs +++ b/character_window/src/content.rs @@ -33,7 +33,8 @@ pub struct Content<A: Ability + 'static, T: Send + Sync> { impl<A: Ability + 'static, T: Send + Sync> Content<A, T> { pub fn new<F, P>( - world: &mut World, + commands: &mut Commands, + gui_handler: &mut GuiHandler, reference: Weak<CharacterWindow>, on_enable: F, ) -> Result<Self> @@ -41,7 +42,11 @@ impl<A: Ability + 'static, T: Send + Sync> Content<A, T> { F: Fn(&mut World) -> Result<Vec<T>> + Send + Sync + 'static, P: Page, { - let base = GuiSnippet::from_str(world, include_str!("../resources/content.xml"))?; + let base = GuiSnippet::from_str( + commands, + gui_handler, + include_str!("../resources/content.xml"), + )?; let (gui_handler, engine_settings, context): ( &mut GuiHandler, @@ -58,12 +63,12 @@ impl<A: Ability + 'static, T: Send + Sync> Content<A, T> { left.set_callback({ let reference = reference.clone(); - move |world| { + move |commands, gui_handler| { if let Some(window) = reference.upgrade() { let mut tab = window.tab_mut(); let page = tab.downcast_mut::<P>(); - page.previous_tab(world)?; + page.previous_tab(commands, gui_handler)?; } Ok(()) @@ -79,12 +84,12 @@ impl<A: Ability + 'static, T: Send + Sync> Content<A, T> { right.set_callback({ let reference = reference.clone(); - move |world| { + move |commands, gui_handler| { if let Some(window) = reference.upgrade() { let mut tab = window.tab_mut(); let page = tab.downcast_mut::<P>(); - page.next_tab(world)?; + page.next_tab(commands, gui_handler)?; } Ok(()) @@ -105,12 +110,16 @@ impl<A: Ability + 'static, T: Send + Sync> Content<A, T> { }) } - fn clear_grid(world: &mut World, grid: &Arc<Grid>) -> Result<()> { + fn clear_grid( + commands: &mut Commands, + gui_handler: &mut GuiHandler, + grid: &Arc<Grid>, + ) -> Result<()> { let (rows, columns) = grid.dimensions(); for x in 0..columns { for y in 0..rows { - grid.detach(world, x, y)?; + grid.detach(commands, gui_handler, x, y)?; } } @@ -121,18 +130,23 @@ impl<A: Ability + 'static, T: Send + Sync> Content<A, T> { label.set_text(gui_handler, format!("{} / {}", self.page + 1, self.pages)) } - pub fn update_base<F>(&mut self, world: &mut World, setup: F) -> Result<()> + pub fn update_base<F>( + &mut self, + commands: &mut Commands, + gui_handler: &mut GuiHandler, + setup: F, + ) -> Result<()> where Self: ContentWrapper, - F: Fn(&mut World, &Arc<Button>, &T, usize) -> Result<()>, + F: Fn(&mut Commands, &mut GuiHandler, &Arc<Button>, &T, usize) -> Result<()>, { self.refresh(world)?; let grid: Arc<Grid> = self.base.element("content")?; let label: Arc<Label> = self.base.element("tab_info")?; - Self::clear_grid(world, &grid)?; - self.set_tab(world.resources.get_mut()?, &label)?; + Self::clear_grid(commands, gui_handler, &grid)?; + self.set_tab(gui_handler, &label)?; let (rows, columns) = grid.dimensions(); @@ -143,13 +157,14 @@ impl<A: Ability + 'static, T: Send + Sync> Content<A, T> { match self.data.get(index) { Some(t) => { let snippet = GuiSnippet::from_str( - world, + commands, + gui_handler, include_str!("../resources/content_button.xml"), )?; let button: Arc<Button> = snippet.element("button")?; - setup(world, &button, t, index)?; - grid.attach(world, button, x, y, 1, 1)?; + setup(commands, gui_handler, &button, t, index)?; + grid.attach(commands, gui_handler, button, x, y, 1, 1)?; } None => break 'outer, } diff --git a/character_window/src/inventory/mod.rs b/character_window/src/inventory/mod.rs index 9b284c0..6175cf2 100644 --- a/character_window/src/inventory/mod.rs +++ b/character_window/src/inventory/mod.rs @@ -38,20 +38,21 @@ pub struct InventoryPage<A: Ability + 'static> { impl<A: Ability + 'static> InventoryPage<A> { pub fn new( - world: &mut World, + commands: &mut Commands, + gui_handler: &mut GuiHandler, hero: Entity, reference: Weak<CharacterWindow>, close: &Arc<Button>, ) -> Result<Self> { - let gui_handler: &mut GuiHandler = world.resources.get_mut()?; let grid = Grid::new(gui_handler, 2, 1, false)?; let left_base = GuiSnippet::from_str( - world, + commands, + gui_handler, include_str!("../../resources/inventory/left_side.xml"), )?; - grid.attach(world, left_base.clone(), 0, 0, 1, 1)?; + grid.attach(commands, gui_handler, left_base.clone(), 0, 0, 1, 1)?; Self::setup_content_switch(&left_base, reference.clone())?; let tooltip = left_base.element("tooltip")?; @@ -59,10 +60,10 @@ impl<A: Ability + 'static> InventoryPage<A> { // items let item_mode = PageContent::<A, _>::new( - Content::new::<_, Self>(world, reference.clone(), { + Content::new::<_, Self>(commands, gui_handler, reference.clone(), { let hero = hero.clone(); - move |world: &mut World| { + move |world| { let hero_object = world.entity(hero)?; let inventory = hero_object.get_component::<Inventory<A>>()?; diff --git a/character_window/src/lib.rs b/character_window/src/lib.rs index 04568b7..842024b 100644 --- a/character_window/src/lib.rs +++ b/character_window/src/lib.rs @@ -30,12 +30,22 @@ use std::{ use self::{abilities::AbilityPage, character::CharacterPage, inventory::InventoryPage}; trait Page: Any + Send + Sync + Downcast { - fn enable(&mut self, world: &mut World) -> Result<Arc<Grid>>; - fn disable(&mut self, world: &mut World) -> Result<()>; - fn select(&self, world: &mut World) -> Result<()>; - fn next_tab(&mut self, world: &mut World) -> Result<()>; - fn previous_tab(&mut self, world: &mut World) -> Result<()>; - fn event(&mut self, world: &mut World, button: ControllerButton) -> Result<bool>; + fn enable( + &mut self, + commands: &mut Commands, + gui_handler: &mut GuiHandler, + ) -> Result<Arc<Grid>>; + fn disable(&mut self, commands: &mut Commands, gui_handler: &mut GuiHandler) -> Result<()>; + fn select(&self, commands: &mut Commands, gui_handler: &mut GuiHandler) -> Result<()>; + fn next_tab(&mut self, commands: &mut Commands, gui_handler: &mut GuiHandler) -> Result<()>; + fn previous_tab(&mut self, commands: &mut Commands, gui_handler: &mut GuiHandler) + -> Result<()>; + fn event( + &mut self, + commands: &mut Commands, + gui_handler: &mut GuiHandler, + button: ControllerButton, + ) -> Result<bool>; } impl_downcast!(Page); @@ -130,12 +140,14 @@ pub struct CharacterWindow { impl CharacterWindow { pub fn new<A: Ability + 'static>( - world: &mut World, + commands: &mut Commands, + gui_handler: &mut GuiHandler, hero: Entity, name: &str, close: Box<dyn FutureStateChange>, ) -> Result<Arc<Self>> { - let menu_gui = GuiBuilder::from_str(world, include_str!("../resources/menu.xml"))?; + let menu_gui = + GuiBuilder::from_str(commands, gui_handler, include_str!("../resources/menu.xml"))?; let content_grid = menu_gui.element("tab_content")?; let open_character_page: Arc<Button> = menu_gui.element("open_statistics")?; @@ -152,9 +164,15 @@ impl CharacterWindow { tooltips: Mutex::default(), tabs: RwLock::new([ - Box::new(CharacterPage::new(world, hero, name, me).unwrap()), - Box::new(InventoryPage::<A>::new(world, hero, me.clone(), &close_button).unwrap()), - Box::new(AbilityPage::<A>::new(world, hero, me.clone(), &close_button).unwrap()), + Box::new(CharacterPage::new(commands, gui_handler, hero, name, me).unwrap()), + Box::new( + InventoryPage::<A>::new(commands, gui_handler, hero, me.clone(), &close_button) + .unwrap(), + ), + Box::new( + AbilityPage::<A>::new(commands, gui_handler, hero, me.clone(), &close_button) + .unwrap(), + ), ]), tab: AtomicUsize::new(0), }); @@ -162,13 +180,14 @@ impl CharacterWindow { let open_tab = { let weak_me = Arc::downgrade(&character_window); - move |world: &mut World, index| { + move |commands: &mut Commands, gui_handler: &mut GuiHandler, index| { if let Some(me) = weak_me.upgrade() { me.tab.store(index, SeqCst); - let child = me.tab_mut().enable(world)?; - me.tab_content_grid.attach(world, child, 0, 0, 1, 1)?; - me.tab().select(world)?; + let child = me.tab_mut().enable(commands, gui_handler)?; + me.tab_content_grid + .attach(commands, gui_handler, child, 0, 0, 1, 1)?; + me.tab().select(commands, gui_handler)?; } Ok(()) @@ -178,19 +197,19 @@ impl CharacterWindow { open_character_page.set_callback({ let open_tab = open_tab.clone(); - move |world| open_tab(world, 0) + move |commands, gui_handler| open_tab(commands, gui_handler, 0) }); open_inventory_page.set_callback({ let open_tab = open_tab.clone(); - move |world| open_tab(world, 1) + move |commands, gui_handler| open_tab(commands, gui_handler, 1) }); open_ability_page.set_callback({ let open_tab = open_tab.clone(); - move |world| open_tab(world, 2) + move |commands, gui_handler| open_tab(commands, gui_handler, 2) }); Self::setup_menu(&character_window)?; @@ -198,8 +217,13 @@ impl CharacterWindow { Ok(character_window) } - pub fn event(&self, world: &mut World, button: ControllerButton) -> Result<bool> { - self.tabs.write().unwrap()[self.tab.load(SeqCst)].event(world, button) + pub fn event( + &self, + commands: &mut Commands, + gui_handler: &mut GuiHandler, + button: ControllerButton, + ) -> Result<bool> { + self.tabs.write().unwrap()[self.tab.load(SeqCst)].event(commands, gui_handler, button) } pub fn tabs<'a>(&'a self) -> Tabs<'a> { @@ -235,9 +259,14 @@ impl CharacterWindow { .insert(name.to_string(), gui.into()); } - pub fn remove_tooltip(&self, world: &mut World, name: impl ToString) -> Result<()> { + pub fn remove_tooltip( + &self, + commands: &mut Commands, + gui_handler: &mut GuiHandler, + name: impl ToString, + ) -> Result<()> { if let Some(tooltip) = self.tooltips.lock().unwrap().remove(&name.to_string()) { - tooltip.disable(world)?; + tooltip.disable(commands, gui_handler)?; } Ok(()) @@ -280,12 +309,13 @@ impl TopLevelGui for CharacterWindow { None } - fn enable(&self, world: &mut World) -> Result<()> { - self.menu_gui.enable(world)?; + fn enable(&self, commands: &mut Commands, gui_handler: &mut GuiHandler) -> Result<()> { + self.menu_gui.enable(commands, gui_handler)?; - let child = self.tab_mut().enable(world)?; - self.tab_content_grid.attach(world, child, 0, 0, 1, 1)?; - self.tab().select(world)?; + let child = self.tab_mut().enable(commands, gui_handler)?; + self.tab_content_grid + .attach(commands, gui_handler, child, 0, 0, 1, 1)?; + self.tab().select(commands, gui_handler)?; let (gui_handler, engine_settings, context): ( &mut GuiHandler, @@ -314,8 +344,8 @@ impl TopLevelGui for CharacterWindow { Ok(()) } - fn disable(&self, world: &mut World) -> Result<()> { - self.menu_gui.disable(world)?; + fn disable(&self, commands: &mut Commands, gui_handler: &mut GuiHandler) -> Result<()> { + self.menu_gui.disable(commands, gui_handler)?; Ok(()) } @@ -336,37 +366,48 @@ impl GuiElementTraits for CharacterWindow { } impl TopGui for CharacterWindow { - fn decline(&self, world: &mut World) -> Result<()> { - (self.close)(world) + fn decline(&self, commands: &mut Commands, gui_handler: &mut GuiHandler) -> Result<()> { + (self.close)(commands, gui_handler) } - fn next_tab(&self, world: &mut World, second_level: bool) -> Result<()> { + fn next_tab( + &self, + commands: &mut Commands, + gui_handler: &mut GuiHandler, + second_level: bool, + ) -> Result<()> { match second_level { false => { // disable old tab - self.tab_mut().disable(world)?; + self.tab_mut().disable(commands, gui_handler)?; // add to tab index self.tab.store((self.tab.load(SeqCst) + 1) % 3, SeqCst); // update tab content - let child = self.tab_mut().enable(world)?; - self.tab_content_grid.attach(world, child, 0, 0, 1, 1)?; - self.tab().select(world)?; + let child = self.tab_mut().enable(commands, gui_handler)?; + self.tab_content_grid + .attach(commands, gui_handler, child, 0, 0, 1, 1)?; + self.tab().select(commands, gui_handler)?; } true => { - self.tab_mut().next_tab(world)?; + self.tab_mut().next_tab(commands, gui_handler)?; } } Ok(()) } - fn previous_tab(&self, world: &mut World, second_level: bool) -> Result<()> { + fn previous_tab( + &self, + commands: &mut Commands, + gui_handler: &mut GuiHandler, + second_level: bool, + ) -> Result<()> { match second_level { false => { // disable old tab - self.tab_mut().disable(world)?; + self.tab_mut().disable(commands, gui_handler)?; // subtract from tab index if self.tab.load(SeqCst) == 0 { @@ -376,12 +417,13 @@ impl TopGui for CharacterWindow { } // update tab content - let child = self.tab_mut().enable(world)?; - self.tab_content_grid.attach(world, child, 0, 0, 1, 1)?; - self.tab().select(world)?; + let child = self.tab_mut().enable(commands, gui_handler)?; + self.tab_content_grid + .attach(commands, gui_handler, child, 0, 0, 1, 1)?; + self.tab().select(commands, gui_handler)?; } true => { - self.tab_mut().previous_tab(world)?; + self.tab_mut().previous_tab(commands, gui_handler)?; } } @@ -402,7 +444,9 @@ impl CharacterWindow { // .add("open_statistics", open_statistics) // .add("open_abilities", open_abilities) // .add("open_inventory", open_inventory) - .add("close", move |world| close(world)) + .add("close", move |commands, gui_handler| { + close(commands, gui_handler) + }) .into(), )?; diff --git a/character_window/src/page_content.rs b/character_window/src/page_content.rs index e79ab02..795c4ae 100644 --- a/character_window/src/page_content.rs +++ b/character_window/src/page_content.rs @@ -8,7 +8,12 @@ use super::traits::*; pub struct EmptyRightSide; impl RightSide for EmptyRightSide { - fn refresh(&mut self, _world: &mut World, _hero: Entity) -> Result<()> { + fn refresh( + &mut self, + _commands: &mut Commands, + _gui_handler: &mut GuiHandler, + _hero: Entity, + ) -> Result<()> { unreachable!() } diff --git a/character_window/src/traits.rs b/character_window/src/traits.rs index c149e0c..80f5430 100644 --- a/character_window/src/traits.rs +++ b/character_window/src/traits.rs @@ -14,9 +14,19 @@ pub trait PageContentWrapper: Send + Sync { } pub trait RightSide: Send + Sync { - fn refresh(&mut self, world: &mut World, hero: Entity) -> Result<()>; + fn refresh( + &mut self, + commands: &mut Commands, + gui_handler: &mut GuiHandler, + hero: Entity, + ) -> Result<()>; - fn disable(&mut self, _world: &mut World, _hero: Entity) -> Result<()> { + fn disable( + &mut self, + _commands: &mut Commands, + _gui_handler: &mut GuiHandler, + _hero: Entity, + ) -> Result<()> { Ok(()) } diff --git a/rpg_components/src/items/ability_addon.rs b/rpg_components/src/items/ability_addon.rs index 5b2eb9c..7fc8346 100644 --- a/rpg_components/src/items/ability_addon.rs +++ b/rpg_components/src/items/ability_addon.rs @@ -245,10 +245,17 @@ impl AbilityAddon { Ok(item_system.addon(rarity, addon_type)) } - pub fn create_tooltip(&self, world: &mut World, position: (i32, i32)) -> Result<Tooltip> { - let gui = GuiBuilder::from_str(world, include_str!("../../resources/addon_snippet.xml"))?; - - let gui_handler: &mut GuiHandler = world.resources.get_mut()?; + pub fn create_tooltip( + &self, + commands: &mut Commands, + gui_handler: &mut GuiHandler, + position: (i32, i32), + ) -> Result<Tooltip> { + let gui = GuiBuilder::from_str( + commands, + gui_handler, + include_str!("../../resources/addon_snippet.xml"), + )?; let icon: Arc<Icon> = gui.element("addon_icon")?; let rarity_label: Arc<Label> = gui.element("rarity_label")?; diff --git a/rpg_components/src/items/ability_book.rs b/rpg_components/src/items/ability_book.rs index 8ef6ab3..b262700 100644 --- a/rpg_components/src/items/ability_book.rs +++ b/rpg_components/src/items/ability_book.rs @@ -298,13 +298,16 @@ impl<A: Ability> AbilityBook<A> { pub fn create_tooltip( &self, - world: &mut World, + commands: &mut Commands, + gui_handler: &mut GuiHandler, statistics: &Statistics, position: (i32, i32), ) -> Result<Tooltip> { - let gui = GuiBuilder::from_str(world, include_str!("../../resources/book_snippet.xml"))?; - - let gui_handler: &mut GuiHandler = world.resources.get_mut()?; + let gui = GuiBuilder::from_str( + commands, + gui_handler, + include_str!("../../resources/book_snippet.xml"), + )?; let ability_name: Arc<Label> = gui.element("ability_name")?; let rarity_label: Arc<Label> = gui.element("rarity_label")?; diff --git a/rpg_components/src/items/item.rs b/rpg_components/src/items/item.rs index 0004bce..8fa5a57 100644 --- a/rpg_components/src/items/item.rs +++ b/rpg_components/src/items/item.rs @@ -233,16 +233,15 @@ impl Item { pub fn create_tooltip( &self, - world: &mut World, + commands: &mut Commands, + gui_handler: &mut GuiHandler, attributes: &Attributes, position: (i32, i32), ) -> Result<Tooltip> { let (stats, jewels) = ItemAffix::squash(self.affixes.iter()); let count = stats.len() + jewels.len(); - let inspector_snippet = GuiBuilder::from_str(world, &ITEM_SNIPPETS[count])?; - - let gui_handler = world.resources.get_mut_unchecked::<GuiHandler>(); + let inspector_snippet = GuiBuilder::from_str(commands, gui_handler, &ITEM_SNIPPETS[count])?; let item_icon: Arc<Icon> = inspector_snippet.element("item_icon")?; let slot_label: Arc<Label> = inspector_snippet.element("slot_label")?; @@ -289,8 +288,11 @@ impl Item { let mut index = Self::INSPECTOR_OFFSET; for stat in stats { - let stat_type_snippet = - GuiSnippet::from_str(world, include_str!("../../resources/stat_type_snippet.xml"))?; + let stat_type_snippet = GuiSnippet::from_str( + commands, + gui_handler, + include_str!("../../resources/stat_type_snippet.xml"), + )?; let stat_type_label: Arc<Label> = stat_type_snippet.element("stat_type")?; let stat_value_label: Arc<Label> = stat_type_snippet.element("stat_value")?; @@ -298,14 +300,15 @@ impl Item { stat_type_label.set_text(gui_handler, &format!("{}", stat))?; stat_value_label.set_text(gui_handler, &stat.display_value())?; - inspector_grid.attach(world, stat_type_snippet, 0, index, 1, 1)?; + inspector_grid.attach(commands, gui_handler, stat_type_snippet, 0, index, 1, 1)?; index += 1; } for jewel in jewels { let socket_snippet = GuiSnippet::from_str( - world, + commands, + gui_handler, include_str!("../../resources/item_socket_snippet.xml"), )?; @@ -329,7 +332,7 @@ impl Item { } } - inspector_grid.attach(world, socket_snippet, 0, index, 1, 1)?; + inspector_grid.attach(commands, gui_handler, socket_snippet, 0, index, 1, 1)?; index += 1; } diff --git a/rpg_components/src/items/jewel.rs b/rpg_components/src/items/jewel.rs index 55098df..382160b 100644 --- a/rpg_components/src/items/jewel.rs +++ b/rpg_components/src/items/jewel.rs @@ -60,14 +60,16 @@ impl Jewel { pub fn create_tooltip( &self, - world: &mut World, + commands: &mut Commands, + gui_handler: &mut GuiHandler, item_settings: &ItemSettings, position: (i32, i32), ) -> Result<Tooltip> { - let inspector_snippet: Arc<GuiBuilder> = - GuiBuilder::from_str(world, include_str!("../../resources/jewel_tooltip.xml"))?; - - let gui_handler: &mut GuiHandler = world.resources.get_mut()?; + let inspector_snippet: Arc<GuiBuilder> = GuiBuilder::from_str( + commands, + gui_handler, + include_str!("../../resources/jewel_tooltip.xml"), + )?; let main_grid: Arc<Grid> = inspector_snippet.element("main_grid")?; main_grid.change_position_unscaled(gui_handler, position.0, position.1)?; diff --git a/rpg_components/src/items/tooltip.rs b/rpg_components/src/items/tooltip.rs index 7f07dc1..f8df2bc 100644 --- a/rpg_components/src/items/tooltip.rs +++ b/rpg_components/src/items/tooltip.rs @@ -18,8 +18,8 @@ impl Tooltip { Self { grid, gui } } - pub fn enable(&self, world: &mut World) -> Result<()> { - self.gui.enable(world) + pub fn enable(&self, commands: &mut Commands, gui_handler: &mut GuiHandler) -> Result<()> { + self.gui.enable(commands, gui_handler) } pub fn check_fitting(