diff options
Diffstat (limited to 'server/src/server.rs')
-rw-r--r-- | server/src/server.rs | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/server/src/server.rs b/server/src/server.rs index cce99266..a5d1e1d8 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -259,6 +259,7 @@ impl Server<'_> { packet_in: &mut self.state.packet_loopback, score_changed: &mut self.state.score_changed, dt: 0., + load_map: &mut None, }); } self.state.data = serverdata.into(); @@ -480,7 +481,11 @@ impl Server<'_> { } /// Returns true if the game should end - pub fn tick(&mut self, dt: f32, packet_out: &mut VecDeque<PacketC>) -> bool { + pub fn tick( + &mut self, + dt: f32, + packet_out: &mut VecDeque<PacketC>, + ) -> Option<(String, Option<Duration>)> { if self.state.score_changed { self.state.score_changed = false; packet_out.push_back(PacketC::Score(self.game.score.clone())); @@ -610,9 +615,11 @@ impl Server<'_> { ); } + let mut load_map = None; for entity in self.state.entities.iter_mut() { if let Err(e) = entity.tick(EntityContext { game: self.game, + load_map: &mut load_map, packet_out, score_changed: &mut self.state.score_changed, packet_in: &mut self.state.packet_loopback, @@ -621,6 +628,9 @@ impl Server<'_> { warn!("entity tick failed: {e}") } } + if let Some(map) = load_map { + return Some((map, Some(Duration::from_secs(300)))); + } while let Some(p) = self.state.packet_loopback.pop_front() { if let Err(e) = self.packet_in(p, &mut vec![], packet_out) { @@ -642,12 +652,12 @@ impl Server<'_> { _ => 0, }; packet_out.push_back(PacketC::Menu(Menu::Score(self.game.score.clone()))); - true + Some(("lobby".to_string(), None)) } else { - false + None } } else { - false + None } } |