2个版本
0.1.1 | 2020年1月23日 |
---|---|
0.1.0 | 2020年1月23日 |
#1486 in 算法
40KB
706 行
MEcs
专注于迭代性能的ecs库
示例
以下是如何使用ecs库的简单示例
use mecs::{World};
/// Position component
#[derive(PartialEq, Clone, Copy, Debug)]
struct Position(pub f32, pub f32);
/// Velocity component
#[derive(PartialEq, Clone, Copy, Debug)]
struct Velocity(pub f32, pub f32);
mecs::impl_enum_storage! {
/// All of our components
enum Components {
Position(Position),
Velocity(Velocity),
}
}
fn main()
{
let mut world: World<Components> = World::new();
world.add( mecs::entity![
Components::Position( Position(1.0, 10.0) ),
Components::Velocity( Velocity(0.1, -1.0) ),
]);
let pred_id = world.add_pred(|entity| entity.has::<Position>() && entity.has::<Velocity>());
for i in 0..10 {
for entity in world.iter_pred_mut(pred_id).unwrap()
{
let vel: Velocity = *entity.get ().unwrap();
let pos: &mut Position = entity.get_mut().unwrap();
pos.0 += vel.0;
pos.1 += vel.1;
println!("{:?}", pos);
}
}
}
将打印
Position { 1.1, 9.0 }
Position { 1.2, 8.0 }
Position { 1.3, 7.0 }
...
Position { 2.0, 0.0 }
Nightly
此库目前仅使用nightly通道上可用的功能,尤其是Fn
特质家族。将来,一旦这些特性稳定,库将能够在稳定版本中使用。
依赖项
~170KB