1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- use rltk::{GameState, Rltk, RGB};
- use specs::prelude::*;
- mod components;
- pub use components::*;
- mod map;
- pub use map::*;
- mod player;
- use player::*;
- mod rect;
- pub use rect::Rect;
- // ***** //
- // STATE //
- pub struct State {
- pub ecs: World
- }
- impl GameState for State {
- fn tick(&mut self, ctx : &mut Rltk) {
- ctx.cls();
-
- player_input(self, ctx);
- let map = self.ecs.fetch::<Vec<map::TileType>>();
- draw_map(&map, ctx);
- let positions = self.ecs.read_storage::<Position>();
- let renderables = self.ecs.read_storage::<Renderable>();
- for (pos, render) in (&positions, &renderables).join() {
- ctx.set(pos.x, pos.y, render.fg, render.bg, render.glyph);
- }
-
- }
- }
- // ********
- // MAIN
- fn main() -> rltk::BError {
- use rltk::RltkBuilder;
- let context = RltkBuilder::simple80x50()
- .with_title("Roguelike Tutorial")
- .build()?;
- let mut gs = State{
- ecs: World::new()
- };
- gs.ecs.register::<Position>();
- gs.ecs.register::<Renderable>();
- gs.ecs.register::<Player>();
- gs.ecs
- .create_entity()
- .with(Position { x: 40, y: 25 })
- .with(Renderable {
- glyph: rltk::to_cp437('@'),
- fg: RGB::named(rltk::YELLOW),
- bg: RGB::named(rltk::BLACK),
- })
- .with(Player{})
- .build();
- gs.ecs.insert(new_map_rooms_and_corridors());
- rltk::main_loop(context, gs)
- }
|