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 = | 
