2022-02-03 10:17:02 -05:00
|
|
|
use ::specs::prelude::*;
|
|
|
|
|
|
|
|
use super::UnifiedDispatcher;
|
|
|
|
|
|
|
|
macro_rules! construct_dispatcher {
|
|
|
|
(
|
|
|
|
$(
|
|
|
|
(
|
|
|
|
$type:ident,
|
|
|
|
$name:expr,
|
|
|
|
$deps:expr
|
|
|
|
)
|
|
|
|
),*
|
|
|
|
) => {
|
|
|
|
fn new_dispatch() -> Box<dyn UnifiedDispatcher + 'static> {
|
|
|
|
use ::specs::DispatcherBuilder;
|
|
|
|
|
|
|
|
let dispatcher = DispatcherBuilder::new()
|
|
|
|
$(
|
|
|
|
.with($type{}, $name, $deps)
|
|
|
|
)*
|
|
|
|
.build();
|
|
|
|
|
|
|
|
let dispatch = MultiThreadedDispatcher {
|
2022-02-03 11:46:29 -05:00
|
|
|
dispatcher
|
2022-02-03 10:17:02 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
return Box::new(dispatch);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
pub struct MultiThreadedDispatcher {
|
|
|
|
pub dispatcher: ::specs::Dispatcher<'static, 'static>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'a> UnifiedDispatcher for MultiThreadedDispatcher {
|
2022-02-03 11:46:29 -05:00
|
|
|
fn run_now(&mut self, ecs: &mut World) {
|
|
|
|
self.dispatcher.dispatch(ecs);
|
|
|
|
crate::effects::run_effects_queue(ecs);
|
2022-02-03 10:17:02 -05:00
|
|
|
}
|
|
|
|
}
|