diff options
Diffstat (limited to 'server/src')
| -rw-r--r-- | server/src/entity/player_portal.rs | 5 | ||||
| -rw-r--r-- | server/src/entity/player_portal_pair.rs | 6 | ||||
| -rw-r--r-- | server/src/server.rs | 24 |
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(); |