[−][src]Trait oxygengine_core::ecs::BatchController
The BatchController is the additional trait that a normal System must
implement in order to be used as a system controlling the execution of a batch.
Note that the System must also implement Send because the Dispatcher
is by default un-send.
The safety of implementing Send is ensured by BatchAccessor which keeps
tracks of all used resources and thus the System can be safely executed in
with multiple threads.
Associated Types
type BatchSystemData: SystemData<'a>
This associated type has to contain all resources batch controller uses directly.
These have to be specified here, instead of SystemData (as
a normal System does) because the sub Systems can use the same Resources
of the BatchController.
This make necessary to drop the references to the
fetched Resources in the batch controller before dispatching
the sub Systems.
Now is easy to understand that specify the BatchController
Resource in the SystemData doesn't allow to drop the reference
before the sub dispatching; resulting in Panic.
So this mechanism allows you to fetch safely the specified Resource
in the BatchController.
The example "examples/batch_dispatching.rs" show how to use it.
Note that it's not required to specify the sub systems resources here because they are handled automatically.
Required methods
unsafe fn create(
accessor: BatchAccessor,
dispatcher: Dispatcher<'a, 'b>
) -> Self
accessor: BatchAccessor,
dispatcher: Dispatcher<'a, 'b>
) -> Self
Creates an instance of the BatchControllerSystem.
Usually this function is called internally by the DispatcherBuilder
which creates the BatchAccessor correctly.
The Dispatcher is constructed by the user elsewhere and passed to the
DispatcherBuilder through the functions with_batch or add_batch and
passed as argument to this function.
Safety
This function is unsafe because an implementor of BatchController is expected
to uphold quarantees of Send only when it's created with
correctly constructed BatchAccessor.
BatchAccessor is meant for tracking which resourced are being used by the controller.
Implementors
impl<'a, 'b> BatchController<'a, 'b> for DefaultBatchControllerSystem<'a, 'b>[src]
type BatchSystemData = ()
unsafe fn create(
accessor: BatchAccessor,
dispatcher: Dispatcher<'a, 'b>
) -> DefaultBatchControllerSystem<'a, 'b>[src]
accessor: BatchAccessor,
dispatcher: Dispatcher<'a, 'b>
) -> DefaultBatchControllerSystem<'a, 'b>