components.rs 806 B

12345678910111213141516171819202122232425262728293031323334353637
  1. use specs::prelude::*;
  2. #[derive(Component)]
  3. pub struct Renderable {
  4. pub glyph: carpet::CP437,
  5. pub color: carpet::Color,
  6. }
  7. #[derive(Component)]
  8. pub struct Player;
  9. impl Player {
  10. fn get_entity(world: &mut specs::World) -> Entity {
  11. let storage = (&world.read_component::<Player>(), &world.entities());
  12. storage
  13. .join()
  14. .next()
  15. .expect("No entities tagged as Player")
  16. .1
  17. }
  18. }
  19. #[derive(Component)]
  20. pub struct Motion {
  21. pub down: i8,
  22. pub right: i8,
  23. }
  24. impl Motion {
  25. pub fn move_player(world: &mut specs::World, down: i8, right: i8) {
  26. let player = Player::get_entity(world);
  27. world
  28. .write_component::<Motion>()
  29. .insert(player, Motion { down, right })
  30. .unwrap();
  31. }
  32. }