summaryrefslogtreecommitdiff
path: root/server/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server.rs')
-rw-r--r--server/src/server.rs18
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
}
}