| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 | 
							- #[macro_use]
 
- extern crate specs_derive;
 
- #[macro_use]
 
- extern crate specs_system_macro;
 
- use ggez::GameError;
 
- use specs::prelude::*;
 
- #[derive(Component)]
 
- pub struct Pos {
 
-     x: usize,
 
-     y: usize,
 
- }
 
- #[derive(Component)]
 
- pub struct Renderable {
 
-     glyph: carpet::CP437,
 
-     color: carpet::Color,
 
- }
 
- #[derive(Component)]
 
- pub struct MoveLeft;
 
- #[derive(Component)]
 
- pub struct Player;
 
- #[derive(Component)]
 
- pub struct Motion {
 
-     down: i8,
 
-     right: i8,
 
- }
 
- system_impl! {
 
-     Draw(
 
-         resource mut board: carpet::Board<carpet::CP437>,
 
-         renderable: Renderable,
 
-         pos: Pos,
 
-     ) {
 
-         board.clear();
 
-         for (p, r) in (&pos, &renderable).join() {
 
-             board.set_with_color([p.x, p.y], r.glyph, r.color);
 
-         }
 
-     }
 
- }
 
- system! {
 
-     Leftward (
 
-         _left: MoveLeft,
 
-         mut pos: Pos,
 
-     ) {
 
-         if pos.x == 0 {
 
-             pos.x = 79;
 
-         } else {
 
-             pos.x -= 1;
 
-         }
 
-     }
 
- }
 
- system! {
 
-     Move (
 
-         mut motion: Motion,
 
-         mut pos: Pos,
 
-     ) {
 
-         pos.x = (pos.x as i8 + motion.right) as usize;
 
-         pos.y = (pos.y as i8 + motion.down) as usize;
 
-     } finally {
 
-         motion.clear();
 
-     }
 
- }
 
- fn main() -> Result<(), GameError> {
 
-     let mut 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.push("resources");
 
-             path
 
-         })
 
-         .tileset("/terminal8x8.jpg", [8, 8])
 
-         .map_size(80, 50)
 
-         .build()?;
 
-     game.register::<Pos>();
 
-     game.register::<Renderable>();
 
-     game.register::<MoveLeft>();
 
-     game.register::<Motion>();
 
-     game.register::<Player>();
 
-     game.world.print([1, 1], "Hello, world!");
 
-     game.create_entity()
 
-         .with(Pos { x: 40, y: 25 })
 
-         .with(Player)
 
-         .with(Renderable {
 
-             glyph: carpet::CP437::from_char('A'),
 
-             color: carpet::Color::Blue,
 
-         })
 
-         .build();
 
-     for i in 0..10 {
 
-         game.create_entity()
 
-             .with(Pos { x: i * 7, y: 20 })
 
-             .with(Renderable {
 
-                 glyph: carpet::CP437::from_char('X'),
 
-                 color: carpet::Color::Red,
 
-             })
 
-             .with(MoveLeft)
 
-             .build();
 
-     }
 
-     game.on_key((carpet::VirtualKeyCode::W, carpet::KeyMods::NONE), |world| {
 
-         let player = (&world.read_component::<Player>(), &world.entities()).join().next().unwrap().1;
 
-         world.write_component::<Motion>().insert(player, Motion { down: -1, right: 0 }).unwrap();
 
-     });
 
-     game.on_key((carpet::VirtualKeyCode::A, carpet::KeyMods::NONE), |world| {
 
-         let player = (&world.read_component::<Player>(), &world.entities()).join().next().unwrap().1;
 
-         world.write_component::<Motion>().insert(player, Motion { down: 0, right: -1 }).unwrap();
 
-     });
 
-     game.on_key((carpet::VirtualKeyCode::S, carpet::KeyMods::NONE), |world| {
 
-         let player = (&world.read_component::<Player>(), &world.entities()).join().next().unwrap().1;
 
-         world.write_component::<Motion>().insert(player, Motion { down: 1, right: 0 }).unwrap();
 
-     });
 
-     game.on_key((carpet::VirtualKeyCode::D, carpet::KeyMods::NONE), |world| {
 
-         let player = (&world.read_component::<Player>(), &world.entities()).join().next().unwrap().1;
 
-         world.write_component::<Motion>().insert(player, Motion { down: 0, right: 1 }).unwrap();
 
-     });
 
-     game.run_with_systems(|world| {
 
-         Draw.run_now(&world);
 
-         Leftward.run_now(&world);
 
-         Move.run_now(&world);
 
-     })
 
- }
 
 
  |