summaryrefslogtreecommitdiff
path: root/ecs/src/component.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2024-04-09 21:14:54 +0200
committerHampusM <hampus@hampusmat.com>2024-04-09 21:14:54 +0200
commit50234ddc9ee7acd6d2b8d0a5626caf9e9293c0da (patch)
tree8a2ee16c5ace5d018bcbb85fb5d7477b2cb1492e /ecs/src/component.rs
parentc47067d4c1eb2e6f2ea0ac7d3daba01d4f46e5e1 (diff)
refactor(ecs): move Local to own module
Diffstat (limited to 'ecs/src/component.rs')
-rw-r--r--ecs/src/component.rs84
1 files changed, 3 insertions, 81 deletions
diff --git a/ecs/src/component.rs b/ecs/src/component.rs
index c1f8168..7a61f39 100644
--- a/ecs/src/component.rs
+++ b/ecs/src/component.rs
@@ -1,18 +1,13 @@
use std::any::{Any, TypeId};
use std::fmt::Debug;
-use std::ops::{Deref, DerefMut};
use seq_macro::seq;
use crate::lock::{Lock, WriteGuard};
-use crate::system::{
- ComponentRefMut,
- Input as SystemInput,
- Param as SystemParam,
- System,
-};
+use crate::system::{ComponentRefMut, Input as SystemInput};
use crate::type_name::TypeName;
-use crate::WorldData;
+
+pub mod local;
pub trait Component: SystemInput + Any + TypeName
{
@@ -131,76 +126,3 @@ macro_rules! inner {
seq!(C in 0..=64 {
inner!(C);
});
-
-/// Holds a component which is local to a single system.
-#[derive(Debug)]
-pub struct Local<'world, LocalComponent: Component>
-{
- local_component: ComponentRefMut<'world, LocalComponent>,
-}
-
-unsafe impl<'world, LocalComponent> SystemParam<'world> for Local<'world, LocalComponent>
-where
- LocalComponent: Component,
-{
- type Flags = ();
- type Input = LocalComponent;
-
- fn initialize<SystemImpl>(
- system: &mut impl System<'world, SystemImpl>,
- input: Self::Input,
- )
- {
- system.set_local_component(input);
- }
-
- fn new<SystemImpl>(
- system: &'world impl System<'world, SystemImpl>,
- _world_data: &'world WorldData,
- ) -> Self
- {
- let local_component = system
- .get_local_component_mut::<LocalComponent>()
- .expect("Local component is uninitialized");
-
- Self { local_component }
- }
-
- fn is_compatible<Other: SystemParam<'world>>() -> bool
- {
- let other_comparable = Other::get_comparable();
-
- let Some(other_type_id) = other_comparable.downcast_ref::<TypeId>() else {
- return true;
- };
-
- TypeId::of::<LocalComponent>() != *other_type_id
- }
-
- fn get_comparable() -> Box<dyn Any>
- {
- Box::new(TypeId::of::<LocalComponent>())
- }
-}
-
-impl<'world, LocalComponent> Deref for Local<'world, LocalComponent>
-where
- LocalComponent: Component,
-{
- type Target = LocalComponent;
-
- fn deref(&self) -> &Self::Target
- {
- &self.local_component
- }
-}
-
-impl<'world, LocalComponent> DerefMut for Local<'world, LocalComponent>
-where
- LocalComponent: Component,
-{
- fn deref_mut(&mut self) -> &mut Self::Target
- {
- &mut self.local_component
- }
-}