From 89023a8e6fa868ff6f8373fa83ea6af19997d15d Mon Sep 17 00:00:00 2001 From: hodasemi Date: Sat, 24 Aug 2024 12:15:40 +0200 Subject: [PATCH] Fix base types crate --- .../src/components/ability_slots.rs | 15 +++++++---- .../src/components/abilityloader.rs | 22 +++++++++++----- rpg_components/src/items/ability_book.rs | 26 +++++++++++++------ rpg_components/src/items/item_system.rs | 8 +++--- 4 files changed, 48 insertions(+), 23 deletions(-) diff --git a/rpg_components/src/components/ability_slots.rs b/rpg_components/src/components/ability_slots.rs index cb608ea..620860b 100644 --- a/rpg_components/src/components/ability_slots.rs +++ b/rpg_components/src/components/ability_slots.rs @@ -6,18 +6,19 @@ use paste; use std::{ slice::{Iter, IterMut}, str::FromStr, + sync::Arc, }; -use crate::components::inventory::Storable; use crate::config::save_game::SaveGame; use crate::items::{ability_addon::AbilityAddonTypes, ability_book::AbilityBook, Rarities}; +use crate::{components::inventory::Storable, items::ItemSystem}; macro_rules! load { ($me: ident, $save_game:ident, $($index:literal,)+) => { paste::expr! { $( if $save_game.[].used { - let item_system = $me.game_handle.upgrade().item_system(); + let item_system = &$me.item_system; let ability = &$save_game.[]; @@ -106,6 +107,8 @@ macro_rules! store { } pub struct AbilitySlots { + item_system: Arc, + pub direction: Vector2, abilities: [Option; AbilitySlots::MAX_ABILITIES], @@ -115,16 +118,18 @@ impl AbilitySlots { // stupid workaround for serde Deserialize pub const MAX_ABILITIES: usize = 4; - pub fn empty() -> Self { + pub fn empty(item_system: Arc) -> Self { Self { + item_system, + direction: Vector2::zero(), abilities: Default::default(), } } - pub fn load(save_game: &SaveGame) -> Result { - let mut me = Self::empty(); + pub fn load(item_system: Arc, save_game: &SaveGame) -> Result { + let mut me = Self::empty(item_system); load!(me, save_game, 0, 1, 2, 3,); diff --git a/rpg_components/src/components/abilityloader.rs b/rpg_components/src/components/abilityloader.rs index b57ca76..b23b82c 100644 --- a/rpg_components/src/components/abilityloader.rs +++ b/rpg_components/src/components/abilityloader.rs @@ -3,7 +3,7 @@ use assetpath::AssetPath; use engine::prelude::*; use cgmath::Vector3; -use std::{path::Path, sync::Arc}; +use std::path::Path; use crate::{ ability_type::AbilityType, @@ -116,6 +116,10 @@ impl AbilityLoader { )?) } + pub fn create_ability(&self) -> Ability { + Ability { data: self.clone() } + } + pub fn name(&self) -> &str { &self.name } @@ -183,48 +187,54 @@ impl AbilityLoader { pub fn create_on_hit_particles2( &self, + engine: &Engine, position: Vector3, offset: Vector3, particle_system_vulkan_objects: &ParticleSystemVulkanObjects, + build_path: impl Fn(&str) -> AssetPath, ) -> Result> { Ok(if self.settings.parameter.on_hit_particles.is_empty() { None } else { - let file_name = game.build_data_path(&self.settings.parameter.on_hit_particles); + let file_name = build_path(&self.settings.parameter.on_hit_particles); let info = ParticleSystemInfo::load(file_name)?; Some(Self::create_on_hit_particles( + engine, info, &self.settings.parameter.on_collision_sound, position, offset, particle_system_vulkan_objects, + build_path, )?) }) } pub fn create_on_hit_particles( + engine: &Engine, info: ParticleSystemInfo, on_collision_sound: &str, position: Vector3, offset: Vector3, particle_system_vulkan_objects: &ParticleSystemVulkanObjects, + build_path: impl Fn(&str) -> AssetPath, ) -> Result { - let mut particle_entity = game.engine().assets().empty_entity(); + let mut particle_entity = engine.assets().empty_entity(); { let mut draw = Draw::new(Vec::new()); let particles = ParticleSystem::new_with_vk_objects( info, - &game.engine(), + engine, particle_system_vulkan_objects, &mut draw, )?; if !on_collision_sound.is_empty() { - let mut audio = Audio::new(game.engine().context(), None)?; - audio.set_sound(game.build_data_path(on_collision_sound), SOUND_CREATE_KEY)?; + let mut audio = Audio::new(engine.context(), None)?; + audio.set_sound(build_path(on_collision_sound), ON_ENABLE_SOUND)?; particle_entity.insert_component(audio); } diff --git a/rpg_components/src/items/ability_book.rs b/rpg_components/src/items/ability_book.rs index 84742b5..74259cf 100644 --- a/rpg_components/src/items/ability_book.rs +++ b/rpg_components/src/items/ability_book.rs @@ -17,9 +17,19 @@ use super::{ ItemSystem, Rarities, ToolTipBuilder, Tooltip, }; -pub trait Ability: Send + Sync { - fn data(&self) -> &AbilityLoader; - fn name(&self) -> &str; +#[derive(Debug, Clone)] +pub struct Ability { + pub(crate) data: AbilityLoader, +} + +impl Ability { + pub fn data(&self) -> &AbilityLoader { + &self.data + } + + pub fn name(&self) -> &str { + self.data.name() + } } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] @@ -31,7 +41,7 @@ pub struct CastInformation { #[derive(Clone)] pub struct AbilityBook { - ability: Arc, + ability: Ability, // meta icon: Arc, @@ -49,7 +59,7 @@ pub struct AbilityBook { impl AbilityBook { pub fn new( - ability: Arc, + ability: Ability, icon: Arc, rarity: Rarities, ability_settings: &AbilitySettings, @@ -73,7 +83,7 @@ impl AbilityBook { } pub fn load( - ability: Arc, + ability: Ability, icon: Arc, rarity: Rarities, addons: Vec>, @@ -191,8 +201,8 @@ impl AbilityBook { } } - pub fn ability(&self) -> &dyn Ability { - &*self.ability + pub fn ability(&self) -> &Ability { + &self.ability } pub fn addons(&self) -> &AbilityAddonCollection { diff --git a/rpg_components/src/items/item_system.rs b/rpg_components/src/items/item_system.rs index 11a3ba9..b04f346 100644 --- a/rpg_components/src/items/item_system.rs +++ b/rpg_components/src/items/item_system.rs @@ -49,7 +49,7 @@ pub struct ItemSystem { addon_icon_combinations: HashMap<(Rarities, AbilityAddonTypes), Arc>, jewel_icon_combinations: HashMap<(Rarities, u32, Attribute), Arc>, - abilities: Vec>, + abilities: Vec, } impl ItemSystem { @@ -263,7 +263,7 @@ impl ItemSystem { let abilities = ability_loader .into_iter() .map(|loader| loader.create_ability()) - .collect::>>>()?; + .collect::>(); Ok(ItemSystem { item_settings: item_settings.clone(), @@ -545,7 +545,7 @@ impl ItemSystem { } #[inline] - pub fn find_ability(&self, name: &str) -> Arc { + pub fn find_ability(&self, name: &str) -> Ability { self.abilities .iter() .find(|a| a.name() == name) @@ -554,7 +554,7 @@ impl ItemSystem { } #[inline] - pub fn random_ability(&self) -> Arc { + pub fn random_ability(&self) -> Ability { let n = Random::range(0, self.abilities.len() as u32); self.abilities[n as usize].clone() }