diff options
| author | metamuffin <metamuffin@disroot.org> | 2024-09-25 15:30:09 +0200 | 
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2024-09-25 15:55:00 +0200 | 
| commit | 9587d6b4d4389f6108e2be0ff5c0f4a495ff842d (patch) | |
| tree | 3cc2ea9a93de6dd39acd5396fddfbadafef471cf /server/src/server.rs | |
| parent | 64564a25db65d7a578fee537a0cf91db1a7dbc60 (diff) | |
| download | hurrycurry-9587d6b4d4389f6108e2be0ff5c0f4a495ff842d.tar hurrycurry-9587d6b4d4389f6108e2be0ff5c0f4a495ff842d.tar.bz2 hurrycurry-9587d6b4d4389f6108e2be0ff5c0f4a495ff842d.tar.zst | |
player class decoupled from character id
Diffstat (limited to 'server/src/server.rs')
| -rw-r--r-- | server/src/server.rs | 41 | 
1 files changed, 27 insertions, 14 deletions
| diff --git a/server/src/server.rs b/server/src/server.rs index 5d31bd58..d44a949b 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -28,7 +28,8 @@ use hurrycurry_client_lib::{Game, Involvement, Item, Player, Tile};  use hurrycurry_protocol::{      glam::{IVec2, Vec2},      movement::MovementBase, -    Gamedata, ItemLocation, Menu, MessageTimeout, PacketC, PacketS, PlayerID, Score, TileIndex, +    Gamedata, ItemLocation, Menu, MessageTimeout, PacketC, PacketS, PlayerClass, PlayerID, Score, +    TileIndex,  };  use log::{info, warn};  use rand::random; @@ -71,6 +72,7 @@ pub trait GameServerExt {          id: PlayerID,          name: String,          character: i32, +        class: PlayerClass,          serverdata: &Serverdata,          packet_out: Option<&mut VecDeque<PacketC>>,      ); @@ -105,11 +107,12 @@ impl GameServerExt for Game {          timer: Option<Duration>,          packet_out: &mut VecDeque<PacketC>,      ) { +        // TODO cleanup          let players = self              .players              .iter() -            .filter(|(_, p)| p.character >= 0) -            .map(|(id, p)| (*id, (p.name.to_owned(), p.character))) +            .filter(|(_, p)| p.class == PlayerClass::Chef) +            .map(|(id, p)| (*id, (p.name.to_owned(), p.character, p.class)))              .collect::<HashMap<_, _>>();          self.unload(packet_out); @@ -137,8 +140,8 @@ impl GameServerExt for Game {                  self.walkable.insert(p);              }          } -        for (id, (name, character)) in players { -            self.join_player(id, name, character, serverdata, None); +        for (id, (name, character, class)) in players { +            self.join_player(id, name, character, class, serverdata, None);          }          packet_out.extend(self.prime_client()); @@ -155,6 +158,7 @@ impl GameServerExt for Game {          for (&id, player) in &self.players {              out.push(PacketC::AddPlayer {                  id, +                class: player.class,                  position: player.movement.position,                  character: player.character,                  name: player.name.clone(), @@ -236,19 +240,20 @@ impl GameServerExt for Game {          id: PlayerID,          name: String,          character: i32, +        class: PlayerClass,          serverdata: &Serverdata,          packet_out: Option<&mut VecDeque<PacketC>>,      ) { -        let position = if character < 0 { -            serverdata.customer_spawn -        } else { -            serverdata.chef_spawn +        let position = match class { +            PlayerClass::Customer => serverdata.customer_spawn, +            PlayerClass::Bot | PlayerClass::Chef => serverdata.chef_spawn,          } + (Vec2::new(random(), random()) - 0.5);          self.players.insert(              id,              Player {                  item: None,                  character, +                class,                  movement: MovementBase::new(position),                  communicate_persist: None,                  interacting: None, @@ -260,6 +265,7 @@ impl GameServerExt for Game {              packet_out.push_back(PacketC::AddPlayer {                  id,                  name, +                class,                  position,                  character,              }); @@ -357,14 +363,21 @@ impl Server {                  name,                  character,                  id, +                class,              } => {                  let id = id.unwrap_or_else(|| {                      let id = self.player_id_counter;                      self.player_id_counter.0 += 1;                      id                  }); -                self.game -                    .join_player(id, name, character, &self.data, Some(&mut self.packet_out)); +                self.game.join_player( +                    id, +                    name, +                    character, +                    class, +                    &self.data, +                    Some(&mut self.packet_out), +                );                  replies.push(PacketC::Joined { id })              }              PacketS::Leave { player } => { @@ -488,7 +501,7 @@ impl Server {                          .get_many_mut([&pid, &base_pid])                          .ok_or(tre!("s.error.self_interact"))?; -                    if this.character < 0 || other.character < 0 { +                    if this.class == PlayerClass::Customer || other.class == PlayerClass::Customer {                          return Err(tre!("s.error.customer_interact"));                      } @@ -730,7 +743,7 @@ impl Server {                      self.game                          .players                          .values() -                        .filter(|m| m.character >= 0) +                        .filter(|m| m.class == PlayerClass::Chef)                          .map(|m| m.name.clone())                          .collect(),                      self.game.score.clone(), @@ -748,7 +761,7 @@ impl Server {          self.game              .players              .values() -            .map(|p| if p.character >= 0 { 1 } else { 0 }) +            .map(|p| if p.class == PlayerClass::Chef { 1 } else { 0 })              .sum()      }  } | 
