From cae678747ff8daf7a45e6fc37d0037c635cc52c9 Mon Sep 17 00:00:00 2001 From: lisk77 Date: Wed, 5 Mar 2025 08:39:57 +0100 Subject: [PATCH] fix: finally removed the `storage.rs`in the `comet_ecs` --- crates/comet_app/src/app.rs | 4 +-- crates/comet_ecs/src/archetypes.rs | 2 +- crates/comet_ecs/src/lib.rs | 2 -- crates/comet_ecs/src/world.rs | 5 ++-- crates/comet_renderer/Cargo.toml | 1 + crates/comet_renderer/src/renderer2d.rs | 3 ++- crates/comet_structs/src/componet_set.rs | 34 ++++++++++++++++++++++++ crates/comet_structs/src/lib.rs | 4 ++- 8 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 crates/comet_structs/src/componet_set.rs diff --git a/crates/comet_app/src/app.rs b/crates/comet_app/src/app.rs index 3b561f7..b5086ef 100644 --- a/crates/comet_app/src/app.rs +++ b/crates/comet_app/src/app.rs @@ -4,7 +4,7 @@ use std::sync::atomic::AtomicBool; use std::thread; use std::time::{Duration, Instant}; use crossbeam_channel::bounded; -use comet_ecs::{Camera2D, Component, ComponentSet, Entity, Render, Render2D, Transform2D, Transform3D, World}; +use comet_ecs::{Camera2D, Component, Entity, Render, Render2D, Transform2D, Transform3D, World}; use comet_resources::{ResourceManager, Vertex}; use comet_renderer::renderer2d::Renderer2D; @@ -113,7 +113,7 @@ impl App { fn load_icon(path: &std::path::Path) -> Option { let image = match image::open(path) { Ok(image) => image, - Err(e) => { + Err(_) => { error!("Failed loading icon {}", path.display()); return None; } diff --git a/crates/comet_ecs/src/archetypes.rs b/crates/comet_ecs/src/archetypes.rs index b80709f..ff1e9a6 100644 --- a/crates/comet_ecs/src/archetypes.rs +++ b/crates/comet_ecs/src/archetypes.rs @@ -1,5 +1,5 @@ use std::collections::HashMap; -use crate::ComponentSet; +use comet_structs::ComponentSet; #[derive(Debug, Clone)] pub struct Archetypes { diff --git a/crates/comet_ecs/src/lib.rs b/crates/comet_ecs/src/lib.rs index 9e54715..8d85a74 100644 --- a/crates/comet_ecs/src/lib.rs +++ b/crates/comet_ecs/src/lib.rs @@ -1,4 +1,3 @@ -pub use storage::*; pub use entity::*; pub use component::*; pub use world::*; @@ -6,7 +5,6 @@ pub use id::*; pub use component_derive::*; pub use comet_math as math; -mod storage; mod entity; mod component; mod world; diff --git a/crates/comet_ecs/src/world.rs b/crates/comet_ecs/src/world.rs index 8c77cbc..4e46218 100644 --- a/crates/comet_ecs/src/world.rs +++ b/crates/comet_ecs/src/world.rs @@ -6,11 +6,10 @@ use crate::{ Transform2D, Transform3D, IdQueue, - Archetypes, - ComponentSet }; use comet_log::*; use comet_structs::*; +use crate::archetypes::Archetypes; #[derive(Clone)] pub struct World { @@ -206,10 +205,10 @@ impl World { /// Returns a list of entities that have the given components. pub fn get_entities_with(&self, components: ComponentSet) -> Vec { - error!("The given components {:?} are not registered in the world!", components); if self.archetypes.contains_archetype(&components) { return self.archetypes.get_archetype(&components).unwrap().clone(); } + error!("The given components {:?} are not registered in the world!", components); Vec::new() } } diff --git a/crates/comet_renderer/Cargo.toml b/crates/comet_renderer/Cargo.toml index 1ed1646..83f7313 100644 --- a/crates/comet_renderer/Cargo.toml +++ b/crates/comet_renderer/Cargo.toml @@ -9,6 +9,7 @@ comet_math = { path = "../comet_math" } comet_resources = { path = "../comet_resources" } comet_colors = { path = "../comet_colors" } comet_log = { path = "../comet_log" } +comet_structs = { path = "../comet_structs" } cfg-if = "1" anyhow = "1.0" diff --git a/crates/comet_renderer/src/renderer2d.rs b/crates/comet_renderer/src/renderer2d.rs index 8694f5c..c4a2c75 100644 --- a/crates/comet_renderer/src/renderer2d.rs +++ b/crates/comet_renderer/src/renderer2d.rs @@ -8,11 +8,12 @@ use wgpu::util::DeviceExt; use winit::dpi::PhysicalSize; use winit::window::Window; use comet_colors::LinearRgba; -use comet_ecs::{Camera, Camera2D, Component, ComponentSet, Render, Render2D, Transform2D, World}; +use comet_ecs::{Camera, Camera2D, Component, Render, Render2D, Transform2D, World}; use comet_log::{debug, info}; use comet_math::{Point3, Vec2, Vec3}; use comet_resources::{texture, graphic_resource_manager::GraphicResorceManager, Texture, Vertex}; use comet_resources::texture_atlas::TextureRegion; +use comet_structs::ComponentSet; use crate::camera::{Camera as OldCam, CameraUniform}; use crate::render_pass::RenderPassInfo; use crate::renderer::Renderer; diff --git a/crates/comet_structs/src/componet_set.rs b/crates/comet_structs/src/componet_set.rs new file mode 100644 index 0000000..080c4ac --- /dev/null +++ b/crates/comet_structs/src/componet_set.rs @@ -0,0 +1,34 @@ +use std::any::TypeId; +use std::collections::HashSet; +use std::hash::{Hash, Hasher}; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct ComponentSet { + set: HashSet +} + +impl ComponentSet { + pub fn new() -> Self { + Self { + set: HashSet::new() + } + } + + pub fn from_ids(ids: Vec) -> Self { + Self { + set: ids.into_iter().collect() + } + } + + pub fn is_subset(&self, other: &ComponentSet) -> bool { + self.set.is_subset(&other.set) + } +} + +impl Hash for ComponentSet { + fn hash(&self, state: &mut H) { + let mut types: Vec = self.set.iter().cloned().collect(); + types.sort(); + types.hash(state); + } +} \ No newline at end of file diff --git a/crates/comet_structs/src/lib.rs b/crates/comet_structs/src/lib.rs index 63e6646..fdd5317 100644 --- a/crates/comet_structs/src/lib.rs +++ b/crates/comet_structs/src/lib.rs @@ -2,8 +2,10 @@ pub use column::Column; pub use sparse_set::SparseSet; pub use flat_map::FlatMap; pub use component_storage::ComponentStorage; +pub use componet_set::ComponentSet; mod column; mod sparse_set; mod flat_map; -mod component_storage; \ No newline at end of file +mod component_storage; +mod componet_set; \ No newline at end of file