summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/protocol/src/lib.rs3
-rw-r--r--server/registry/src/lobby.rs1
-rw-r--r--server/src/entity/campaign.rs3
-rw-r--r--server/src/server.rs4
-rw-r--r--test-client/main.ts2
-rw-r--r--test-client/protocol.ts1
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