aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-12-18 22:49:15 +0100
committermetamuffin <metamuffin@disroot.org>2025-12-18 22:49:18 +0100
commitcf3d5d44166e7214700b73d657aa10018167ae0c (patch)
tree9b74ed9e719b44bc8f8d312cdf4bb83651b20983 /server/src
parent6832af5ee35b9d16668e1d34f191715f3755679f (diff)
downloadhurrycurry-cf3d5d44166e7214700b73d657aa10018167ae0c.tar
hurrycurry-cf3d5d44166e7214700b73d657aa10018167ae0c.tar.bz2
hurrycurry-cf3d5d44166e7214700b73d657aa10018167ae0c.tar.zst
only send movement packets if changes; bots send less inputs
Diffstat (limited to 'server/src')
-rw-r--r--server/src/entity/player_portal.rs5
-rw-r--r--server/src/entity/player_portal_pair.rs6
-rw-r--r--server/src/server.rs24
3 files changed, 21 insertions, 14 deletions
diff --git a/server/src/entity/player_portal.rs b/server/src/entity/player_portal.rs
index a2653900..35733ca3 100644
--- a/server/src/entity/player_portal.rs
+++ b/server/src/entity/player_portal.rs
@@ -18,7 +18,7 @@
use super::{Entity, EntityContext};
use anyhow::Result;
use hurrycurry_locale::TrError;
-use hurrycurry_protocol::{PacketC, glam::Vec2};
+use hurrycurry_protocol::glam::Vec2;
#[derive(Debug, Default, Clone)]
pub struct PlayerPortal {
@@ -40,8 +40,7 @@ impl Entity for PlayerPortal {
.get_mut(&pid)
.ok_or(TrError::Plain("Player is missing".to_string()))?;
p.movement.position = self.to;
- c.packet_out
- .push_back(PacketC::MovementSync { player: pid });
+ p.movement_must_sync = true;
}
Ok(())
diff --git a/server/src/entity/player_portal_pair.rs b/server/src/entity/player_portal_pair.rs
index 9691ca05..fd28b774 100644
--- a/server/src/entity/player_portal_pair.rs
+++ b/server/src/entity/player_portal_pair.rs
@@ -19,7 +19,7 @@ use super::{Entity, EntityContext};
use anyhow::Result;
use hurrycurry_locale::TrError;
use hurrycurry_protocol::{
- PacketC, TileIndex,
+ TileIndex,
glam::{IVec2, Vec2, vec2},
};
@@ -104,7 +104,7 @@ impl Entity for PlayerPortalPair {
&& let Some(p) = c.game.players.get_mut(&player)
{
p.movement.position = self.b_f;
- c.packet_out.push_back(PacketC::MovementSync { player });
+ p.movement_must_sync = true;
}
if self.state == -1
@@ -113,7 +113,7 @@ impl Entity for PlayerPortalPair {
&& let Some(p) = c.game.players.get_mut(&player)
{
p.movement.position = self.a_f;
- c.packet_out.push_back(PacketC::MovementSync { player });
+ p.movement_must_sync = true;
}
Ok(())
diff --git a/server/src/server.rs b/server/src/server.rs
index b925a577..be5fee3f 100644
--- a/server/src/server.rs
+++ b/server/src/server.rs
@@ -528,7 +528,7 @@ impl Server {
let diff = pos - pd.movement.position;
pd.movement.position += diff.clamp_length_max(dt.as_secs_f32());
if diff.length() > 1. {
- replies.push(PacketC::MovementSync { player });
+ pd.movement_must_sync = true;
}
}
}
@@ -698,13 +698,21 @@ impl Server {
});
for (&pid, player) in &mut self.game.players {
- self.packet_out.push_back(PacketC::Movement {
- player: pid,
- pos: player.movement.position,
- dir: player.movement.input_direction,
- boost: player.movement.boosting,
- rot: player.movement.rotation,
- });
+ if player.movement_input_changed || player.movement_must_sync {
+ player.movement_input_changed = false;
+ self.packet_out.push_back(PacketC::Movement {
+ player: pid,
+ pos: player.movement.position,
+ dir: player.movement.input_direction,
+ boost: player.movement.boosting,
+ rot: player.movement.rotation,
+ });
+ if player.movement_must_sync {
+ player.movement_must_sync = false;
+ self.packet_out
+ .push_back(PacketC::MovementSync { player: pid });
+ }
+ }
}
let mut players_auto_release = Vec::new();