Skip to main content

OnceExt

Trait OnceExt 

Source
pub trait OnceExt<Marker> {
    type System: System;

    // Required method
    fn once(self) -> Self::System;
}
Expand description

Adds .once() to a function/closure whose parameters are valid SystemParams and whose return type is Option<()>, registering it as a system that runs on every tick of whichever stage it’s added to until it returns Some(()), then never runs again.

This replaces manually tracking a “have I already done this” flag with a Local<bool>: return None from the function to mean “not ready, try again next tick” and Some(()) to mean “done, retire me”.

fn setup(mut commands: Commands, pbr: Option<Res<PBR>>) -> Option<()> {
    let pbr = pbr?;
    if pbr.cubemap_material_inst == RawAssetHandle::default() {
        return None; // not ready yet — try again next tick
    }
    commands.spawn(/* ... */);
    Some(()) // done — never runs again
}

app.add_system(SystemStage::PreUpdate, setup.once());

Required Associated Types§

Required Methods§

Source

fn once(self) -> Self::System

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<T, A, B, C, D, E, F, G, H, I, J, K, L> OnceExt<(A, B, C, D, E, F, G, H, I, J, K, L)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>, D::Item<'a>, E::Item<'a>, F::Item<'a>, G::Item<'a>, H::Item<'a>, I::Item<'a>, J::Item<'a>, K::Item<'a>, L::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C, D, E, F, G, H, I, J, K, L) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static, D: SystemParam + 'static, E: SystemParam + 'static, F: SystemParam + 'static, G: SystemParam + 'static, H: SystemParam + 'static, I: SystemParam + 'static, J: SystemParam + 'static, K: SystemParam + 'static, L: SystemParam + 'static,

Source§

impl<T, A, B, C, D, E, F, G, H, I, J, K> OnceExt<(A, B, C, D, E, F, G, H, I, J, K)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>, D::Item<'a>, E::Item<'a>, F::Item<'a>, G::Item<'a>, H::Item<'a>, I::Item<'a>, J::Item<'a>, K::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C, D, E, F, G, H, I, J, K) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static, D: SystemParam + 'static, E: SystemParam + 'static, F: SystemParam + 'static, G: SystemParam + 'static, H: SystemParam + 'static, I: SystemParam + 'static, J: SystemParam + 'static, K: SystemParam + 'static,

Source§

impl<T, A, B, C, D, E, F, G, H, I, J> OnceExt<(A, B, C, D, E, F, G, H, I, J)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>, D::Item<'a>, E::Item<'a>, F::Item<'a>, G::Item<'a>, H::Item<'a>, I::Item<'a>, J::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C, D, E, F, G, H, I, J) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static, D: SystemParam + 'static, E: SystemParam + 'static, F: SystemParam + 'static, G: SystemParam + 'static, H: SystemParam + 'static, I: SystemParam + 'static, J: SystemParam + 'static,

Source§

impl<T, A, B, C, D, E, F, G, H, I> OnceExt<(A, B, C, D, E, F, G, H, I)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>, D::Item<'a>, E::Item<'a>, F::Item<'a>, G::Item<'a>, H::Item<'a>, I::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C, D, E, F, G, H, I) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static, D: SystemParam + 'static, E: SystemParam + 'static, F: SystemParam + 'static, G: SystemParam + 'static, H: SystemParam + 'static, I: SystemParam + 'static,

Source§

impl<T, A, B, C, D, E, F, G, H> OnceExt<(A, B, C, D, E, F, G, H)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>, D::Item<'a>, E::Item<'a>, F::Item<'a>, G::Item<'a>, H::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C, D, E, F, G, H) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static, D: SystemParam + 'static, E: SystemParam + 'static, F: SystemParam + 'static, G: SystemParam + 'static, H: SystemParam + 'static,

Source§

impl<T, A, B, C, D, E, F, G> OnceExt<(A, B, C, D, E, F, G)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>, D::Item<'a>, E::Item<'a>, F::Item<'a>, G::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C, D, E, F, G) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static, D: SystemParam + 'static, E: SystemParam + 'static, F: SystemParam + 'static, G: SystemParam + 'static,

Source§

impl<T, A, B, C, D, E, F> OnceExt<(A, B, C, D, E, F)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>, D::Item<'a>, E::Item<'a>, F::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C, D, E, F) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static, D: SystemParam + 'static, E: SystemParam + 'static, F: SystemParam + 'static,

Source§

impl<T, A, B, C, D, E> OnceExt<(A, B, C, D, E)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>, D::Item<'a>, E::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C, D, E) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static, D: SystemParam + 'static, E: SystemParam + 'static,

Source§

impl<T, A, B, C, D> OnceExt<(A, B, C, D)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>, D::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C, D) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static, D: SystemParam + 'static,

Source§

impl<T, A, B, C> OnceExt<(A, B, C)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>, C::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B, C) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static, C: SystemParam + 'static,

Source§

impl<T, A, B> OnceExt<(A, B)> for T
where T: for<'a> FnMut(A::Item<'a>, B::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A, B) -> Option<()>, A: SystemParam + 'static, B: SystemParam + 'static,

Source§

impl<T, A> OnceExt<(A,)> for T
where T: for<'a> FnMut(A::Item<'a>) -> Option<()> + 'static, for<'a> &'a mut T: FnMut(A) -> Option<()>, A: SystemParam + 'static,

Source§

impl<T> OnceExt<()> for T
where T: for<'a> FnMut() -> Option<()> + 'static, for<'a> &'a mut T: FnMut() -> Option<()>,