12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #[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::CP437> = 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::<carpet::Coord>();
- game.register::<com::Renderable>();
- game.register::<com::Motion>();
- game.register::<com::Player>();
- let map = map::Map::new();
- let player_start = map
- .rooms
- .first()
- .map(|r| r.center())
- .unwrap_or_else(|| [40, 25].into());
- let mut vs = carpet::Viewshed::create(&map.tiles, map::Cell::blocks_view);
- vs.range = Some(20);
- game.insert(map::Viewshed { vs, dirty: true });
- 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::KeyCode::*;
- 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::Visibility.run_now(world);
- systems::Draw.run_now(world);
- systems::Move.run_now(world);
- })
- }
|