#traits #resources #bevy #plugin #gamedev

bevy-trait-resource

通过特质获取资源

3个不稳定版本

0.2.1 2024年2月5日
0.2.0 2024年2月4日
0.1.1 2023年4月24日
0.1.0 2023年4月24日

#1012 in 游戏开发

每月 35 次下载

MIT 协议

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