diff options
author | metamuffin <metamuffin@disroot.org> | 2024-09-26 18:03:00 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-09-26 18:03:00 +0200 |
commit | 2a96dbb14fe268c90025d1d0af5e66dc9b00f214 (patch) | |
tree | cf4e5bc8bcda51a60bc46f1042f5b9464284b6e6 | |
parent | 9f5c9f8019c56d6904dfff1d18eaed247db5eba6 (diff) | |
download | hurrycurry-2a96dbb14fe268c90025d1d0af5e66dc9b00f214.tar hurrycurry-2a96dbb14fe268c90025d1d0af5e66dc9b00f214.tar.bz2 hurrycurry-2a96dbb14fe268c90025d1d0af5e66dc9b00f214.tar.zst |
add map flush packet for #157
-rw-r--r-- | server/protocol/src/lib.rs | 3 | ||||
-rw-r--r-- | server/registry/src/lobby.rs | 1 | ||||
-rw-r--r-- | server/src/entity/campaign.rs | 3 | ||||
-rw-r--r-- | server/src/server.rs | 4 | ||||
-rw-r--r-- | test-client/main.ts | 2 | ||||
-rw-r--r-- | test-client/protocol.ts | 1 |
6 files changed, 11 insertions, 3 deletions
diff --git a/server/protocol/src/lib.rs b/server/protocol/src/lib.rs index 4c2ff3f4..d26d8d18 100644 --- a/server/protocol/src/lib.rs +++ b/server/protocol/src/lib.rs @@ -28,7 +28,7 @@ pub use glam; pub mod movement; pub mod registry; -pub const VERSION: (u32, u32) = (7, 2); +pub const VERSION: (u32, u32) = (7, 3); pub const BINCODE_CONFIG: Configuration<LittleEndian, Varint, Limit<4096>> = standard().with_limit(); @@ -232,6 +232,7 @@ pub enum PacketC { kind: Option<TileIndex>, neighbors: [Option<TileIndex>; 4], }, + FlushMap, Communicate { player: PlayerID, message: Option<Message>, diff --git a/server/registry/src/lobby.rs b/server/registry/src/lobby.rs index 886443f5..7f2387b8 100644 --- a/server/registry/src/lobby.rs +++ b/server/registry/src/lobby.rs @@ -90,6 +90,7 @@ async fn handle_conn(sock: TcpStream, addr: SocketAddr, entries: &[Entry]) -> Re neighbors: [None, None, None, None], }); } + out.push(PacketC::FlushMap); out.push(PacketC::SetIngame { state: true, lobby: false, // very ironic diff --git a/server/src/entity/campaign.rs b/server/src/entity/campaign.rs index 5838d3ce..6683716d 100644 --- a/server/src/entity/campaign.rs +++ b/server/src/entity/campaign.rs @@ -68,7 +68,8 @@ impl Entity for Gate { self.unlocked = self.condition.check(c.scoreboard); if !self.unlocked { c.game - .set_tile(self.location, Some(self.blocker_tile), c.packet_out) + .set_tile(self.location, Some(self.blocker_tile), c.packet_out); + c.packet_out.push_back(PacketC::FlushMap); // TODO dont send too often } } Ok(()) diff --git a/server/src/server.rs b/server/src/server.rs index 8257a420..1d57a200 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -227,6 +227,7 @@ impl GameServerExt for Game { } } } + out.push(PacketC::FlushMap); out.push(PacketC::Score(self.score.clone())); out.push(PacketC::SetIngame { state: true, @@ -272,6 +273,7 @@ impl GameServerExt for Game { } } + /// Dont forget to flush fn set_tile( &mut self, tile: IVec2, @@ -298,7 +300,7 @@ impl GameServerExt for Game { self.tiles.get(&(tile + IVec2::Y)).map(|e| e.kind), self.tiles.get(&(tile + IVec2::X)).map(|e| e.kind), ], - }) + }); } } diff --git a/test-client/main.ts b/test-client/main.ts index c56f9db4..b2a5ef46 100644 --- a/test-client/main.ts +++ b/test-client/main.ts @@ -293,6 +293,8 @@ function packet(p: PacketC) { break case "effect": break; + case "flush_map": + break; case "menu": switch (p.menu) { case "book": open("https://s.metamuffin.org/static/hurrycurry/book.pdf"); break diff --git a/test-client/protocol.ts b/test-client/protocol.ts index 2dcde685..8fa15c8d 100644 --- a/test-client/protocol.ts +++ b/test-client/protocol.ts @@ -57,6 +57,7 @@ export type PacketC = | { type: "set_progress", item: ItemLocation, position: number, speed: number, warn: boolean, player?: PlayerID } // A tile is doing something. position goes from 0 to 1, speed unit is in 1 per second | { type: "clear_progress", item: ItemLocation } | { type: "update_map", tile: Vec2, kind: TileIndex | null, neighbors: [TileIndex | null] } // A map tile was changed + | { type: "flush_map" } | { type: "communicate", player: PlayerID, message?: Message, timeout?: MessageTimeout } // A player wants to communicate something, message is null when cleared | { type: "effect", player: PlayerID, name: string } // Player sent an effect | { type: "server_message", message: Message, error: boolean } // Text message from the server |