main.rs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. use rltk::{GameState, Rltk, RGB};
  2. use specs::prelude::*;
  3. mod components;
  4. pub use components::*;
  5. mod map;
  6. pub use map::*;
  7. mod player;
  8. use player::*;
  9. mod rect;
  10. pub use rect::Rect;
  11. // ***** //
  12. // STATE //
  13. pub struct State {
  14. pub ecs: World
  15. }
  16. impl GameState for State {
  17. fn tick(&mut self, ctx : &mut Rltk) {
  18. ctx.cls();
  19. player_input(self, ctx);
  20. let map = self.ecs.fetch::<Vec<map::TileType>>();
  21. draw_map(&map, ctx);
  22. let positions = self.ecs.read_storage::<Position>();
  23. let renderables = self.ecs.read_storage::<Renderable>();
  24. for (pos, render) in (&positions, &renderables).join() {
  25. ctx.set(pos.x, pos.y, render.fg, render.bg, render.glyph);
  26. }
  27. }
  28. }
  29. // ********
  30. // MAIN
  31. fn main() -> rltk::BError {
  32. use rltk::RltkBuilder;
  33. let context = RltkBuilder::simple80x50()
  34. .with_title("Roguelike Tutorial")
  35. .build()?;
  36. let mut gs = State{
  37. ecs: World::new()
  38. };
  39. gs.ecs.register::<Position>();
  40. gs.ecs.register::<Renderable>();
  41. gs.ecs.register::<Player>();
  42. gs.ecs
  43. .create_entity()
  44. .with(Position { x: 40, y: 25 })
  45. .with(Renderable {
  46. glyph: rltk::to_cp437('@'),
  47. fg: RGB::named(rltk::YELLOW),
  48. bg: RGB::named(rltk::BLACK),
  49. })
  50. .with(Player{})
  51. .build();
  52. gs.ecs.insert(new_map_rooms_and_corridors());
  53. rltk::main_loop(context, gs)
  54. }