From 9587d6b4d4389f6108e2be0ff5c0f4a495ff842d Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 25 Sep 2024 15:30:09 +0200 Subject: player class decoupled from character id --- server/src/server.rs | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) (limited to 'server/src/server.rs') 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>, ); @@ -105,11 +107,12 @@ impl GameServerExt for Game { timer: Option, packet_out: &mut VecDeque, ) { + // 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::>(); 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>, ) { - 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() } } -- cgit v1.2.3-70-g09d2