port event_update to system function
This commit is contained in:
parent
37b4dff172
commit
e5a99fde4f
@ -1,10 +1,10 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
plugin::{load_plugin, AppPlugin},
|
plugin::{load_plugin, AppPlugin},
|
||||||
schedule_plan::SchedulePlan,
|
schedule_plan::SchedulePlan,
|
||||||
stage, App, AppExit, Events, System, FromResources,
|
stage, App, AppExit, Events, FromResources, System,
|
||||||
};
|
};
|
||||||
|
|
||||||
use legion::prelude::{Resources, Universe, World};
|
use legion::prelude::{IntoSystem, Resources, Universe, World};
|
||||||
|
|
||||||
static APP_MISSING_MESSAGE: &str = "This AppBuilder no longer has an App. Check to see if you already called run(). A call to app_builder.run() consumes the AppBuilder's App.";
|
static APP_MISSING_MESSAGE: &str = "This AppBuilder no longer has an App. Check to see if you already called run(). A call to app_builder.run() consumes the AppBuilder's App.";
|
||||||
|
|
||||||
@ -196,7 +196,11 @@ impl AppBuilder {
|
|||||||
T: Send + Sync + 'static,
|
T: Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
self.add_resource(Events::<T>::default())
|
self.add_resource(Events::<T>::default())
|
||||||
.add_system_to_stage(stage::EVENT_UPDATE, Events::<T>::build_update_system())
|
.add_system_to_stage(
|
||||||
|
stage::EVENT_UPDATE,
|
||||||
|
Events::<T>::update_system
|
||||||
|
.system_id(format!("events_update::{}", std::any::type_name::<T>()).into()),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_resource<T>(&mut self, resource: T) -> &mut Self
|
pub fn add_resource<T>(&mut self, resource: T) -> &mut Self
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use legion::prelude::{Resources, Schedulable, SystemBuilder};
|
use legion::prelude::{Resources, ResourceMut};
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
struct EventInstance<T> {
|
struct EventInstance<T> {
|
||||||
@ -12,8 +12,8 @@ enum State {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// An event collection that represents the events that occurred within the last two [Events::update] calls. Events can be cheaply read using
|
/// An event collection that represents the events that occurred within the last two [Events::update] calls. Events can be cheaply read using
|
||||||
/// an [EventReader]. This collection is meant to be paired with a system that calls [Events::update] exactly once per update/frame. [Events::build_update_system]
|
/// an [EventReader]. This collection is meant to be paired with a system that calls [Events::update] exactly once per update/frame. [Events::update_system]
|
||||||
/// will produce a system that does this. [EventReader]s are expected to read events from this collection at least once per update/frame. If events are not handled
|
/// is a system that does this. [EventReader]s are expected to read events from this collection at least once per update/frame. If events are not handled
|
||||||
/// within one frame/update, they will be dropped.
|
/// within one frame/update, they will be dropped.
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
@ -219,14 +219,13 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Builds a system that calls [Events::update] once per frame.
|
/// A system that calls [Events::update] once per frame.
|
||||||
pub fn build_update_system() -> Box<dyn Schedulable> {
|
pub fn update_system(mut events: ResourceMut<Self>) {
|
||||||
SystemBuilder::new(format!("events_update::{}", std::any::type_name::<T>()))
|
events.update();
|
||||||
.write_resource::<Self>()
|
|
||||||
.build(|_, _, events, _| events.update())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub trait GetEventReader {
|
pub trait GetEventReader {
|
||||||
/// returns an [EventReader] of the given type
|
/// returns an [EventReader] of the given type
|
||||||
fn get_event_reader<T>(&self) -> EventReader<T>
|
fn get_event_reader<T>(&self) -> EventReader<T>
|
||||||
|
Loading…
Reference in New Issue
Block a user