#[macro_use] extern crate specs_derive; #[macro_use] extern crate specs_system_macro; mod components; mod map; mod systems; use ggez::GameError; use specs::prelude::{Builder, RunNow}; use components as com; fn main() -> Result<(), GameError> { let mut game: carpet::Game = carpet::GameBuilder::new() .name("game") .author("me") .resource_path({ let base = std::env::var("CARGO_MANIFEST_DIR").unwrap(); let mut path = std::path::PathBuf::from(base); path.pop(); path.push("resources"); path }) .tileset("/haberdash.gif", [12, 12]) .map_size(80, 50) .build()?; game.register::(); game.register::(); game.register::(); game.register::(); let map = map::Map::new(); let player_start = map .rooms .first() .map(|r| r.center()) .unwrap_or([40, 25].into()); game.insert(map); game.create_entity() .with(player_start) .with(com::Player) .with(com::Renderable { glyph: carpet::CP437::from_char('@'), color: carpet::Color::Blue, }) .build(); { // set up all the keybindings use carpet::VirtualKeyCode::*; let none = carpet::KeyMods::NONE; game.on_key((W, none), |world| com::Motion::move_player(world, -1, 0)); game.on_key((A, none), |world| com::Motion::move_player(world, 0, -1)); game.on_key((S, none), |world| com::Motion::move_player(world, 1, 0)); game.on_key((D, none), |world| com::Motion::move_player(world, 0, 1)); } game.run_with_systems(|world| { systems::Draw.run_now(&world); systems::Move.run_now(&world); }) }