#static #bevy #attach #type #statically #collection #handle

bevy_cell

静态地将 Bevy 的句柄/实体附加到类型

6 个版本

0.13.3 2024年1月1日
0.13.2 2023年12月29日
0.12.0 2023年11月12日
0.11.1 2023年8月31日

Rust 模式 中排名第 1183

Download history 80/week @ 2024-03-31

每月下载量 60

MIT/Apache

32KB

🦊 简单地将 bevy 的句柄/实体静态地附加到类型
🐑 在任何系统中获取它们,而不使用资源。
🦄 查看 type_cell 了解其他使用案例!

[dependencies]
bevy_cell = "0.13"
use bevy_cell::*;

I. 有两种有效语法
🐰 {Type} [name1] [name2] [name3]
🦝 Type: [name1] [name2] [name3];

II. [] 内的语法会改变附加的类型
🐈 实体 - 只需选择一个名称:[camera]
🦥 句柄 - 使用 | 分隔类型:[Image|cat]
🐹 原始类型 - 使用 : 分隔类型:[Image:cat]
🐒 如果未设置类型,则使用父类型:[|cat] [:cat]

III.[] 内设置集合类型
🦄 单个 - 使用 **II.** 中的语法
🐔 Vec - 在名称后添加 <>[cameras<>]
🐲 HashMap - 在名称后面添加 <KeyType>[cameras<usize>]

// Macro Examples
bycell! {
    Camera: [main] [secondary];
    AudioSource: [|hit] [|shots<>];
    Player: [main] [Scene|models<u8>];
}

IV. 设置值
🐑 在(预)启动时一次使用 Type::set_..(value)
🦌 值可以是实现其类型的任何内容!

// Setter Examples
Camera::set_main(commands.spawn(..).id());
AudioSource::set_shots([
    assets.load("shot0.ogg"),
    assets.load("shot1.ogg"),
    assets.load("shot3.ogg"),
]);
Player::set_models([
    (5, assets.load("player5.glb")),
    (7, assets.load("player7.glb")),
]);

V. 获取值
🐏 根据集合类型提供不同的获取器!

// Single Getter
Camera::main();            // Cloned
Camera::main_ref();        // Static Reference
// Vec Getters
AudioSource::shots(1);     // Cloned
AudioSource::shots_ref(1); // Static Reference
AudioSource::shots_vec();  // Static Reference to Vec
// HashMap Getters
Player::models(&5);        // Cloned
Player::models_ref(&5);    // Static Reference
Player::models_map();      // Static Reference to HashMap

VI. 可变性
🐝 你可以在名称前添加 mut 来使任何这些值可变
🦞 仅在你能够避免竞争条件时使用
🦧 一个想法是在状态改变时对某个东西进行修改!

// Macro Examples
bycell! {
    Camera: [mut main] [mut secondary];
    AudioSource: [|mut hit] [|mut shots<>];
    Player: [mut main] [Scene|mut models<u8>];
}

许可证

根据你的选择,在 Apache License, Version 2.0MIT 许可证 下许可。
除非你明确声明,否则你根据 Apache-2.0 许可证定义的任何有意提交以包含在此软件包中的贡献,都将如上双许可,没有额外的条款或条件。

依赖项

~2MB
~26K SLoC