diff options
Diffstat (limited to 'server/src/game.rs')
-rw-r--r-- | server/src/game.rs | 109 |
1 files changed, 59 insertions, 50 deletions
diff --git a/server/src/game.rs b/server/src/game.rs index 6477d9fa..527ea65b 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -178,6 +178,7 @@ impl Game { } else { self.data.chef_spawn }, + direction: Vec2::ZERO, facing: Vec2::X, rotation: 0., velocity: Vec2::ZERO, @@ -273,6 +274,55 @@ impl Game { out } + pub fn join_player( + &mut self, + name: String, + character: i32, + packet_out: &mut VecDeque<PacketC>, + ) -> PlayerID { + let id = self.player_id_counter; + self.player_id_counter.0 += 1; + let position = if id.0 < 0 { + self.data.customer_spawn + } else { + self.data.chef_spawn + }; + self.players.insert( + id, + Player { + item: None, + character, + movement: MovementBase { + position: if character < 0 { + self.data.customer_spawn + } else { + self.data.chef_spawn + }, + direction: Vec2::ZERO, + facing: Vec2::X, + rotation: 0., + velocity: Vec2::ZERO, + boosting: false, + stamina: 0., + }, + last_position_update: Instant::now(), + boost: false, + direction: Vec2::ZERO, + communicate_persist: None, + interacting: None, + name: name.clone(), + }, + ); + self.score.players = self.score.players.max(self.players.len()); + packet_out.push_back(PacketC::AddPlayer { + id, + name, + position, + character, + }); + id + } + pub fn packet_in( &mut self, packet: PacketS, @@ -281,48 +331,7 @@ impl Game { ) -> Result<()> { match packet { PacketS::Join { name, character } => { - let id = self.player_id_counter; - self.player_id_counter.0 += 1; - if self.players.contains_key(&id) { - bail!("You already joined.") - } - let position = if id.0 < 0 { - self.data.customer_spawn - } else { - self.data.chef_spawn - }; - self.players.insert( - id, - Player { - item: None, - character, - movement: MovementBase { - position: if character < 0 { - self.data.customer_spawn - } else { - self.data.chef_spawn - }, - facing: Vec2::X, - rotation: 0., - velocity: Vec2::ZERO, - boosting: false, - stamina: 0., - }, - last_position_update: Instant::now(), - boost: false, - direction: Vec2::ZERO, - communicate_persist: None, - interacting: None, - name: name.clone(), - }, - ); - self.score.players = self.score.players.max(self.players.len()); - packet_out.push_back(PacketC::AddPlayer { - id, - name, - position, - character, - }); + let id = self.join_player(name, character, packet_out); replies.push(PacketC::Joined { id }) } PacketS::Leave { player } => { @@ -353,22 +362,22 @@ impl Game { direction, player, } => { - let player = self + let pd = self .players .get_mut(&player) .ok_or(anyhow!("player does not exist"))?; - player.direction = direction; - player.boost = boosting; + pd.direction = direction; + pd.boost = boosting; if let Some(pos) = pos { - let dt = player.last_position_update.elapsed(); - player.last_position_update += dt; - let diff = pos - player.movement.position; - player.movement.position += diff.clamp_length_max(dt.as_secs_f32()); + let dt = pd.last_position_update.elapsed(); + pd.last_position_update += dt; + let diff = pos - pd.movement.position; + pd.movement.position += diff.clamp_length_max(dt.as_secs_f32()); if diff.length() > 1. { - replies.push(PacketC::MovementSync); + replies.push(PacketC::MovementSync { player }); } } } |