diff --git a/src/engine/mod.rs b/src/engine/mod.rs index 747e3a1..d542906 100644 --- a/src/engine/mod.rs +++ b/src/engine/mod.rs @@ -141,19 +141,27 @@ impl Engine { pub fn update(&self) -> Result<()> { let mut inner = self.inner.borrow_mut(); - // Manage events - while let Some(event) = inner.keyboard.pop() { - inner.scene.manage_event(&event); - } - // Manage the physics let now = now(&self.performance); let duration = unwrap!(now.duration_since(inner.after_loop).ok()); inner.after_loop = now; - let keyboard = inner.keyboard.clone(); - if inner.scene.update(now, duration, &keyboard) == State::Finished { - // running = false; + if (self.document.has_focus()?) { + // Manage events + while let Some(event) = inner.keyboard.pop() { + inner.scene.manage_event(&event); + } + + let keyboard = inner.keyboard.clone(); + if inner.scene.update(now, duration, &keyboard) == State::Finished { + let map = Map::from_str(include_str!("../../static/levels/level1.lvl")).unwrap(); + let mut scene = Scene::from_map(map); + + let character = Character::with_controls(Controls::default_keyboard()); + scene.add(character); + + inner.scene = scene; + } } Ok(()) diff --git a/src/engine/scene.rs b/src/engine/scene.rs index 5b308cc..d00ddc6 100644 --- a/src/engine/scene.rs +++ b/src/engine/scene.rs @@ -86,7 +86,7 @@ impl Scene { /// Updates the whole scene. pub fn update(&mut self, now: SystemTime, duration: Duration, keyboard: &Keyboard) -> State { - let mut state = State::Finished; + let mut state = State::Running; for c in &mut self.characters { // Don't need to update if the character is dead @@ -109,15 +109,13 @@ impl Scene { c.ground_collision(); } - // c.die(); + if (damage) { + c.die(); + state = State::Finished; + } } else { c.fall_off(); } - - // If a character is alive and still have controls, the game should continue - if c.controls().is_some() { - state = State::Running; - } } }