diff options
author | metamuffin <metamuffin@disroot.org> | 2024-08-15 21:17:23 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-08-15 21:17:23 +0200 |
commit | 1cb35341481cb76feb5bb794a304d1c4e3c7b372 (patch) | |
tree | dcd65f95aaa2805c14f83125ceb1bf11b6bf47be /server/src | |
parent | a868f49b41c30daca83de86f982ffed431d3e891 (diff) | |
download | hurrycurry-1cb35341481cb76feb5bb794a304d1c4e3c7b372.tar hurrycurry-1cb35341481cb76feb5bb794a304d1c4e3c7b372.tar.bz2 hurrycurry-1cb35341481cb76feb5bb794a304d1c4e3c7b372.tar.zst |
message timeout replaces persist
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/server.rs | 33 | ||||
-rw-r--r-- | server/src/state.rs | 6 |
2 files changed, 28 insertions, 11 deletions
diff --git a/server/src/server.rs b/server/src/server.rs index 41931ef7..2f93246d 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -25,7 +25,7 @@ use hurrycurry_client_lib::{Game, Item, Player, Tile}; use hurrycurry_protocol::{ glam::{IVec2, Vec2}, movement::MovementBase, - Gamedata, ItemLocation, Menu, PacketC, PacketS, PlayerID, Score, TileIndex, + Gamedata, ItemLocation, Menu, MessageTimeout, PacketC, PacketS, PlayerID, Score, TileIndex, }; use log::{info, warn}; use std::{ @@ -177,11 +177,11 @@ impl GameServerExt for Game { item: Some(item.kind), }) } - if let Some(c) = &player.communicate_persist { + if let Some((message, timeout)) = &player.communicate_persist { out.push(PacketC::Communicate { player: id, - message: Some(c.to_owned()), - persist: true, + message: Some(message.to_owned()), + timeout: Some(*timeout), }) } } @@ -449,19 +449,30 @@ impl Server<'_> { } PacketS::Communicate { message, - persist, + timeout, player, } => { info!("{player:?} message {message:?}"); - if persist { + if let Some(timeout) = timeout { if let Some(player) = self.game.players.get_mut(&player) { - player.communicate_persist = message.clone() + player.communicate_persist = message.clone().map(|m| { + ( + m, + MessageTimeout { + initial: timeout, + remaining: timeout, + }, + ) + }); } } packet_out.push_back(PacketC::Communicate { player, message, - persist, + timeout: timeout.map(|t| MessageTimeout { + initial: t, + remaining: t, + }), }) } PacketS::ReplaceHand { item, player } => { @@ -595,6 +606,12 @@ impl Server<'_> { let mut players_auto_release = Vec::new(); for (pid, player) in &mut self.game.players { + if let Some((_, timeout)) = &mut player.communicate_persist { + timeout.remaining -= dt; + if timeout.remaining < 0. { + player.communicate_persist = None; + } + } if let Some(pos) = player.interacting { if let Some(tile) = self.game.tiles.get(&pos) { if let Some(item) = &tile.item { diff --git a/server/src/state.rs b/server/src/state.rs index 54beb3f7..f6304db5 100644 --- a/server/src/state.rs +++ b/server/src/state.rs @@ -148,7 +148,7 @@ impl State { match &packet { PacketS::Communicate { message: Some(Message::Text(text)), - persist: false, + timeout: None, player, } if let Some(command) = text.strip_prefix("/") => { match self.handle_command_parse(*player, command).await { @@ -288,7 +288,7 @@ impl State { .send(PacketC::Communicate { player, message: Some(Message::Effect(name)), - persist: false, + timeout: None, }) .ok(); } @@ -302,7 +302,7 @@ impl State { .send(PacketC::Communicate { player, message: Some(Message::Item(item)), - persist: false, + timeout: None, }) .ok(); } |