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