ecs: Read{,Write}Data -> Read{,Write}Component

master
q3k 2021-03-21 16:03:15 +00:00
parent d8062733e9
commit 05e8bb7d1f
3 changed files with 31 additions and 31 deletions

View File

@ -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;

View File

@ -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>);

View File

@ -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,
}