12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- use rltk::{Console, GameState, Rltk, RGB};
- use specs::prelude::*;
- #[macro_use]
- extern crate specs_derive;
- mod components;
- pub use components::*;
- mod map;
- pub use map::*;
- mod player;
- use player::*;
- mod rect;
- pub use rect::Rect;
- rltk::add_wasm_support!();
- pub struct State {
- pub ecs: World
- }
- impl State {
- fn run_systems(&mut self) {
- self.ecs.maintain();
- }
- }
- impl GameState for State {
- fn tick(&mut self, ctx : &mut Rltk) {
- ctx.cls();
- player_input(self, ctx);
- self.run_systems();
- let map = self.ecs.fetch::<Vec<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);
- }
- }
- }
- fn main() {
- let context = Rltk::init_simple8x8(80, 50, "Hello Rust World", "resources");
- let mut gs = State {
- ecs: World::new()
- };
- gs.ecs.register::<Position>();
- gs.ecs.register::<Renderable>();
- gs.ecs.register::<Player>();
- let (rooms, map) = new_map_rooms_and_corridors();
- gs.ecs.insert(map);
- let (player_x, player_y) = rooms[0].center();
- gs.ecs
- .create_entity()
- .with(Position { x: player_x, y: player_y })
- .with(Renderable {
- glyph: rltk::to_cp437('@'),
- fg: RGB::named(rltk::YELLOW),
- bg: RGB::named(rltk::BLACK),
- })
- .with(Player{})
- .build();
- rltk::main_loop(context, gs);
- }
|