Latest commit 6f15887

本地资源

相关的官方文档:[ecs_guide]


什么是本地资源

本地资源就是“仅供当前系统使用的数据”。

Local<T> 是一个类似 ResMut<T>的系统参数,能可变地访问某个数据类型的实例(这个实例独立于实体和组件)。

资源与本地资源的区别

Res<T>ResMut<T> 指的是 T 类型的单一全局实例,所有系统共享;每个 Local<T> 参数都是一个单独的实例,专属于使用 Local<T> 的系统。

#![allow(unused)]
fn main() {
#[derive(Default)]
struct MyState;

fn my_system1(mut local: Local<MyState>) {
    // 做一些事
}

fn my_system2(mut local: Local<MyState>) {
    // 这个 locl 变量与 my_system1 的 locl 变量不同
}
}

Local<T> 类型必须实现 DefaultFromWorldLocal 会自动初始化。

系统可以拥有多个相同类型的 Local

指定初始值

Local<T> 总是用默认的数值来自动初始化。

如果需要特殊的数据,可以用闭包代替。todo。使用闭包可以将数据“移动到函数中”。

此示例显示了如何在不使用 Local<T> 的情况下初始化某些数据以配置系统:

#[derive(Default)]
struct MyConfig {
    magic: usize,
}

fn my_system(
    mut cmd: Commands,
    my_res: Res<MyStuff>,
    // 请注意,这不是有效的系统参数
    config: &MyConfig,
) {
    // TODO: 做一些事
}

fn main() {

    let config = MyConfig {
        magic: 420,
    };

    App::new()
        // 创建一个闭包来使用 config 变量
        .add_system(move |cmd: Commands, res: Res<MyStuff>| {
            // 从闭包内部调用函数
            my_system(cmd, res, &config);
        })
        .run();
}