From 2858e3d5ec0bb96969004df7f6ad9f436ef7df06 Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Mon, 1 Aug 2022 13:27:43 +0200 Subject: [PATCH] Die when fall off, restart, fix new tab glitch --- src/engine/mod.rs | 24 ++++++++++++++++-------- src/engine/scene.rs | 12 +++++------- 2 files changed, 21 insertions(+), 15 deletions(-) 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; - } } }