#component #group #specs #ecs #gamedev

component_group

定义了ComponentGroup特质,用于管理一组specs::Component实例,并在specs::Worlds之间移动它们

3个稳定版本

3.0.0 2020年12月24日
2.0.0 2019年12月24日
1.0.0 2018年12月23日

游戏开发中排名第686

每月下载量32

MPL-2.0许可协议保护

37KB

component_group

Crates.io Docs.rs Build Status Say Thanks!

此crate定义了ComponentGroup特质。此特质用于简化管理一组specs::Component实例。这在您有几个经常一起创建、读取和更新的组件时非常有用。您可以使用此特质轻松地在specs::World实例之间移动整个组件组。

此特质通过将所有逻辑集中在同一位置,而不是让您在应用程序中同步重复代码,从而减少了您每次向组中添加组件时需要做出的更改。

如果组中的每个组件都实现了Clone特质,则可以自动推导出ComponentGroup特质。这消除了您可能需要编写的任何样板代码。

有关创建此特质的动机和使用方法,请参阅文档

// Don't forget to add the component_group crate to your Cargo.toml file!
use component_group::ComponentGroup;

use specs::{World, Component, VecStorage, HashMapStorage};
use specs_derive::Component;

// These components are just for demonstration purposes. You should swap them
// out for your own. Components need to be Clone to use the automatic derive.

#[derive(Debug, Clone, Component)]
#[storage(VecStorage)]
pub struct Position {x: i32, y: i32}

#[derive(Debug, Clone, Component)]
#[storage(VecStorage)]
pub struct Velocity {x: i32, y: i32}

#[derive(Debug, Clone, Component)]
#[storage(VecStorage)]
pub struct Health(u32);

#[derive(Debug, Clone, Component)]
#[storage(HashMapStorage)]
pub struct Animation {frame: usize}

// This is all of the code you need to write to define the group and its operations!
#[derive(ComponentGroup)]
struct PlayerComponents {
    position: Position,
    velocity: Velocity,
    health: Health,
    // This optional component is allowed to not be present
    animation: Option<Animation>,
}

// Now you can easily add all of these components to an entity, load them all
// from the world, or even update them all at once!

依赖项

~4.5MB
~88K SLoC