3个不稳定版本
0.2.1 | 2024年2月5日 |
---|---|
0.2.0 |
|
0.1.1 | 2023年4月24日 |
0.1.0 | 2023年4月24日 |
#1012 in 游戏开发
每月 35 次下载
25KB
439 代码行
bevy-trait-resource
一种获取实现特定特质资源的途径。
Bevy版本 | Crate版本 |
---|---|
0.12 | 0.2 |
0.11 | --- |
0.10 | 0.1 |
注意
此crate非常实验性。
代码基于bevy-trait-query中的先前工作进行衍生和高度依赖。
使用
use bevy::prelude::*;
use bevy_trait_resource::{trait_resource, TraitResourceExt};
#[trait_resource]
pub trait IncrementTrait {
fn value(&self) -> i32;
fn increment(&mut self);
}
#[derive(Resource, Default)]
struct NumberValueResource {
value: i32,
}
impl IncrementTrait for NumberValueResource {
// Trait implementation...
}
pub fn increment_value_system(world: &mut World) {
for res_opt in world.get_resources_trait_mut::<dyn IncrementTrait>() {
if let Some(res) = res_opt {
res.increment();
}
}
}
struct SomePlugin;
impl Plugin for SomePlugin {
fn build(&self, app: &mut App) {
app.init_resource_as::<dyn IncrementTrait, NumberValueResource>();
app.add_systems(Update, increment_value_system);
}
}
您还可以将资源注册到多个特质。
impl Plugin for SomePlugin {
fn build(&self, app: &mut App) {
app.init_resource::<NumberValueResource>();
app.register_resource_as::<dyn IncrementTrait, NumberValueResource>()
.register_resource_as::<dyn SomeOtherTrait, NumberValueResource>();
}
}
注销。
app.unregister_resource_from_trait::<dyn IncrementTrait, NumberValueResource>();
依赖关系
~23MB
~413K SLoC