Bladeren bron

Chapter 8 is now WASM friendly.

Herbert Wolverson 4 jaren geleden
bovenliggende
commit
0c4cf24110
8 gewijzigde bestanden met toevoegingen van 37 en 18 verwijderingen
  1. 2 0
      Cargo.lock
  2. 2 2
      book/src/chapter_2.md
  3. 1 1
      book/src/chapter_4.md
  4. 2 2
      book/src/chapter_8.md
  5. 5 0
      chapter-08-ui/Cargo.toml
  6. 2 1
      chapter-08-ui/src/damage_system.rs
  7. 22 12
      chapter-08-ui/src/main.rs
  8. 1 0
      wasmbuild.bat

+ 2 - 0
Cargo.lock

@@ -232,6 +232,8 @@ dependencies = [
  "rltk 0.3.1 (git+https://github.com/thebracket/rltk_rs)",
  "specs 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "specs-derive 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasm-bindgen 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)",
+ "web-sys 0.3.27 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]

+ 2 - 2
book/src/chapter_2.md

@@ -270,7 +270,7 @@ impl GameState for State {
 }
 
 fn main() {
-    let context = Rltk::init_simple8x8(80, 50, "Hello Rust World", "../resources");
+    let context = Rltk::init_simple8x8(80, 50, "Hello Rust World", "resources");
     let mut gs = State {
         ecs: World::new()
     };
@@ -466,7 +466,7 @@ impl State {
 }
 
 fn main() {
-    let context = Rltk::init_simple8x8(80, 50, "Hello Rust World", "../resources");
+    let context = Rltk::init_simple8x8(80, 50, "Hello Rust World", "resources");
     let mut gs = State {
         ecs: World::new()
     };

+ 1 - 1
book/src/chapter_4.md

@@ -229,7 +229,7 @@ Our `main.rs` file also required adjustment, to get accept the new format. We ch
 
 ```rust
 fn main() {
-    let context = Rltk::init_simple8x8(80, 50, "Hello Rust World", "../resources");
+    let context = Rltk::init_simple8x8(80, 50, "Hello Rust World", "resources");
     let mut gs = State {
         ecs: World::new()
     };

+ 2 - 2
book/src/chapter_8.md

@@ -174,7 +174,7 @@ pub fn delete_the_dead(ecs : &mut World) {
                         }
                         dead.push(entity)
                     }
-                    Some(_) => println!("You are dead")
+                    Some(_) => console::log("You are dead")
                 }
             }
         }
@@ -266,7 +266,7 @@ If you `cargo run` your project now, it looks like this:
 Since we're on look and feel, lets consider enabling an RLTK feature: post-processing to give scanlines and screen burn, for that truly retro feel. It's entirely up to you if you want to use this! In `main.rs`, the initial setup simply replaced the first `init` command with:
 
 ```rust
-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);
 ```
 

+ 5 - 0
chapter-08-ui/Cargo.toml

@@ -10,3 +10,8 @@ edition = "2018"
 rltk = { git = "https://github.com/thebracket/rltk_rs" }
 specs = "0.15.0"
 specs-derive = "0.4.0"
+
+
+[target.'cfg(any(target_arch = "wasm32"))'.dependencies]
+web-sys = { version = "0.3", features=["console"] }
+wasm-bindgen = "0.2"

+ 2 - 1
chapter-08-ui/src/damage_system.rs

@@ -1,6 +1,7 @@
 extern crate specs;
 use specs::prelude::*;
 use super::{CombatStats, SufferDamage, Player, Name, gamelog::GameLog};
+use rltk::console;
 
 pub struct DamageSystem {}
 
@@ -39,7 +40,7 @@ pub fn delete_the_dead(ecs : &mut World) {
                         }
                         dead.push(entity)
                     }
-                    Some(_) => println!("You are dead")
+                    Some(_) => console::log("You are dead")
                 }
             }
         }

+ 22 - 12
chapter-08-ui/src/main.rs

@@ -25,12 +25,29 @@ use damage_system::DamageSystem;
 mod gui;
 mod gamelog;
 
+rltk::add_wasm_support!();
+
 #[derive(PartialEq, Copy, Clone)]
 pub enum RunState { AwaitingInput, PreRun, PlayerTurn, MonsterTurn }
 
 pub struct State {
     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);
+        self.ecs.maintain();
+    }
 }
 
 impl GameState for State {
@@ -44,18 +61,18 @@ impl GameState for State {
         
         match newrunstate {
             RunState::PreRun => {
-                self.systems.dispatch(&self.ecs);
+                self.run_systems();
                 newrunstate = RunState::AwaitingInput;
             }
             RunState::AwaitingInput => {
                 newrunstate = player_input(self, ctx);
             }
             RunState::PlayerTurn => {
-                self.systems.dispatch(&self.ecs);
+                self.run_systems();
                 newrunstate = RunState::MonsterTurn;
             }
             RunState::MonsterTurn => {
-                self.systems.dispatch(&self.ecs);
+                self.run_systems();
                 newrunstate = RunState::AwaitingInput;
             }
         }
@@ -82,17 +99,10 @@ impl GameState for 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"])
-            .build(),
     };
     gs.ecs.register::<Position>();
     gs.ecs.register::<Renderable>();

+ 1 - 0
wasmbuild.bat

@@ -7,6 +7,7 @@ CALL :Stage chapter-04-newmap
 CALL :Stage chapter-05-fov
 CALL :Stage chapter-06-monsters
 CALL :Stage chapter-07-damage
+CALL :Stage chapter-08-ui
 
 REM Publish or perish
 cd book\book\wasm