From 8e2ed3e5c25f65b020b9aa260a4a79a2874b6b01 Mon Sep 17 00:00:00 2001 From: hodasemi Date: Tue, 27 Aug 2024 14:06:06 +0200 Subject: [PATCH] Use generic ability --- .../src/abilities/ability_right_side.rs | 22 +++--- character_window/src/abilities/content.rs | 48 +++++++------ character_window/src/abilities/mod.rs | 16 ++--- character_window/src/content.rs | 17 +++-- character_window/src/inventory/content.rs | 34 ++++----- .../src/inventory/item_right_side.rs | 18 ++--- .../src/inventory/jewel_right_side.rs | 18 ++--- character_window/src/inventory/mod.rs | 32 +++++---- character_window/src/lib.rs | 32 +++++---- character_window/src/page_content.rs | 12 ++-- .../src/game/content}/ability_type.rs | 0 .../game/content}/components/abilityloader.rs | 8 --- .../src/game/content/components/mod.rs | 1 + gavania-core/src/game/content/mod.rs | 1 + gavania-core/src/game/content/prelude.rs | 1 + .../src/components/ability_slots.rs | 30 ++++---- rpg_components/src/components/attributes.rs | 6 +- rpg_components/src/components/inventory.rs | 31 ++++---- rpg_components/src/components/item_slots.rs | 4 +- rpg_components/src/components/mod.rs | 1 - rpg_components/src/config/save_game.rs | 9 ++- rpg_components/src/items/ability_addon.rs | 36 ++-------- rpg_components/src/items/ability_book.rs | 71 ++++++++----------- rpg_components/src/items/item.rs | 6 +- rpg_components/src/items/item_system.rs | 67 +++++++++-------- rpg_components/src/items/map_item.rs | 6 +- rpg_components/src/items/rarities.rs | 6 +- rpg_components/src/lib.rs | 3 - 28 files changed, 262 insertions(+), 274 deletions(-) rename {rpg_components/src => gavania-core/src/game/content}/ability_type.rs (100%) rename {rpg_components/src => gavania-core/src/game/content}/components/abilityloader.rs (97%) diff --git a/character_window/src/abilities/ability_right_side.rs b/character_window/src/abilities/ability_right_side.rs index 8fc273e..8267793 100644 --- a/character_window/src/abilities/ability_right_side.rs +++ b/character_window/src/abilities/ability_right_side.rs @@ -1,3 +1,4 @@ +use std::marker::PhantomData; use std::sync::{Arc, Weak}; use rpg_components::components::ability_slots::AbilitySlots; @@ -11,13 +12,15 @@ use crate::*; use crate::{traits::RightSide, CharacterWindow}; -pub struct AbilityPageRightSide { +pub struct AbilityPageRightSide { snippet: Arc, ability_index: usize, + + ability_marker: PhantomData, } -impl AbilityPageRightSide { +impl AbilityPageRightSide { const ABILITY_BUTTON_NAMES: [&'static str; 4] = [ "first_ability", "second_ability", @@ -59,7 +62,7 @@ impl AbilityPageRightSide { move || { if let Some(menu) = reference.upgrade() { let mut tabs = menu.tabs_mut(); - let abilities = tabs.abilities(); + let abilities = tabs.abilities::(); abilities.right_side.ability_index = index; abilities.update_page()?; @@ -79,7 +82,7 @@ impl AbilityPageRightSide { if selected { engine.on_scene(|scene| { let entity = scene.entity(hero)?; - let abilities = entity.get_component::()?; + let abilities = entity.get_component::>()?; if let Some(book) = abilities.book(index) { let button = weak_button.upgrade().unwrap(); @@ -122,7 +125,7 @@ impl AbilityPageRightSide { let entity = scene.entity_mut(hero)?; let mut multi_mut = entity.multi_mut(); - let abilities = multi_mut.get::()?; + let abilities = multi_mut.get::>()?; if let Some(ability) = abilities.book_mut(index) { let materials = multi_mut.get::()?; @@ -131,7 +134,7 @@ impl AbilityPageRightSide { if let Some(menu) = reference.upgrade() { menu.tabs_mut() - .abilities() + .abilities::() .right_side .refresh(&engine, hero)?; } @@ -151,6 +154,7 @@ impl AbilityPageRightSide { Ok(Self { snippet, ability_index: 0, + ability_marker: PhantomData, }) } @@ -189,7 +193,7 @@ impl AbilityPageRightSide { Ok(()) } - fn update_active_ability(&self, engine: &Engine, abilities: &AbilitySlots) -> Result<()> { + fn update_active_ability(&self, engine: &Engine, abilities: &AbilitySlots) -> Result<()> { let grid: Arc = self.snippet.element("ability_content")?; let (_, rows) = grid.dimensions(); @@ -237,7 +241,7 @@ impl AbilityPageRightSide { } } -impl RightSide for AbilityPageRightSide { +impl RightSide for AbilityPageRightSide { fn refresh(&mut self, engine: &Engine, hero: Entity) -> Result<()> { engine.on_scene(|scene| { let entity = scene.entity(hero)?; @@ -251,7 +255,7 @@ impl RightSide for AbilityPageRightSide { self.update_crafting_count("epic", crafting.count(Rarities::Epic))?; self.update_crafting_count("legendary", crafting.count(Rarities::Legendary))?; - let abilities = entity.get_component::()?; + let abilities = entity.get_component::>()?; for (index, name) in Self::ABILITY_BUTTON_NAMES.iter().enumerate() { self.update_ability_icon(name, abilities.book(index).map(|book| book.icon()))?; diff --git a/character_window/src/abilities/content.rs b/character_window/src/abilities/content.rs index 3510a27..e2ef6f7 100644 --- a/character_window/src/abilities/content.rs +++ b/character_window/src/abilities/content.rs @@ -15,7 +15,7 @@ use crate::{ use super::AbilityPage; -impl Content { +impl Content { fn show_addon_tooltip( engine: &Arc, hero: Entity, @@ -25,7 +25,7 @@ impl Content { ) -> Result<()> { engine.on_scene(|scene| { let entity = scene.entity(hero)?; - let inventory = entity.get_component::()?; + let inventory = entity.get_component::>()?; let target_x = x + w as i32; let target_y = y; @@ -46,14 +46,14 @@ impl Content { engine: &Arc, hero: Entity, addon_index: usize, - ability_page: &AbilityPage, + ability_page: &AbilityPage, ) -> Result<()> { engine.on_scene_mut(|scene| { let entity = scene.entity_mut(hero)?; let mut multi_mut = entity.multi_mut(); - let inventory = multi_mut.get::()?; - let abilities = multi_mut.get::()?; + let inventory = multi_mut.get::>()?; + let abilities = multi_mut.get::>()?; if let Some(book) = abilities.book_mut(ability_page.right_side.selected_ability()) { if book.has_free_addon_slots() { @@ -67,7 +67,7 @@ impl Content { } } -impl ContentUpdate for Content { +impl ContentUpdate for Content { fn update(&mut self, engine: &Arc, hero: Entity) -> Result<()> { let reference = self.reference.clone(); @@ -80,13 +80,15 @@ impl ContentUpdate for Content { move |controller_button| { if let ControllerButton::X = controller_button { - CharacterWindow::salvage_from_inventory(&engine, hero, |inventory| { - inventory.remove_addon(index) - })?; + CharacterWindow::salvage_from_inventory::( + &engine, + hero, + |inventory| inventory.remove_addon(index), + )?; if let Some(menu) = reference.upgrade() { let mut tabs = menu.tabs_mut(); - let abilities = tabs.abilities(); + let abilities = tabs.abilities::(); abilities.update_page()?; } @@ -145,19 +147,19 @@ impl ContentUpdate for Content { } } -impl Content { +impl Content> { fn equip_book( engine: &Arc, hero: Entity, book_index: usize, - ability_page: &AbilityPage, + ability_page: &AbilityPage, ) -> Result<()> { engine.on_scene_mut(|scene| { let entity = scene.entity_mut(hero)?; let mut multi_mut = entity.multi_mut(); - let inventory = multi_mut.get::()?; - let abilitiy_slots = multi_mut.get::()?; + let inventory = multi_mut.get::>()?; + let abilitiy_slots = multi_mut.get::>()?; if let Some(old_book) = abilitiy_slots.insert_book( inventory.remove_book(book_index), @@ -179,7 +181,7 @@ impl Content { ) -> Result<()> { engine.on_scene(|scene| { let entity = scene.entity(hero)?; - let inventory = entity.get_component::()?; + let inventory = entity.get_component::>()?; let statistics = entity.get_component::()?; let target_x = x + w as i32; @@ -191,9 +193,9 @@ impl Content { gui.enable()?; let window = reference.upgrade().unwrap(); - let abilities = entity.get_component::()?; + let abilities = entity.get_component::>()?; - match abilities.book(window.tabs().abilities().right_side.selected_ability()) { + match abilities.book(window.tabs().abilities::().right_side.selected_ability()) { Some(selected_book) => { let button_pos = gui.position_extent(); @@ -222,7 +224,7 @@ impl Content { } } -impl ContentUpdate for Content { +impl ContentUpdate for Content> { fn update(&mut self, engine: &Arc, hero: Entity) -> Result<()> { let reference = self.reference.clone(); @@ -235,13 +237,15 @@ impl ContentUpdate for Content { move |controller_button| { if let ControllerButton::X = controller_button { - CharacterWindow::salvage_from_inventory(&engine, hero, |inventory| { - inventory.remove_book(index) - })?; + CharacterWindow::salvage_from_inventory::( + &engine, + hero, + |inventory| inventory.remove_book(index), + )?; if let Some(menu) = reference.upgrade() { let mut tabs = menu.tabs_mut(); - let abilities = tabs.abilities(); + let abilities = tabs.abilities::(); abilities.update_page()?; } diff --git a/character_window/src/abilities/mod.rs b/character_window/src/abilities/mod.rs index 28d08bd..2f8007a 100644 --- a/character_window/src/abilities/mod.rs +++ b/character_window/src/abilities/mod.rs @@ -16,7 +16,7 @@ use super::{ }; use crate::*; -pub struct AbilityPage { +pub struct AbilityPage { close: Weak