summaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-08-10 22:55:26 +0200
committermetamuffin <metamuffin@disroot.org>2024-08-10 22:55:26 +0200
commita02c1d31f4d2de92388dcc8c07a602e62f5ddbbe (patch)
tree1caad1fd9ef1c649a304fcae24b8a1abf5a3e5c8 /server/src
parent7cb51c8b95e414cbc3a4c9bec5d23b3d1beeb97d (diff)
downloadhurrycurry-a02c1d31f4d2de92388dcc8c07a602e62f5ddbbe.tar
hurrycurry-a02c1d31f4d2de92388dcc8c07a602e62f5ddbbe.tar.bz2
hurrycurry-a02c1d31f4d2de92388dcc8c07a602e62f5ddbbe.tar.zst
fix customers for new proto
Diffstat (limited to 'server/src')
-rw-r--r--server/src/entity/customers/mod.rs14
-rw-r--r--server/src/game.rs109
2 files changed, 65 insertions, 58 deletions
diff --git a/server/src/entity/customers/mod.rs b/server/src/entity/customers/mod.rs
index e6067110..0bb3f918 100644
--- a/server/src/entity/customers/mod.rs
+++ b/server/src/entity/customers/mod.rs
@@ -33,7 +33,6 @@ pub struct Customers {
demands: Vec<Demand>,
cpackets: VecDeque<PacketS>,
chairs: HashMap<IVec2, bool>,
- customer_id_counter: PlayerID,
customers: HashMap<PlayerID, CustomerState>,
spawn_cooldown: f32,
}
@@ -67,7 +66,6 @@ impl Customers {
}
Ok(Self {
chairs,
- customer_id_counter: PlayerID(0),
customers: Default::default(),
demands,
spawn_cooldown: 0.,
@@ -82,12 +80,12 @@ impl EntityT for Customers {
self.spawn_cooldown = self.spawn_cooldown.max(0.);
if self.customers.len() < 5 && self.spawn_cooldown <= 0. {
self.spawn_cooldown = 10. + random::<f32>() * 10.;
- self.customer_id_counter.0 -= 1;
- let id = self.customer_id_counter;
- self.cpackets.push_back(PacketS::Join {
- name: faker::name::fr_fr::Name().fake(),
- character: -1 - (random::<u16>() as i32),
- });
+ let id = game.join_player(
+ faker::name::fr_fr::Name().fake(),
+ -1 - (random::<u16>() as i32),
+ packet_out,
+ );
+
let chair = self.select_chair().ok_or(anyhow!("no free chair found"))?;
let from = game.data.customer_spawn.as_ivec2();
let path = find_path(&game.walkable, from, chair)
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 });
}
}
}