ecs: Read{,Write}Data -> Read{,Write}Component
parent
d8062733e9
commit
05e8bb7d1f
|
@ -9,8 +9,8 @@ pub mod world;
|
|||
pub use component::Component as Component;
|
||||
pub use component::Resource as Resource;
|
||||
pub use world::World as World;
|
||||
pub use world::ReadData as ReadData;
|
||||
pub use world::ReadWriteData as ReadWriteData;
|
||||
pub use world::ReadComponent as ReadComponent;
|
||||
pub use world::ReadWriteComponent as ReadWriteComponent;
|
||||
pub use world::ReadResource as ReadResource;
|
||||
pub use world::ReadWriteResource as ReadWriteResource;
|
||||
pub use system::System as System;
|
||||
|
|
|
@ -4,8 +4,8 @@ use std::iter::Peekable;
|
|||
use crate::{
|
||||
component,
|
||||
world::{
|
||||
ReadData, ReadDataIter,
|
||||
ReadWriteData, ReadWriteDataIter,
|
||||
ReadComponent, ReadComponentIter,
|
||||
ReadWriteComponent, ReadWriteComponentIter,
|
||||
ReadResource, ReadWriteResource,
|
||||
World,
|
||||
}
|
||||
|
@ -41,30 +41,30 @@ pub trait AccessComponent<'a> : Access<'a> {
|
|||
fn iter(&self) -> Self::Iterator;
|
||||
}
|
||||
|
||||
impl<'a, T: component::Component> Access<'a> for ReadData<'a, T> {
|
||||
impl<'a, T: component::Component> Access<'a> for ReadComponent<'a, T> {
|
||||
fn fetch(world: &'a World) -> Self {
|
||||
world.components()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T: component::Component> AccessComponent<'a> for ReadData<'a, T> {
|
||||
impl<'a, T: component::Component> AccessComponent<'a> for ReadComponent<'a, T> {
|
||||
type Component = &'a T;
|
||||
type Iterator = ReadDataIter<'a, T>;
|
||||
fn iter(&self) -> ReadDataIter<'a, T> {
|
||||
type Iterator = ReadComponentIter<'a, T>;
|
||||
fn iter(&self) -> ReadComponentIter<'a, T> {
|
||||
Self::iter(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T: component::Component> Access<'a> for ReadWriteData<'a, T> {
|
||||
impl<'a, T: component::Component> Access<'a> for ReadWriteComponent<'a, T> {
|
||||
fn fetch(world: &'a World) -> Self {
|
||||
world.components_mut()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T: component::Component> AccessComponent<'a> for ReadWriteData<'a, T> {
|
||||
impl<'a, T: component::Component> AccessComponent<'a> for ReadWriteComponent<'a, T> {
|
||||
type Component = &'a mut T;
|
||||
type Iterator = ReadWriteDataIter<'a, T>;
|
||||
fn iter(&self) -> ReadWriteDataIter<'a, T> {
|
||||
type Iterator = ReadWriteComponentIter<'a, T>;
|
||||
fn iter(&self) -> ReadWriteComponentIter<'a, T> {
|
||||
Self::iter_mut(self)
|
||||
}
|
||||
}
|
||||
|
@ -200,7 +200,7 @@ mod test {
|
|||
component::Resource,
|
||||
system,
|
||||
system::Join,
|
||||
world::{ReadData, ReadWriteData, ReadResource, ReadWriteResource, World},
|
||||
world::{ReadComponent, ReadWriteComponent, ReadResource, ReadWriteResource, World},
|
||||
};
|
||||
|
||||
#[derive(Clone,Debug,Default)]
|
||||
|
@ -231,8 +231,8 @@ mod test {
|
|||
|
||||
struct Physics;
|
||||
impl<'a> system::System<'a> for Physics {
|
||||
type SystemData = ( ReadWriteData<'a, Position>
|
||||
, ReadData<'a, Velocity>
|
||||
type SystemData = ( ReadWriteComponent<'a, Position>
|
||||
, ReadComponent<'a, Velocity>
|
||||
, ReadResource<'a, Delta>
|
||||
, ReadWriteResource<'a, PhysicsStatus>);
|
||||
|
||||
|
|
|
@ -15,27 +15,27 @@ use crate::resourcemap::{
|
|||
use crate::entity;
|
||||
use crate::component;
|
||||
|
||||
pub struct ReadData<'a, T: component::Component> {
|
||||
pub struct ReadComponent<'a, T: component::Component> {
|
||||
world: &'a World,
|
||||
phantom: PhantomData<&'a T>,
|
||||
}
|
||||
|
||||
impl<'a, T: component::Component> ReadData<'a, T> {
|
||||
pub fn iter(&self) -> ReadDataIter<'a, T> {
|
||||
impl<'a, T: component::Component> ReadComponent<'a, T> {
|
||||
pub fn iter(&self) -> ReadComponentIter<'a, T> {
|
||||
let cm = self.world.components.get(&component::component_id::<T>());
|
||||
ReadDataIter {
|
||||
ReadComponentIter {
|
||||
phantom: PhantomData,
|
||||
iter: cm.map(|e| e.try_iter().unwrap() ),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ReadDataIter<'a, T: component::Component> {
|
||||
pub struct ReadComponentIter<'a, T: component::Component> {
|
||||
phantom: PhantomData<&'a T>,
|
||||
iter: Option<ComponentMapIter<'a>>,
|
||||
}
|
||||
|
||||
impl <'a, T: component::Component> Iterator for ReadDataIter<'a, T> {
|
||||
impl <'a, T: component::Component> Iterator for ReadComponentIter<'a, T> {
|
||||
type Item = (entity::ID, &'a T);
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
|
@ -53,27 +53,27 @@ impl <'a, T: component::Component> Iterator for ReadDataIter<'a, T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub struct ReadWriteData<'a, T: component::Component> {
|
||||
pub struct ReadWriteComponent<'a, T: component::Component> {
|
||||
world: &'a World,
|
||||
phantom: PhantomData<&'a T>,
|
||||
}
|
||||
|
||||
impl<'a, T: component::Component> ReadWriteData<'a, T> {
|
||||
pub fn iter_mut(&self) -> ReadWriteDataIter<'a, T> {
|
||||
impl<'a, T: component::Component> ReadWriteComponent<'a, T> {
|
||||
pub fn iter_mut(&self) -> ReadWriteComponentIter<'a, T> {
|
||||
let cm = self.world.components.get(&component::component_id::<T>());
|
||||
ReadWriteDataIter {
|
||||
ReadWriteComponentIter {
|
||||
phantom: PhantomData,
|
||||
iter: cm.map(|e| e.try_iter_mut().unwrap() ),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ReadWriteDataIter<'a, T: component::Component> {
|
||||
pub struct ReadWriteComponentIter<'a, T: component::Component> {
|
||||
phantom: PhantomData<&'a T>,
|
||||
iter: Option<ComponentMapIterMut<'a>>,
|
||||
}
|
||||
|
||||
impl <'a, T: component::Component> Iterator for ReadWriteDataIter<'a, T> {
|
||||
impl <'a, T: component::Component> Iterator for ReadWriteComponentIter<'a, T> {
|
||||
type Item = (entity::ID, &'a mut T);
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
|
@ -144,15 +144,15 @@ impl World {
|
|||
map.insert(e.id(), c).unwrap();
|
||||
}
|
||||
|
||||
pub fn components<'a, T: component::Component>(&'a self) -> ReadData<'a, T> {
|
||||
ReadData {
|
||||
pub fn components<'a, T: component::Component>(&'a self) -> ReadComponent<'a, T> {
|
||||
ReadComponent {
|
||||
world: self,
|
||||
phantom: PhantomData,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn components_mut<'a, T: component::Component>(&'a self) -> ReadWriteData<'a, T> {
|
||||
ReadWriteData {
|
||||
pub fn components_mut<'a, T: component::Component>(&'a self) -> ReadWriteComponent<'a, T> {
|
||||
ReadWriteComponent {
|
||||
world: self,
|
||||
phantom: PhantomData,
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue