Struct bevy_internal::app::SubApp

source ·
pub struct SubApp {
    pub app: App,
    /* private fields */
}
Expand description

A SubApp contains its own Schedule and World separate from the main App. This is useful for situations where data and data processing should be kept completely separate from the main application. The primary use of this feature in bevy is to enable pipelined rendering.

§Example


#[derive(Resource, Default)]
struct Val(pub i32);

#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, AppLabel)]
struct ExampleApp;

let mut app = App::new();

// initialize the main app with a value of 0;
app.insert_resource(Val(10));

// create a app with a resource and a single schedule
let mut sub_app = App::empty();
// add an outer schedule that runs the main schedule
sub_app.insert_resource(Val(100));

// initialize main schedule
sub_app.add_systems(Main, |counter: Res<Val>| {
    // since we assigned the value from the main world in extract
    // we see that value instead of 100
    assert_eq!(counter.0, 10);
});

// add the sub_app to the app
app.insert_sub_app(ExampleApp, SubApp::new(sub_app, |main_world, sub_app| {
    // extract the value from the main app to the sub app
    sub_app.world.resource_mut::<Val>().0 = main_world.resource::<Val>().0;
}));

// This will run the schedules once, since we're using the default runner
app.run();

Fields§

§app: App

The SubApp’s instance of App

Implementations§

source§

impl SubApp

source

pub fn new( app: App, extract: impl Fn(&mut World, &mut App) + Send + 'static ) -> SubApp

Creates a new SubApp.

The provided function extract is normally called by the update method. After extract is called, the Schedule of the sub app is run. The World parameter represents the main app world, while the App parameter is just a mutable reference to the SubApp itself.

source

pub fn run(&mut self)

Runs the SubApp’s default schedule.

source

pub fn extract(&mut self, main_world: &mut World)

Extracts data from main world to this sub-app.

Trait Implementations§

source§

impl Debug for SubApp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !Freeze for SubApp

§

impl !RefUnwindSafe for SubApp

§

impl Send for SubApp

§

impl !Sync for SubApp

§

impl Unpin for SubApp

§

impl !UnwindSafe for SubApp

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Downcast for T
where T: Any,

source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more