From 9225c94160b7b6ef188ac2350e01c8b8779d78d7 Mon Sep 17 00:00:00 2001 From: hodasemi Date: Sat, 24 Aug 2024 15:36:58 +0200 Subject: [PATCH] Finish split --- gavania-core/src/game/configloader/mod.rs | 11 --- .../src/game/content/abilities/mod.rs | 23 ++--- .../content/abilities/on_hit_particles.rs | 6 +- .../game/content/abilities/particle_spawn.rs | 2 + .../src/game/content/abilities/prelude.rs | 11 +-- .../src/game/content/abilities/projectile.rs | 35 +++---- .../src/game/content/abilities/selfcast.rs | 34 +++---- .../src/game/content/components/ai/simple.rs | 56 +++++++---- .../src/game/content/components/aoe.rs | 1 + .../src/game/content/components/aoe_arc.rs | 4 + .../game/content/components/damage_number.rs | 1 + .../src/game/content/components/loot_stash.rs | 4 + .../src/game/content/components/mod.rs | 14 --- gavania-core/src/game/content/mod.rs | 1 - gavania-core/src/game/content/objects/hero.rs | 98 ++++++++++++++++--- gavania-core/src/game/content/objects/npc.rs | 20 +++- gavania-core/src/game/content/prelude.rs | 9 +- gavania-core/src/game/game.rs | 5 + .../src/components/ability_slots.rs | 36 ------- rpg_components/src/config/save_game.rs | 8 +- rpg_components/src/items/ability_book.rs | 4 - 21 files changed, 197 insertions(+), 186 deletions(-) diff --git a/gavania-core/src/game/configloader/mod.rs b/gavania-core/src/game/configloader/mod.rs index 9fddd02..b206b33 100644 --- a/gavania-core/src/game/configloader/mod.rs +++ b/gavania-core/src/game/configloader/mod.rs @@ -1,13 +1,2 @@ -pub mod abilities; -pub mod attributes; -pub mod experience; -pub mod items; pub mod mobs; -pub mod save_game; - -pub use abilities::*; -pub use attributes::*; -pub use experience::*; -pub use items::*; pub use mobs::*; -pub use save_game::*; diff --git a/gavania-core/src/game/content/abilities/mod.rs b/gavania-core/src/game/content/abilities/mod.rs index c9fa0d7..784f22c 100644 --- a/gavania-core/src/game/content/abilities/mod.rs +++ b/gavania-core/src/game/content/abilities/mod.rs @@ -7,27 +7,16 @@ pub mod selfcast; use anyhow::Result; use cgmath::Vector2; use engine::prelude::*; +use rpg_components::components::character_status::CharacterStatus; +use rpg_components::components::level::{Level, LevelUpEvent}; +use rpg_components::components::npc_type::{NPCBoss, NPCElite, NPCNormal, NPCType}; +use rpg_components::components::statistics::Statistics; +use rpg_components::damage_type::DamageType; -use crate::game::{content::prelude::*, game::GameHandle}; +use crate::game::content::prelude::*; use crate::Game; -pub trait Ability: Send + Sync { - fn data(&self) -> &AbilityLoader; - fn name(&self) -> &str; - - fn execute( - &self, - owner: Entity, - components: &mut MultiMut<'_>, - direction: Vector2, - book: &AbilityBook, - game: &GameHandle, - entities: &mut Entities<'_>, - events: &mut ContentEvents<'_>, - ) -> Result<()>; -} - pub fn handle_npc_death<'a>( game: &Game, s: &mut impl SceneEntities, diff --git a/gavania-core/src/game/content/abilities/on_hit_particles.rs b/gavania-core/src/game/content/abilities/on_hit_particles.rs index 7676f98..bea46c9 100644 --- a/gavania-core/src/game/content/abilities/on_hit_particles.rs +++ b/gavania-core/src/game/content/abilities/on_hit_particles.rs @@ -2,6 +2,7 @@ use crate::*; use anyhow::Result; use cgmath::{Deg, Vector3}; +use rpg_components::{components::abilityloader::AbilityLoader, damage_type::DamageType}; pub struct ArcInfo { pub radius: f32, @@ -32,13 +33,16 @@ impl OnHitParticles { } fn spawn(&self, scene: &mut SceneContents<'_>, game_handle: &GameHandle) -> Result<()> { + let game = game_handle.upgrade(); + let mut entity = AbilityLoader::create_on_hit_particles( + game.engine(), self.particle_system_info.clone(), &self.collision_sound, - &game_handle.upgrade(), self.position, self.offset, scene.particle_system_vulkan_objects(), + |s| game.build_data_path(s), )?; if let Some(arc_info) = &self.arc_info { diff --git a/gavania-core/src/game/content/abilities/particle_spawn.rs b/gavania-core/src/game/content/abilities/particle_spawn.rs index 676d93f..5fea258 100644 --- a/gavania-core/src/game/content/abilities/particle_spawn.rs +++ b/gavania-core/src/game/content/abilities/particle_spawn.rs @@ -1,3 +1,5 @@ +use rpg_components::components::abilityloader::AbilityLoader; + use crate::*; #[derive(Debug, Clone, Copy)] diff --git a/gavania-core/src/game/content/abilities/prelude.rs b/gavania-core/src/game/content/abilities/prelude.rs index a4740ea..f79ed74 100644 --- a/gavania-core/src/game/content/abilities/prelude.rs +++ b/gavania-core/src/game/content/abilities/prelude.rs @@ -1,11 +1,4 @@ -pub use super::{Ability, AbilityType}; - -pub use super::projectile::{Projectile, ProjectileMarker}; -pub use super::selfcast::SelfCast; -// pub use super::slide::{Slide, SlideCreateInfo}; - -pub use super::ability_addon::{AbilityAddon, AbilityAddonCollection, AbilityAddonTypes}; -pub use super::ability_book::AbilityBook; - pub use super::on_hit_particles::{ArcInfo, OnHitParticles}; pub use super::particle_spawn::{ParticleSpawn, ParticleSpawnExecutor}; +pub use super::projectile::{Projectile, ProjectileMarker}; +pub use super::selfcast::SelfCast; diff --git a/gavania-core/src/game/content/abilities/projectile.rs b/gavania-core/src/game/content/abilities/projectile.rs index 6db4c75..4574eb8 100644 --- a/gavania-core/src/game/content/abilities/projectile.rs +++ b/gavania-core/src/game/content/abilities/projectile.rs @@ -1,4 +1,9 @@ use engine::prelude::*; +use rpg_components::{ + components::{abilityloader::AbilityLoader, statistics::Statistics}, + damage_type::DamageType, + items::{ability_addon::AbilityAddonCollection, ability_book::AbilityBook}, +}; use crate::game::content::abilities::handle_npc_death; @@ -55,15 +60,9 @@ impl ComponentDebug for ProjectileMarker { } #[derive(Clone)] -pub struct Projectile { - data: AbilityLoader, -} +pub struct Projectile; impl Projectile { - pub fn new(data: AbilityLoader) -> Result { - Ok(Projectile { data }) - } - fn hit_event( me: Entity, collider: Entity, @@ -232,17 +231,9 @@ impl Projectile { } } -impl Ability for Projectile { - fn data(&self) -> &AbilityLoader { - &self.data - } - - fn name(&self) -> &str { - self.data.name() - } - - fn execute( - &self, +impl Projectile { + pub fn execute( + ability: &AbilityLoader, _owner: Entity, owner_components: &mut MultiMut<'_>, direction: Vector2, @@ -268,7 +259,7 @@ impl Ability for Projectile { let projectile_size = book.addons().size(); let projectile_speed = book.addons().projectile_speed(); - let projectile_distance = self.data.settings.parameter.distance + book.addons().distance(); + let projectile_distance = ability.settings.parameter.distance + book.addons().distance(); let ability_data = book.ability().data(); @@ -281,7 +272,7 @@ impl Ability for Projectile { let mut projectile_entity = game .entity_manager() - .load_entity(game.engine().assets(), &self.data.settings.meta.entity)?; + .load_entity(game.engine().assets(), &ability.settings.meta.entity)?; { // alter the hitbox parameters @@ -332,7 +323,7 @@ impl Ability for Projectile { )); let mut projectile_movement = Movement::new( - self.data.settings.parameter.speed + projectile_speed, + ability.settings.parameter.speed + projectile_speed, projectile_entity.get_component_mut::