Latest commit 73605f4

创建、激活并接收事件。

//! 创建了一个新事件
//! 每秒触发一次事件,收到事件时打印消息

use bevy::prelude::*;

fn main() {
    let mut app = App::new();
    app.add_plugins(DefaultPlugins);
    app.add_event::<MyEvent>();
    app.add_event::<PlaySound>();
    app.init_resource::<EventTriggerState>();
    app.add_system(事件触发器);
    app.add_system(事件侦听器);
    app.add_system(音响);
    app.run();
}

struct MyEvent {
    pub message: String,
}

#[derive(Default)]
struct PlaySound;

#[derive(Resource)]
struct EventTriggerState {
    event_timer: Timer,
}

impl Default for EventTriggerState {
    fn default() -> Self {
        EventTriggerState {
            event_timer: Timer::from_seconds(1.0, TimerMode::Repeating),
        }
    }
}

// 每秒发送一次 MyEvent 和 PlaySound
fn 事件触发器(
    time: Res<Time>,
    mut event_trigger_state: ResMut<EventTriggerState>,
    mut my_event: EventWriter<MyEvent>,
    mut play_sound: EventWriter<PlaySound>,
) {
    // 计时器开始计时
    let delta = time.delta();
    event_trigger_state.event_timer.tick(delta);
    // 计时结束后发送事件
    if event_trigger_state.event_timer.finished() {
        my_event.send(MyEvent {
            message: "MyEvent just happened!".to_string(),
        });
        play_sound.send_default();
    }
}

// 接收到事件时打印消息
fn 事件侦听器(mut events: EventReader<MyEvent>) {
    for my_event in events.iter() {
        info!("{}", my_event.message);
    }
}

fn 音响(mut events: EventReader<PlaySound>) {
    for _ in events.iter() {
        info!("正在播放声音");
    }
}