add event example

This commit is contained in:
Carter Anderson 2020-03-29 23:51:13 -07:00
parent 5eb789ff77
commit 13da707aee
3 changed files with 61 additions and 7 deletions

43
examples/event.rs Normal file
View File

@ -0,0 +1,43 @@
use bevy::prelude::*;
struct MyEvent {
pub message: String,
}
fn main() {
App::build()
.add_defaults()
.add_event::<MyEvent>()
.add_system(event_trigger_system())
.build_system(event_listener_system)
.run();
}
fn event_trigger_system() -> Box<dyn Schedulable> {
let mut elapsed = 0.0;
SystemBuilder::new("EventTrigger")
.read_resource::<Time>()
.write_resource::<Event<MyEvent>>()
.build(move |_, _, (time, my_event), _| {
elapsed += time.delta_seconds;
if elapsed > 1.0 {
my_event.raise(MyEvent {
message: "Hello World".to_string(),
});
elapsed = 0.0;
}
})
}
fn event_listener_system(resources: &mut Resources) -> Box<dyn Schedulable> {
let my_event = resources.get::<Event<MyEvent>>().unwrap();
let mut my_event_handle = my_event.get_handle();
SystemBuilder::new("EventListener")
.read_resource::<Event<MyEvent>>()
.build(move |_, _, my_events, _| {
for my_event in my_events.iter(&mut my_event_handle) {
println!("{}", my_event.message);
}
})
}

View File

@ -125,6 +125,11 @@ impl AppBuilder {
self self
} }
pub fn build_system<F>(mut self, build: F) -> Self where F: Fn(&mut Resources) -> Box<dyn Schedulable>{
let system = build(&mut self.resources);
self.add_system(system)
}
pub fn add_system_to_stage(mut self, stage_name: &str, system: Box<dyn Schedulable>) -> Self { pub fn add_system_to_stage(mut self, stage_name: &str, system: Box<dyn Schedulable>) -> Self {
if let None = self.system_stages.get(stage_name) { if let None = self.system_stages.get(stage_name) {
self.system_stages self.system_stages

View File

@ -1,11 +1,11 @@
pub use crate::{ pub use crate::{
app::{App, AppBuilder, plugin::AppPlugin}, app::{App, AppBuilder, plugin::AppPlugin},
asset::{Asset, AssetStorage, Handle}, asset::{Asset, AssetStorage, Handle},
core::{Time, Window}, core::{Time, Window, Event, EventHandle},
ecs, ecs,
ecs::{ ecs::{
default_archetypes::*, CommandBufferBuilderSource, EntityArchetype, WorldBuilder, default_archetypes::*, CommandBufferBuilderSource, EntityArchetype, WorldBuilder,
WorldBuilderSource, WorldBuilderSource
}, },
render::{ render::{
mesh::{Mesh, MeshType}, mesh::{Mesh, MeshType},
@ -23,11 +23,17 @@ pub use bevy_derive::*;
pub use bevy_transform::prelude::*; pub use bevy_transform::prelude::*;
pub use glam as math; pub use glam as math;
pub use legion::{ pub use legion::{
prelude::*, command::CommandBuffer,
prelude::Event as LegionEvent, entity::Entity,
event::Event as LegionEvent,
filter::filter_fns::*,
query::{IntoQuery, Query, Read, Tagged, TryRead, TryWrite, Write},
world::{Universe, World},
systems::{ systems::{
schedule::{Builder, Schedulable}, bit_set::BitSet,
SubWorld, SystemBuilder, resource::{ResourceSet, Resources},
schedule::{Executor, Runnable, Schedulable, Schedule},
System, SystemBuilder, SubWorld
}, },
}; };
pub use math::{Mat3, Mat4, Quat, Vec2, Vec3, Vec4}; pub use math::{Mat3, Mat4, Quat, Vec2, Vec3, Vec4};