From d78574f54a11b98dcaa2e559dfeb81e34e303369 Mon Sep 17 00:00:00 2001 From: Michael Huebner Date: Tue, 11 Mar 2025 13:39:55 +0100 Subject: [PATCH] Convert FreeSpaceControl to EntityComponent --- .../components}/free_space_control.rs | 25 +++++++++++++++++++ engine/src/scene/content/components/mod.rs | 11 +++----- engine/src/scene/content/prelude.rs | 9 +++---- engine/src/scene/general/mod.rs | 1 - engine/src/scene/general/prelude.rs | 1 - 5 files changed, 33 insertions(+), 14 deletions(-) rename engine/src/scene/{general => content/components}/free_space_control.rs (90%) diff --git a/engine/src/scene/general/free_space_control.rs b/engine/src/scene/content/components/free_space_control.rs similarity index 90% rename from engine/src/scene/general/free_space_control.rs rename to engine/src/scene/content/components/free_space_control.rs index 5797beb..c084204 100644 --- a/engine/src/scene/general/free_space_control.rs +++ b/engine/src/scene/content/components/free_space_control.rs @@ -1,4 +1,7 @@ +use anyhow::Result; use context::prelude::cgmath::*; +use ecs::{ComponentDebug, EntityComponent, World}; + use std::time::Duration; pub struct FreeSpaceControlSettings { @@ -156,3 +159,25 @@ impl FreeSpaceControl { ) } } + +impl EntityComponent for FreeSpaceControl { + fn enable(&mut self, _world: &mut World) -> Result<()> { + Ok(()) + } + + fn disable(&mut self, _world: &mut World) -> Result<()> { + self.last_update = None; + + Ok(()) + } + + fn name(&self) -> &str { + Self::debug_name() + } +} + +impl ComponentDebug for FreeSpaceControl { + fn debug_name() -> &'static str { + "FreeSpaceControl" + } +} diff --git a/engine/src/scene/content/components/mod.rs b/engine/src/scene/content/components/mod.rs index 108020b..6b6923d 100644 --- a/engine/src/scene/content/components/mod.rs +++ b/engine/src/scene/content/components/mod.rs @@ -1,13 +1,10 @@ pub mod animation; - -pub mod draw; - -pub mod particle_system; - -pub mod bounding_box; - pub mod audio; +pub mod bounding_box; +pub mod draw; +pub mod free_space_control; pub mod location; +pub mod particle_system; // angle of current object pub fn angle(v1: crate::prelude::cgmath::Vector2) -> crate::prelude::cgmath::Rad { diff --git a/engine/src/scene/content/prelude.rs b/engine/src/scene/content/prelude.rs index 10d7ca7..7ad3158 100644 --- a/engine/src/scene/content/prelude.rs +++ b/engine/src/scene/content/prelude.rs @@ -1,10 +1,9 @@ -pub use super::components::{animation::Animation, audio::Audio, draw::Draw}; - pub use super::components::{ - audio::{ON_DISABLE_SOUND, ON_ENABLE_SOUND}, + animation::Animation, + audio::{Audio, ON_DISABLE_SOUND, ON_ENABLE_SOUND}, bounding_box::BoundingBox, + draw::Draw, + free_space_control::*, location::Location, particle_system::*, }; - -// pub use super::query::SceneQuery; diff --git a/engine/src/scene/general/mod.rs b/engine/src/scene/general/mod.rs index 3040092..e25536f 100644 --- a/engine/src/scene/general/mod.rs +++ b/engine/src/scene/general/mod.rs @@ -1,6 +1,5 @@ pub mod camera; pub mod free_camera_control; -pub mod free_space_control; pub mod light; pub mod prelude; pub mod top_down_camera_control; diff --git a/engine/src/scene/general/prelude.rs b/engine/src/scene/general/prelude.rs index 8d83f86..375cf62 100644 --- a/engine/src/scene/general/prelude.rs +++ b/engine/src/scene/general/prelude.rs @@ -1,6 +1,5 @@ pub use super::camera::*; pub use super::free_camera_control::*; -pub use super::free_space_control::*; pub use super::light::*; pub use super::top_down_camera_control::*; pub use super::validcommandbuffer::*;