aboutsummaryrefslogtreecommitdiff
path: root/pixel-client/src
diff options
context:
space:
mode:
Diffstat (limited to 'pixel-client/src')
-rw-r--r--pixel-client/src/game.rs19
1 files changed, 13 insertions, 6 deletions
diff --git a/pixel-client/src/game.rs b/pixel-client/src/game.rs
index 318b9a02..59b30ad0 100644
--- a/pixel-client/src/game.rs
+++ b/pixel-client/src/game.rs
@@ -30,7 +30,8 @@ use hurrycurry_client_lib::{network::sync::Network, spatial_index::SpatialIndex}
use hurrycurry_protocol::{
glam::{IVec2, Vec2},
movement::MovementBase,
- Gamedata, ItemIndex, ItemLocation, Message, PacketC, PacketS, PlayerID, Score, TileIndex,
+ Gamedata, ItemIndex, ItemLocation, Message, MessageTimeout, PacketC, PacketS, PlayerID, Score,
+ TileIndex,
};
use log::{info, warn};
use sdl2::{
@@ -67,7 +68,7 @@ pub struct Tile {
pub struct Player {
movement: MovementBase,
item: Option<Item>,
- message_persist: Option<Message>,
+ message_persist: Option<(Message, MessageTimeout)>,
_name: String,
_character: i32,
interact_target_anim: Vec2,
@@ -183,6 +184,12 @@ impl Game {
for (&pid, player) in &mut self.players {
player.movement.update(&self.walkable, dt);
+ if let Some((_, timeout)) = &mut player.message_persist {
+ timeout.remaining -= dt;
+ if timeout.remaining < 0. {
+ player.message_persist = None;
+ }
+ }
self.players_spatial_index
.update_entry(pid, player.movement.position);
}
@@ -352,11 +359,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.message_persist = message;
+ player.message_persist = message.map(|m| (m, timeout));
}
}
}
@@ -458,7 +465,7 @@ impl Player {
}
.at(self.movement.position),
);
- if let Some(message) = &self.message_persist {
+ if let Some((message, _timeout)) = &self.message_persist {
match message {
Message::Text(_) => (), // TODO
Message::Item(item) => {