aboutsummaryrefslogtreecommitdiff
path: root/server/src/game.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/game.rs')
-rw-r--r--server/src/game.rs109
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 });
}
}
}