Latest commit e6bce74

use bevy::ecs::system::SystemParam;
use bevy::prelude::*;

/// 说明如何使用[`SystemParam`]创建自定义系统参数
/// 本例创建了一个`[SystemParam]`结构,用来计算玩家数量
fn main() {
    App::new()
        .insert_resource(PlayerCount(0))
        .add_startup_system(生成玩家)
        .add_system(计算玩家数量)
        .run();
}

#[derive(Component)]
struct Player;
#[derive(Component)]
struct PlayerCount(usize);

/// [`SystemParam`]结构可以包含任何类型,这些类型也可以包含在一个系统函数签名中

/// 在这个例子中,SystemParam包括一个查询和一个可变的资源
#[derive(SystemParam)]
struct PlayerCounter<'w, 's> {
    players: Query<'w, 's, &'static Player>,
    count: ResMut<'w, PlayerCount>,
}

impl<'w, 's> PlayerCounter<'w, 's> {
    fn count(&mut self) {
        self.count.0 = self.players.iter().len();
    }
}

/// 生成3个player
fn 生成玩家(mut commands: Commands) {
    commands.spawn().insert(Player);
    commands.spawn().insert(Player);
    commands.spawn().insert(Player);
}

/// [`SystemParam`]可以直接在系统参数中使用
fn 计算玩家数量(mut counter: PlayerCounter) {
    counter.count();

    println!("{}个玩家在游戏中", counter.count.0);
}