summaryrefslogtreecommitdiff
path: root/server/client-lib/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/client-lib/src/lib.rs')
-rw-r--r--server/client-lib/src/lib.rs18
1 files changed, 12 insertions, 6 deletions
diff --git a/server/client-lib/src/lib.rs b/server/client-lib/src/lib.rs
index b04f46f7..38f1070e 100644
--- a/server/client-lib/src/lib.rs
+++ b/server/client-lib/src/lib.rs
@@ -20,8 +20,8 @@ pub mod network;
pub mod spatial_index;
use hurrycurry_protocol::{
- glam::IVec2, movement::MovementBase, Gamedata, ItemIndex, ItemLocation, Message, PacketC,
- PlayerID, RecipeIndex, Score, TileIndex,
+ glam::IVec2, movement::MovementBase, Gamedata, ItemIndex, ItemLocation, Message,
+ MessageTimeout, PacketC, PlayerID, RecipeIndex, Score, TileIndex,
};
use spatial_index::SpatialIndex;
use std::{
@@ -54,7 +54,7 @@ pub struct Player {
pub character: i32,
pub interacting: Option<IVec2>,
pub item: Option<Item>,
- pub communicate_persist: Option<Message>,
+ pub communicate_persist: Option<(Message, MessageTimeout)>,
pub movement: MovementBase,
}
@@ -168,11 +168,11 @@ impl Game {
PacketC::Communicate {
player,
message,
- persist,
+ timeout,
} => {
- if persist {
+ if let Some(timeout) = &timeout {
if let Some(player) = self.players.get_mut(&player) {
- player.communicate_persist = message;
+ player.communicate_persist = message.to_owned().map(|m| (m, *timeout));
}
}
}
@@ -195,6 +195,12 @@ impl Game {
for (&pid, player) in &mut self.players {
player.movement.update(&self.walkable, dt);
+ if let Some((_, timeout)) = &mut player.communicate_persist {
+ timeout.remaining -= dt;
+ if timeout.remaining < 0. {
+ player.communicate_persist = None;
+ }
+ }
self.players_spatial_index
.update_entry(pid, player.movement.position);
}