|  | @@ -34,6 +34,8 @@ pub mod random_table;
 | 
	
		
			
				|  |  |  pub mod particle_system;
 | 
	
		
			
				|  |  |  pub mod hunger_system;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +rltk::add_wasm_support!();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  #[derive(PartialEq, Copy, Clone)]
 | 
	
		
			
				|  |  |  pub enum RunState { AwaitingInput, 
 | 
	
		
			
				|  |  |      PreRun, 
 | 
	
	
		
			
				|  | @@ -51,8 +53,36 @@ pub enum RunState { AwaitingInput,
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  pub struct State {
 | 
	
		
			
				|  |  | -    pub ecs: World,
 | 
	
		
			
				|  |  | -    pub systems: Dispatcher<'static, 'static>
 | 
	
		
			
				|  |  | +    pub ecs: World
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +impl State {
 | 
	
		
			
				|  |  | +    fn run_systems(&mut self) {
 | 
	
		
			
				|  |  | +        let mut mapindex = MapIndexingSystem{};
 | 
	
		
			
				|  |  | +        mapindex.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut vis = VisibilitySystem{};
 | 
	
		
			
				|  |  | +        vis.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut mob = MonsterAI{};
 | 
	
		
			
				|  |  | +        mob.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut melee = MeleeCombatSystem{};
 | 
	
		
			
				|  |  | +        melee.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut damage = DamageSystem{};
 | 
	
		
			
				|  |  | +        damage.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut pickup = ItemCollectionSystem{};
 | 
	
		
			
				|  |  | +        pickup.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut itemuse = ItemUseSystem{};
 | 
	
		
			
				|  |  | +        itemuse.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut drop_items = ItemDropSystem{};
 | 
	
		
			
				|  |  | +        drop_items.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut item_remove = ItemRemoveSystem{};
 | 
	
		
			
				|  |  | +        item_remove.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut hunger = hunger_system::HungerSystem{};
 | 
	
		
			
				|  |  | +        hunger.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +        let mut particles = particle_system::ParticleSpawnSystem{};
 | 
	
		
			
				|  |  | +        particles.run_now(&self.ecs);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        self.ecs.maintain();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  impl GameState for State {
 | 
	
	
		
			
				|  | @@ -87,7 +117,7 @@ impl GameState for State {
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          match newrunstate {
 | 
	
		
			
				|  |  |              RunState::PreRun => {
 | 
	
		
			
				|  |  | -                self.systems.dispatch(&self.ecs);
 | 
	
		
			
				|  |  | +                self.run_systems();
 | 
	
		
			
				|  |  |                  self.ecs.maintain();
 | 
	
		
			
				|  |  |                  newrunstate = RunState::AwaitingInput;
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -95,7 +125,7 @@ impl GameState for State {
 | 
	
		
			
				|  |  |                  newrunstate = player_input(self, ctx);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              RunState::PlayerTurn => {
 | 
	
		
			
				|  |  | -                self.systems.dispatch(&self.ecs);
 | 
	
		
			
				|  |  | +                self.run_systems();
 | 
	
		
			
				|  |  |                  self.ecs.maintain();
 | 
	
		
			
				|  |  |                  match *self.ecs.fetch::<RunState>() {
 | 
	
		
			
				|  |  |                      RunState::MagicMapReveal{ .. } => newrunstate = RunState::MagicMapReveal{ row: 0 },
 | 
	
	
		
			
				|  | @@ -103,7 +133,7 @@ impl GameState for State {
 | 
	
		
			
				|  |  |                  }                
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              RunState::MonsterTurn => {
 | 
	
		
			
				|  |  | -                self.systems.dispatch(&self.ecs);
 | 
	
		
			
				|  |  | +                self.run_systems();
 | 
	
		
			
				|  |  |                  self.ecs.maintain();
 | 
	
		
			
				|  |  |                  newrunstate = RunState::AwaitingInput;
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -360,23 +390,10 @@ impl State {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  fn main() {
 | 
	
		
			
				|  |  | -    let mut context = Rltk::init_simple8x8(80, 50, "Hello Rust World", "../resources");
 | 
	
		
			
				|  |  | +    let mut context = Rltk::init_simple8x8(80, 50, "Hello Rust World", "resources");
 | 
	
		
			
				|  |  |      context.with_post_scanlines(true);
 | 
	
		
			
				|  |  |      let mut gs = State {
 | 
	
		
			
				|  |  | -        ecs: World::new(),
 | 
	
		
			
				|  |  | -        systems : DispatcherBuilder::new()
 | 
	
		
			
				|  |  | -            .with(MapIndexingSystem{}, "map_indexing_system", &[])
 | 
	
		
			
				|  |  | -            .with(VisibilitySystem{}, "visibility_system", &[])
 | 
	
		
			
				|  |  | -            .with(MonsterAI{}, "monster_ai", &["visibility_system", "map_indexing_system"])
 | 
	
		
			
				|  |  | -            .with(MeleeCombatSystem{}, "melee_combat", &["monster_ai"])
 | 
	
		
			
				|  |  | -            .with(DamageSystem{}, "damage", &["melee_combat"])
 | 
	
		
			
				|  |  | -            .with(ItemCollectionSystem{}, "pickup", &["melee_combat"])
 | 
	
		
			
				|  |  | -            .with(ItemUseSystem{}, "potions", &["melee_combat"])
 | 
	
		
			
				|  |  | -            .with(ItemDropSystem{}, "drop_items", &["melee_combat"])
 | 
	
		
			
				|  |  | -            .with(ItemRemoveSystem{}, "remove_items", &["melee_combat"])
 | 
	
		
			
				|  |  | -            .with(hunger_system::HungerSystem{}, "hunger", &["melee_combat", "potions"])
 | 
	
		
			
				|  |  | -            .with(particle_system::ParticleSpawnSystem{}, "spawn_particles", &["potions", "melee_combat"])
 | 
	
		
			
				|  |  | -            .build(),
 | 
	
		
			
				|  |  | +        ecs: World::new()
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |      gs.ecs.register::<Position>();
 | 
	
		
			
				|  |  |      gs.ecs.register::<Renderable>();
 |