|
@@ -34,6 +34,8 @@ pub mod random_table;
|
|
pub mod particle_system;
|
|
pub mod particle_system;
|
|
pub mod hunger_system;
|
|
pub mod hunger_system;
|
|
|
|
|
|
|
|
+rltk::add_wasm_support!();
|
|
|
|
+
|
|
#[derive(PartialEq, Copy, Clone)]
|
|
#[derive(PartialEq, Copy, Clone)]
|
|
pub enum RunState { AwaitingInput,
|
|
pub enum RunState { AwaitingInput,
|
|
PreRun,
|
|
PreRun,
|
|
@@ -51,8 +53,36 @@ pub enum RunState { AwaitingInput,
|
|
}
|
|
}
|
|
|
|
|
|
pub struct State {
|
|
pub struct State {
|
|
- pub ecs: World,
|
|
+ pub ecs: World
|
|
- pub systems: Dispatcher<'static, 'static>
|
|
+}
|
|
|
|
+
|
|
|
|
+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 {
|
|
impl GameState for State {
|
|
@@ -87,7 +117,7 @@ impl GameState for State {
|
|
|
|
|
|
match newrunstate {
|
|
match newrunstate {
|
|
RunState::PreRun => {
|
|
RunState::PreRun => {
|
|
- self.systems.dispatch(&self.ecs);
|
|
+ self.run_systems();
|
|
self.ecs.maintain();
|
|
self.ecs.maintain();
|
|
newrunstate = RunState::AwaitingInput;
|
|
newrunstate = RunState::AwaitingInput;
|
|
}
|
|
}
|
|
@@ -95,7 +125,7 @@ impl GameState for State {
|
|
newrunstate = player_input(self, ctx);
|
|
newrunstate = player_input(self, ctx);
|
|
}
|
|
}
|
|
RunState::PlayerTurn => {
|
|
RunState::PlayerTurn => {
|
|
- self.systems.dispatch(&self.ecs);
|
|
+ self.run_systems();
|
|
self.ecs.maintain();
|
|
self.ecs.maintain();
|
|
match *self.ecs.fetch::<RunState>() {
|
|
match *self.ecs.fetch::<RunState>() {
|
|
RunState::MagicMapReveal{ .. } => newrunstate = RunState::MagicMapReveal{ row: 0 },
|
|
RunState::MagicMapReveal{ .. } => newrunstate = RunState::MagicMapReveal{ row: 0 },
|
|
@@ -103,7 +133,7 @@ impl GameState for State {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
RunState::MonsterTurn => {
|
|
RunState::MonsterTurn => {
|
|
- self.systems.dispatch(&self.ecs);
|
|
+ self.run_systems();
|
|
self.ecs.maintain();
|
|
self.ecs.maintain();
|
|
newrunstate = RunState::AwaitingInput;
|
|
newrunstate = RunState::AwaitingInput;
|
|
}
|
|
}
|
|
@@ -360,23 +390,10 @@ impl State {
|
|
}
|
|
}
|
|
|
|
|
|
fn main() {
|
|
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);
|
|
context.with_post_scanlines(true);
|
|
let mut gs = State {
|
|
let mut gs = State {
|
|
- ecs: World::new(),
|
|
+ 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(),
|
|
|
|
};
|
|
};
|
|
gs.ecs.register::<Position>();
|
|
gs.ecs.register::<Position>();
|
|
gs.ecs.register::<Renderable>();
|
|
gs.ecs.register::<Renderable>();
|