diff --git a/Cargo.toml b/Cargo.toml index e027e73..ef61b0a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ members = [ "scene_update_macros", "transaction_derive", "map", - "rpg_components", + "rpg_components", "entity_manager", ] [workspace.dependencies] diff --git a/entity_manager/Cargo.toml b/entity_manager/Cargo.toml new file mode 100644 index 0000000..f5e2259 --- /dev/null +++ b/entity_manager/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "entity_manager" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = { workspace = true } +assetpath = { workspace = true } +serde = { workspace = true } + +engine = { path = "../engine" } \ No newline at end of file diff --git a/gavania-core/src/game/content/components/animation_info.rs b/entity_manager/src/animation_info.rs similarity index 95% rename from gavania-core/src/game/content/components/animation_info.rs rename to entity_manager/src/animation_info.rs index faa1d75..8f49084 100644 --- a/gavania-core/src/game/content/components/animation_info.rs +++ b/entity_manager/src/animation_info.rs @@ -3,7 +3,16 @@ use std::{collections::HashMap, time::Duration}; use anyhow::Result; use engine::prelude::*; -use crate::{AnimationData, AnimationType}; +use crate::entityparser::AnimationData; + +#[derive(PartialEq, Eq, Hash, Clone, Copy, Debug, Serialize, Deserialize)] +pub enum AnimationType { + Move, + Idle, + Cast, + Attack, + // Add more as you need +} #[derive(PartialEq, Clone, Serialize, Deserialize, Debug)] struct AnimationLockInfo { diff --git a/gavania-core/src/game/content/objects/entity_info.rs b/entity_manager/src/entity_info.rs similarity index 100% rename from gavania-core/src/game/content/objects/entity_info.rs rename to entity_manager/src/entity_info.rs diff --git a/gavania-core/src/game/content/objects/entity_manager.rs b/entity_manager/src/entity_manager.rs similarity index 98% rename from gavania-core/src/game/content/objects/entity_manager.rs rename to entity_manager/src/entity_manager.rs index 3b1123d..70550a1 100644 --- a/gavania-core/src/game/content/objects/entity_manager.rs +++ b/entity_manager/src/entity_manager.rs @@ -1,14 +1,12 @@ use std::collections::HashMap; -use assetpath::AssetPath; - -use crate::HitBox; use anyhow::Result; +use assetpath::AssetPath; use engine::prelude::*; -use super::{entity_info::EntityInfo, entity_tags::EntityTags, entityparser::EntityParser}; +use crate::{animation_info::AnimationInfo, hitbox::HitBox}; -use crate::game::content::prelude::*; +use super::{entity_info::EntityInfo, entity_tags::EntityTags, entityparser::EntityParser}; pub struct EntityManager { entity_directory: AssetPath, diff --git a/gavania-core/src/game/content/objects/entity_tags.rs b/entity_manager/src/entity_tags.rs similarity index 100% rename from gavania-core/src/game/content/objects/entity_tags.rs rename to entity_manager/src/entity_tags.rs diff --git a/gavania-core/src/game/content/objects/entityparser.rs b/entity_manager/src/entityparser.rs similarity index 99% rename from gavania-core/src/game/content/objects/entityparser.rs rename to entity_manager/src/entityparser.rs index 2b2ef90..dee97b5 100644 --- a/gavania-core/src/game/content/objects/entityparser.rs +++ b/entity_manager/src/entityparser.rs @@ -5,7 +5,9 @@ use assetpath::AssetPath; use anyhow::Result; use engine::prelude::*; -use super::{super::prelude::*, entity_tags::EntityTags}; +use crate::animation_info::AnimationType; + +use super::entity_tags::EntityTags; use std::collections::HashMap; use std::{fmt::Display, str::FromStr, time::Duration}; diff --git a/gavania-core/src/game/content/components/hitbox.rs b/entity_manager/src/hitbox.rs similarity index 100% rename from gavania-core/src/game/content/components/hitbox.rs rename to entity_manager/src/hitbox.rs diff --git a/entity_manager/src/lib.rs b/entity_manager/src/lib.rs new file mode 100644 index 0000000..1e0ea82 --- /dev/null +++ b/entity_manager/src/lib.rs @@ -0,0 +1,13 @@ +mod animation_info; +mod entity_info; +mod entity_manager; +mod entity_tags; +mod entityparser; +mod hitbox; + +pub use animation_info::*; +pub use entity_info::EntityInfo; +pub use entity_manager::EntityManager; +pub use entity_tags::EntityTags; +pub use entityparser::*; +pub use hitbox::*; diff --git a/gavania-core/Cargo.toml b/gavania-core/Cargo.toml index f03cec5..670c9bb 100644 --- a/gavania-core/Cargo.toml +++ b/gavania-core/Cargo.toml @@ -23,6 +23,7 @@ lua-wrapper = { path = "../lua-wrapper" } controllable_thread = { path = "../controllable_thread" } map = { path = "../map" } rpg_components = { path = "../rpg_components" } +entity_manager = { path = "../entity_manager" } [features] wayland = [] diff --git a/gavania-core/src/game/content/abilities/mod.rs b/gavania-core/src/game/content/abilities/mod.rs index 784f22c..95603c2 100644 --- a/gavania-core/src/game/content/abilities/mod.rs +++ b/gavania-core/src/game/content/abilities/mod.rs @@ -7,6 +7,7 @@ pub mod selfcast; use anyhow::Result; use cgmath::Vector2; use engine::prelude::*; +use entity_manager::*; use rpg_components::components::character_status::CharacterStatus; use rpg_components::components::level::{Level, LevelUpEvent}; use rpg_components::components::npc_type::{NPCBoss, NPCElite, NPCNormal, NPCType}; diff --git a/gavania-core/src/game/content/abilities/projectile.rs b/gavania-core/src/game/content/abilities/projectile.rs index 4574eb8..4d72c52 100644 --- a/gavania-core/src/game/content/abilities/projectile.rs +++ b/gavania-core/src/game/content/abilities/projectile.rs @@ -1,4 +1,5 @@ use engine::prelude::*; +use entity_manager::*; use rpg_components::{ components::{abilityloader::AbilityLoader, statistics::Statistics}, damage_type::DamageType, diff --git a/gavania-core/src/game/content/abilities/selfcast.rs b/gavania-core/src/game/content/abilities/selfcast.rs index 748f840..3b260b5 100644 --- a/gavania-core/src/game/content/abilities/selfcast.rs +++ b/gavania-core/src/game/content/abilities/selfcast.rs @@ -2,6 +2,7 @@ use anyhow::Result; use engine::prelude::*; +use entity_manager::*; use rpg_components::{ components::{abilityloader::AbilityLoader, statistics::Statistics}, items::ability_book::AbilityBook, diff --git a/gavania-core/src/game/content/components/ai/simple.rs b/gavania-core/src/game/content/components/ai/simple.rs index 9a57aff..5a7bddb 100644 --- a/gavania-core/src/game/content/components/ai/simple.rs +++ b/gavania-core/src/game/content/components/ai/simple.rs @@ -4,6 +4,7 @@ use crate::Result; use engine::prelude::*; use cgmath::{vec2, InnerSpace, Vector2, Vector3}; +use entity_manager::*; use rpg_components::ability_type::AbilityType; use rpg_components::components::ability_slots::AbilitySlots; use rpg_components::components::character_status::CharacterStatus; diff --git a/gavania-core/src/game/content/components/aoe_arc.rs b/gavania-core/src/game/content/components/aoe_arc.rs index b5a80ea..a55ac69 100644 --- a/gavania-core/src/game/content/components/aoe_arc.rs +++ b/gavania-core/src/game/content/components/aoe_arc.rs @@ -2,6 +2,7 @@ use std::{collections::HashSet, time::Duration}; use cgmath::{vec2, Deg, InnerSpace, Matrix2, Vector2}; use engine::prelude::*; +use entity_manager::*; use rpg_components::{ components::{abilityloader::AbilityLoader, statistics::Statistics}, damage_type::DamageType, diff --git a/gavania-core/src/game/content/components/loot_stash.rs b/gavania-core/src/game/content/components/loot_stash.rs index e63e088..ea6e1fc 100644 --- a/gavania-core/src/game/content/components/loot_stash.rs +++ b/gavania-core/src/game/content/components/loot_stash.rs @@ -3,6 +3,7 @@ use crate::*; use anyhow::Result; use cgmath::Vector3; use engine::prelude::*; +use entity_manager::*; use rpg_components::{ components::{level::Level, npc_type::NPCType}, items::Loot, diff --git a/gavania-core/src/game/content/components/mod.rs b/gavania-core/src/game/content/components/mod.rs index 5440b21..9aa317c 100644 --- a/gavania-core/src/game/content/components/mod.rs +++ b/gavania-core/src/game/content/components/mod.rs @@ -1,7 +1,3 @@ -pub mod animation_info; -pub mod hitbox; -pub mod movement; - mod ability_location_info; pub mod ai; mod aoe; @@ -11,34 +7,15 @@ mod entity_faction; mod ghost; pub mod health_bar; mod loot_stash; +pub mod movement; mod npc_name; pub use self::{ai::*, aoe_arc::AreaOfEffectArc}; pub use self::{ - ability_location_info::*, - animation_info::AnimationInfo, - aoe::*, - damage_number::*, - entity_faction::*, - ghost::*, - health_bar::*, - hitbox::{CollisionEventType, HitBox}, - loot_stash::*, - movement::Movement, - npc_name::NPCName, + ability_location_info::*, aoe::*, damage_number::*, entity_faction::*, ghost::*, health_bar::*, + loot_stash::*, movement::Movement, npc_name::NPCName, }; -use serde::{Deserialize, Serialize}; - pub const MOVEMENT_MAX_THRESHOLD: f32 = 0.8; pub const MOVEMENT_MIN_THRESHOLD: f32 = 0.4; - -#[derive(PartialEq, Eq, Hash, Clone, Copy, Debug, Serialize, Deserialize)] -pub enum AnimationType { - Move, - Idle, - Cast, - Attack, - // Add more as you need -} diff --git a/gavania-core/src/game/content/components/movement.rs b/gavania-core/src/game/content/components/movement.rs index 5df1760..15ce11b 100644 --- a/gavania-core/src/game/content/components/movement.rs +++ b/gavania-core/src/game/content/components/movement.rs @@ -1,8 +1,8 @@ use cgmath; use cgmath::Vector2; use engine::prelude::*; +use entity_manager::*; -use super::super::prelude::*; use super::{MOVEMENT_MAX_THRESHOLD, MOVEMENT_MIN_THRESHOLD}; use std::time::Duration; diff --git a/gavania-core/src/game/content/lightning.rs b/gavania-core/src/game/content/lightning.rs index e9c885e..693bffc 100644 --- a/gavania-core/src/game/content/lightning.rs +++ b/gavania-core/src/game/content/lightning.rs @@ -1,6 +1,7 @@ use std::{collections::HashMap, str::FromStr}; use cgmath::{vec2, Deg, Rad, Vector2, Vector3}; +use entity_manager::*; use crate::*; diff --git a/gavania-core/src/game/content/objects/hero.rs b/gavania-core/src/game/content/objects/hero.rs index 51c2f5e..c4ea0a8 100644 --- a/gavania-core/src/game/content/objects/hero.rs +++ b/gavania-core/src/game/content/objects/hero.rs @@ -2,6 +2,7 @@ use anyhow::Result; use assetpath::AssetPath; use cgmath::{vec2, Vector2}; use engine::prelude::*; +use entity_manager::*; use rpg_components::{ ability_type::AbilityType, components::{ diff --git a/gavania-core/src/game/content/objects/mod.rs b/gavania-core/src/game/content/objects/mod.rs index e101930..ebc1cbe 100644 --- a/gavania-core/src/game/content/objects/mod.rs +++ b/gavania-core/src/game/content/objects/mod.rs @@ -1,7 +1,2 @@ pub mod hero; - -pub mod entity_info; -pub mod entity_manager; -pub mod entity_tags; -pub mod entityparser; pub mod npc; diff --git a/gavania-core/src/game/content/objects/npc.rs b/gavania-core/src/game/content/objects/npc.rs index 0424bdf..b5f9e43 100644 --- a/gavania-core/src/game/content/objects/npc.rs +++ b/gavania-core/src/game/content/objects/npc.rs @@ -10,9 +10,9 @@ use anyhow::Result; use assetpath::AssetPath; use cgmath::{vec3, Deg, InnerSpace, Vector3, Zero}; use engine::prelude::*; +use entity_manager::*; use rpg_components::{ components::{ - ability_slots::AbilitySlots, attributes::Attributes, character_status::CharacterStatus, level::Level, diff --git a/gavania-core/src/game/content/prelude.rs b/gavania-core/src/game/content/prelude.rs index 6a63a0d..195b2d7 100644 --- a/gavania-core/src/game/content/prelude.rs +++ b/gavania-core/src/game/content/prelude.rs @@ -2,11 +2,4 @@ pub use super::abilities::prelude::*; pub use super::components::*; pub use super::lightning::{Lightning, LightningMarker}; pub use super::objects::hero::{Hero, MainUser}; -pub use super::objects::{ - entity_manager::EntityManager, - entity_tags::EntityTags, - entityparser::{ - AnimationData, EntityParser, SOUND_CREATE_KEY, SOUND_DESTROY_KEY, SOUND_MOVE_KEY, - }, - npc::{NPCAbilitySlot, NPCFactory, NPCSettings}, -}; +pub use super::objects::npc::{NPCAbilitySlot, NPCFactory, NPCSettings}; diff --git a/gavania-core/src/game/game.rs b/gavania-core/src/game/game.rs index 5e7c188..d3b72d2 100644 --- a/gavania-core/src/game/game.rs +++ b/gavania-core/src/game/game.rs @@ -6,6 +6,7 @@ use assetpath::AssetPath; // use lua_wrapper::LuaFunction; use anyhow::Result; +use entity_manager::*; use lua_wrapper::LuaFunction; use rpg_components::config::abilities::AbilitySettings; use rpg_components::config::attributes::AttributeSettings; @@ -20,11 +21,9 @@ use std::{fs::create_dir_all, path::Path, sync::Arc}; // game use crate::game::configloader::*; -use crate::game::content::prelude::*; use crate::loader::settings::*; use cgmath::Vector3; - use promise::Promise; use super::handle::{StrongHandle, WeakHandle};