ecs: add WorldTick query, implement IntoSystem and FnSystem for funcs with 11 args
accidentially missed the macro call for 11 arguments
This commit is contained in:
parent
eb43fad6c7
commit
9125b91977
|
@ -31,6 +31,10 @@ mod optional;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
pub use optional::*;
|
pub use optional::*;
|
||||||
|
|
||||||
|
mod world_tick;
|
||||||
|
#[allow(unused_imports)]
|
||||||
|
pub use world_tick::*;
|
||||||
|
|
||||||
pub mod dynamic;
|
pub mod dynamic;
|
||||||
|
|
||||||
pub mod filter;
|
pub mod filter;
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
use std::ops::Deref;
|
||||||
|
|
||||||
|
use crate::{system::FnArgFetcher, Tick, World};
|
||||||
|
use super::{Fetch, Query, AsQuery};
|
||||||
|
|
||||||
|
/// Fetcher used to fetch the current tick of the world.
|
||||||
|
pub struct FetchWorldTick {
|
||||||
|
tick: Tick
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Fetch<'a> for FetchWorldTick {
|
||||||
|
type Item = WorldTick;
|
||||||
|
|
||||||
|
fn dangling() -> Self {
|
||||||
|
unreachable!()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn can_visit_item(&mut self, _entity: crate::ArchetypeEntityId) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe fn get_item(&mut self, _entity: crate::world::ArchetypeEntityId) -> Self::Item {
|
||||||
|
WorldTick(self.tick)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Query used to query the current tick of the world.
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
pub struct QueryWorldTick;
|
||||||
|
|
||||||
|
impl Default for QueryWorldTick {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Query for QueryWorldTick {
|
||||||
|
type Item<'a> = WorldTick;
|
||||||
|
|
||||||
|
type Fetch<'a> = FetchWorldTick;
|
||||||
|
|
||||||
|
const ALWAYS_FETCHES: bool = true;
|
||||||
|
|
||||||
|
fn new() -> Self {
|
||||||
|
QueryWorldTick
|
||||||
|
}
|
||||||
|
|
||||||
|
fn can_visit_archetype(&self, _archetype: &crate::archetype::Archetype) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe fn fetch<'a>(&self, world: &'a World, _archetype: &'a crate::archetype::Archetype, _tick: crate::Tick) -> Self::Fetch<'a> {
|
||||||
|
FetchWorldTick {
|
||||||
|
tick: world.current_tick()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe fn fetch_world<'a>(&self, world: &'a World) -> Option<Self::Fetch<'a>> {
|
||||||
|
Some(FetchWorldTick {
|
||||||
|
tick: world.current_tick()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsQuery for QueryWorldTick {
|
||||||
|
type Query = Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Type that can be used in an fn system for fetching the current world tick.
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub struct WorldTick(Tick);
|
||||||
|
|
||||||
|
impl Deref for WorldTick {
|
||||||
|
type Target = Tick;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsQuery for WorldTick {
|
||||||
|
type Query = QueryWorldTick;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FnArgFetcher for WorldTick {
|
||||||
|
type State = ();
|
||||||
|
|
||||||
|
type Arg<'a, 'state> = WorldTick;
|
||||||
|
|
||||||
|
fn create_state(_: std::ptr::NonNull<World>) -> Self::State {
|
||||||
|
()
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe fn get<'a, 'state>(_: &'state mut Self::State, world: std::ptr::NonNull<World>) -> Self::Arg<'a, 'state> {
|
||||||
|
let world = world.as_ref();
|
||||||
|
WorldTick(world.current_tick())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn apply_deferred(_: Self::State, _: std::ptr::NonNull<World>) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -130,6 +130,7 @@ impl_fn_system_tuple!{ A, B, C, D, E, F2, G }
|
||||||
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H }
|
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H }
|
||||||
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I }
|
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I }
|
||||||
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I, J }
|
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I, J }
|
||||||
|
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I, J, K }
|
||||||
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I, J, K, L }
|
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I, J, K, L }
|
||||||
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I, J, K, L, M }
|
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I, J, K, L, M }
|
||||||
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I, J, K, L, M, N }
|
impl_fn_system_tuple!{ A, B, C, D, E, F2, G, H, I, J, K, L, M, N }
|
||||||
|
|
Loading…
Reference in New Issue