2个版本

0.1.1 2020年1月23日
0.1.0 2020年1月23日

#1486 in 算法

MIT许可证

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