diff options
-rw-r--r-- | server/bot/src/algos/customer.rs | 14 | ||||
-rw-r--r-- | server/protocol/src/lib.rs | 23 | ||||
-rw-r--r-- | server/src/commands.rs | 8 | ||||
-rw-r--r-- | server/src/server.rs | 3 | ||||
-rw-r--r-- | server/src/state.rs | 1 | ||||
-rw-r--r-- | test-client/main.ts | 3 | ||||
-rw-r--r-- | test-client/protocol.ts | 5 |
7 files changed, 32 insertions, 25 deletions
diff --git a/server/bot/src/algos/customer.rs b/server/bot/src/algos/customer.rs index 1b1315c6..6ac4d599 100644 --- a/server/bot/src/algos/customer.rs +++ b/server/bot/src/algos/customer.rs @@ -24,8 +24,7 @@ use hurrycurry_protocol::{glam::IVec2, DemandIndex, Message, PacketS, PlayerID, use log::info; use rand::{random, seq::IndexedRandom, thread_rng}; -#[derive(Debug, Clone)] -#[derive(Default)] +#[derive(Debug, Clone, Default)] pub enum Customer { #[default] New, @@ -52,7 +51,6 @@ pub enum Customer { }, } - impl BotAlgo for Customer { fn tick(&mut self, me: PlayerID, game: &Game, dt: f32) -> BotInput { let Some(playerdata) = game.players.get(&me) else { @@ -139,9 +137,8 @@ impl BotAlgo for Customer { demands_failed: 1, ..Default::default() }), - PacketS::Communicate { - message: Some(Message::Effect("angry".to_string())), - timeout: None, + PacketS::Effect { + name: "angry".to_string(), player: me, }, ], @@ -185,9 +182,8 @@ impl BotAlgo for Customer { timeout: Some(0.), player: me, }, - PacketS::Communicate { - message: Some(Message::Effect("satisfied".to_string())), - timeout: None, + PacketS::Effect { + name: "satisfied".to_string(), player: me, }, PacketS::Interact { diff --git a/server/protocol/src/lib.rs b/server/protocol/src/lib.rs index 323cf2c2..b8f30ce7 100644 --- a/server/protocol/src/lib.rs +++ b/server/protocol/src/lib.rs @@ -119,20 +119,28 @@ pub enum PacketS { timeout: Option<f32>, }, + /// For use in replay sessions only + ReplayTick { + dt: f64, + }, + #[serde(skip)] #[bincode(skip)] - /// For internal use only + /// For internal use only (customers) ReplaceHand { player: PlayerID, item: Option<ItemIndex>, }, #[serde(skip)] #[bincode(skip)] - /// For internal use only + /// For internal use only (customers) ApplyScore(Score), - /// For use in replay sessions only - ReplayTick { - dt: f64, + #[serde(skip)] + #[bincode(skip)] + /// For internal use only (customers) + Effect { + player: PlayerID, + name: String, }, } @@ -143,7 +151,6 @@ pub enum Message { Text(String), Item(ItemIndex), Tile(TileIndex), - Effect(String), } #[derive(Debug, Clone, Serialize, Deserialize, Encode, Decode)] @@ -208,6 +215,10 @@ pub enum PacketC { message: Option<Message>, timeout: Option<MessageTimeout>, }, + Effect { + name: String, + player: PlayerID, + }, ServerMessage { text: String, }, diff --git a/server/src/commands.rs b/server/src/commands.rs index d6ca8b25..b06d9261 100644 --- a/server/src/commands.rs +++ b/server/src/commands.rs @@ -171,13 +171,7 @@ impl Server { ) } Command::Effect { name } => { - self.tx - .send(PacketC::Communicate { - player, - message: Some(Message::Effect(name)), - timeout: None, - }) - .ok(); + self.tx.send(PacketC::Effect { name, player }).ok(); } Command::Item { name } => { let item = self diff --git a/server/src/server.rs b/server/src/server.rs index 2259d159..848e2bb4 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -381,6 +381,9 @@ impl Server { self.packet_out .push_back(PacketC::RemovePlayer { id: player }) } + PacketS::Effect { player, name } => { + self.packet_out.push_back(PacketC::Effect { name, player }); + } PacketS::Movement { pos, boost, diff --git a/server/src/state.rs b/server/src/state.rs index b9a43f6b..09e7031e 100644 --- a/server/src/state.rs +++ b/server/src/state.rs @@ -110,6 +110,7 @@ fn get_packet_player(packet: &PacketS) -> Option<PlayerID> { PacketS::Interact { player, .. } => Some(*player), PacketS::Communicate { player, .. } => Some(*player), PacketS::ReplaceHand { player, .. } => Some(*player), + PacketS::Effect { player, .. } => Some(*player), PacketS::ApplyScore(_) => None, PacketS::ReplayTick { .. } => None, } diff --git a/test-client/main.ts b/test-client/main.ts index 4313ab96..de1424d3 100644 --- a/test-client/main.ts +++ b/test-client/main.ts @@ -257,6 +257,8 @@ function packet(p: PacketC) { break; case "environment": break + case "effect": + break; case "menu": switch (p.menu) { case "book": open("https://s.metamuffin.org/static/hurrycurry/book.pdf"); break @@ -363,7 +365,6 @@ function frame_update(dt: number) { if (player.item !== undefined && player.item !== null) update_item(player.item) if (player.message && tick_message(player.message, dt)) delete player.message if (player.message_persist && tick_message(player.message_persist, dt)) delete player.message_persist - } for (const [_, tile] of tiles) { if (tile.item !== undefined && tile.item !== null) update_item(tile.item) diff --git a/test-client/protocol.ts b/test-client/protocol.ts index 6d7bf464..0d2183dd 100644 --- a/test-client/protocol.ts +++ b/test-client/protocol.ts @@ -40,7 +40,8 @@ export type PacketS = | { type: "leave", player: PlayerID } // Despawns a character | { type: "movement", player: PlayerID, pos: Vec2, dir: Vec2, boost: boolean } | { type: "interact", player: PlayerID, pos?: Vec2 } // Interact with some tile. pos is a position when pressing and null when releasing interact button - | { type: "communicate", player: PlayerID, message?: Message, timeout?: number } // Send a message + | { type: "communicate", player: PlayerID, message?: Message, timeout?: number } // Sends a message + | { type: "effect", player: PlayerID, name: string } // Sends an effect | { type: "replay_tick", dt: number } // Steps forward in replay. export type PacketC = @@ -57,6 +58,7 @@ export type PacketC = | { type: "clear_progress", item: ItemLocation } | { type: "update_map", tile: Vec2, kind: TileIndex | null, neighbors: [TileIndex | null] } // A map tile was changed | { 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", text: string } // Text message from the server | { type: "server_hint", message?: Message, position?: Vec2 } // Hint message from server with optional position. Message is unset to clear previous message | { type: "score" } & Score // Supplies information for score OSD @@ -90,7 +92,6 @@ export type Message = { item: number } | { tile: number } | { text: string } - | { effect: string } | { translation: { id: string, params: Message[] } } export type ItemLocation = |