diff options
author | metamuffin <metamuffin@disroot.org> | 2024-08-10 20:57:06 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-08-10 20:57:06 +0200 |
commit | 7dbb34febaf75572f99fee459a77cf917de05d8f (patch) | |
tree | 72ba067aa5003d110f2bb707fb3e9c429388505b /server/src/game.rs | |
parent | 3d13c85ec2e3acbee249b4baf20797cc38a8a121 (diff) | |
download | hurrycurry-7dbb34febaf75572f99fee459a77cf917de05d8f.tar hurrycurry-7dbb34febaf75572f99fee459a77cf917de05d8f.tar.bz2 hurrycurry-7dbb34febaf75572f99fee459a77cf917de05d8f.tar.zst |
Change protocol and server to allow multiple players per connection (untested)
Diffstat (limited to 'server/src/game.rs')
-rw-r--r-- | server/src/game.rs | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/server/src/game.rs b/server/src/game.rs index e0154c4c..6477d9fa 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -79,6 +79,8 @@ pub struct Game { pub environment_effects: HashSet<String>, pub score_changed: bool, pub score: Score, + + pub player_id_counter: PlayerID, } impl Default for Game { @@ -101,6 +103,7 @@ impl Game { score: Score::default(), environment_effects: HashSet::default(), score_changed: false, + player_id_counter: PlayerID(1), } } @@ -272,23 +275,24 @@ impl Game { pub fn packet_in( &mut self, - player: PlayerID, packet: PacketS, replies: &mut Vec<PacketC>, packet_out: &mut VecDeque<PacketC>, ) -> Result<()> { match packet { PacketS::Join { name, character } => { - if self.players.contains_key(&player) { + 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 player.0 < 0 { + let position = if id.0 < 0 { self.data.customer_spawn } else { self.data.chef_spawn }; self.players.insert( - player, + id, Player { item: None, character, @@ -314,13 +318,14 @@ impl Game { ); self.score.players = self.score.players.max(self.players.len()); packet_out.push_back(PacketC::AddPlayer { - id: player, + id, name, position, character, }); + replies.push(PacketC::Joined { id }) } - PacketS::Leave => { + PacketS::Leave { player } => { let p = self .players .remove(&player) @@ -346,6 +351,7 @@ impl Game { pos, boosting, direction, + player, } => { let player = self .players @@ -366,10 +372,7 @@ impl Game { } } } - PacketS::Collide { player, force } => { - packet_out.push_back(PacketC::Collide { player, force }); - } - PacketS::Interact { pos } => { + PacketS::Interact { pos, player } => { let pid = player; let player = self .players @@ -450,7 +453,11 @@ impl Game { ) } } - PacketS::Communicate { message, persist } => { + PacketS::Communicate { + message, + persist, + player, + } => { info!("{player:?} message {message:?}"); if persist { if let Some(player) = self.players.get_mut(&player) { @@ -463,7 +470,7 @@ impl Game { persist, }) } - PacketS::ReplaceHand { item } => { + PacketS::ReplaceHand { item, player } => { let pdata = self .players .get_mut(&player) @@ -592,10 +599,9 @@ impl Game { } } } - for pid in players_auto_release.drain(..) { + for player in players_auto_release.drain(..) { let _ = self.packet_in( - pid, - PacketS::Interact { pos: None }, + PacketS::Interact { pos: None, player }, &mut vec![], packet_out, ); |