use specs::prelude::*; #[derive(Component)] pub struct Renderable { pub glyph: carpet::CP437, pub color: carpet::Color, } #[derive(Component)] pub struct Player; impl Player { fn get_entity(world: &mut specs::World) -> Entity { let storage = (&world.read_component::(), &world.entities()); storage .join() .next() .expect("No entities tagged as Player") .1 } } #[derive(Component)] pub struct Motion { pub down: i8, pub right: i8, } impl Motion { pub fn move_player(world: &mut specs::World, down: i8, right: i8) { let player = Player::get_entity(world); world .write_component::() .insert(player, Motion { down, right }) .unwrap(); } }