From d00ce85c591f7fa8385ef7e99b44db6a14788cd4 Mon Sep 17 00:00:00 2001 From: HampusM Date: Wed, 2 Apr 2025 14:42:10 +0200 Subject: refactor(ecs): move & rename system::ComponentRef* to component mod --- ecs/src/system.rs | 169 ++---------------------------------------------------- 1 file changed, 4 insertions(+), 165 deletions(-) (limited to 'ecs/src/system.rs') diff --git a/ecs/src/system.rs b/ecs/src/system.rs index fdf87f8..603c015 100644 --- a/ecs/src/system.rs +++ b/ecs/src/system.rs @@ -1,21 +1,11 @@ -use std::any::{type_name, Any}; +use std::any::Any; use std::convert::Infallible; use std::fmt::Debug; -use std::marker::PhantomData; -use std::ops::{Deref, DerefMut}; use ecs_macros::Component; use seq_macro::seq; -use crate::component::{Component, FromLockedOptional as FromLockedOptionalComponent}; -use crate::lock::{ - Error as LockError, - Lock, - MappedReadGuard, - MappedWriteGuard, - ReadGuard, - WriteGuard, -}; +use crate::component::{Component, HandleMut as ComponentHandleMut}; use crate::tuple::{ReduceElement as TupleReduceElement, Tuple}; use crate::World; @@ -36,7 +26,7 @@ pub trait System<'world, Impl>: 'static fn get_local_component_mut( &self, - ) -> Option>; + ) -> Option>; fn set_local_component( &mut self, @@ -95,7 +85,7 @@ macro_rules! impl_system { fn get_local_component_mut( &self, - ) -> Option> + ) -> Option> { panic!("System does not have any local components"); } @@ -189,157 +179,6 @@ impl TupleReduceElement for () type Return = Accumulator; } -#[derive(Debug)] -pub struct ComponentRefMut<'a, ComponentT: Component> -{ - inner: MappedWriteGuard<'a, ComponentT>, - _ph: PhantomData, -} - -impl<'a, ComponentT: Component> ComponentRefMut<'a, ComponentT> -{ - pub(crate) fn new(inner: WriteGuard<'a, Box>) -> Self - { - Self { - inner: inner.map(|component| { - let component_type_name = component.type_name(); - - component.downcast_mut::().unwrap_or_else(|| { - panic!( - "Cannot downcast component {component_type_name} to type {}", - type_name::() - ); - }) - }), - _ph: PhantomData, - } - } -} - -impl<'component, ComponentT: Component> FromLockedOptionalComponent<'component> - for ComponentRefMut<'component, ComponentT> -{ - fn from_locked_optional_component( - optional_component: Option<&'component crate::lock::Lock>>, - _world: &'component World, - ) -> Result - { - let component = optional_component.unwrap_or_else(|| { - panic!( - "Component {} was not found in entity", - type_name::() - ); - }); - - Ok(Self::new(component.write_nonblock()?)) - } -} - -impl<'comp, ComponentT> FromLockedOptionalComponent<'comp> - for Option> -where - ComponentT: Component, -{ - fn from_locked_optional_component( - optional_component: Option<&'comp Lock>>, - _world: &'comp World, - ) -> Result - { - optional_component - .map(|lock| Ok(ComponentRefMut::new(lock.write_nonblock()?))) - .transpose() - } -} - -impl Deref for ComponentRefMut<'_, ComponentT> -{ - type Target = ComponentT; - - fn deref(&self) -> &Self::Target - { - &self.inner - } -} - -impl DerefMut for ComponentRefMut<'_, ComponentT> -{ - fn deref_mut(&mut self) -> &mut Self::Target - { - &mut self.inner - } -} - -#[derive(Debug)] -pub struct ComponentRef<'a, ComponentT: Component> -{ - inner: MappedReadGuard<'a, ComponentT>, - _ph: PhantomData, -} - -impl<'a, ComponentT: Component> ComponentRef<'a, ComponentT> -{ - pub(crate) fn new(inner: ReadGuard<'a, Box>) -> Self - { - Self { - inner: inner.map(|component| { - component.downcast_ref::().unwrap_or_else(|| { - panic!( - "Cannot downcast component {} to type {}", - component.type_name(), - type_name::() - ); - }) - }), - _ph: PhantomData, - } - } -} - -impl<'component, ComponentT: Component> FromLockedOptionalComponent<'component> - for ComponentRef<'component, ComponentT> -{ - fn from_locked_optional_component( - optional_component: Option<&'component crate::lock::Lock>>, - _world: &'component World, - ) -> Result - { - let component = optional_component.unwrap_or_else(|| { - panic!( - "Component {} was not found in entity", - type_name::() - ); - }); - - Ok(Self::new(component.read_nonblock()?)) - } -} - -impl<'comp, ComponentT> FromLockedOptionalComponent<'comp> - for Option> -where - ComponentT: Component, -{ - fn from_locked_optional_component( - optional_component: Option<&'comp Lock>>, - _world: &'comp World, - ) -> Result - { - optional_component - .map(|lock| Ok(ComponentRef::new(lock.read_nonblock()?))) - .transpose() - } -} - -impl Deref for ComponentRef<'_, ComponentT> -{ - type Target = ComponentT; - - fn deref(&self) -> &Self::Target - { - &self.inner - } -} - #[derive(Debug, Component)] pub(crate) struct SystemComponent { -- cgit v1.2.3-18-g5258