diff options
Diffstat (limited to 'server/src/entity')
| -rw-r--r-- | server/src/entity/bot.rs | 10 | ||||
| -rw-r--r-- | server/src/entity/pedestrians.rs | 4 | ||||
| -rw-r--r-- | server/src/entity/tram.rs | 24 |
3 files changed, 17 insertions, 21 deletions
diff --git a/server/src/entity/bot.rs b/server/src/entity/bot.rs index 26ae77a6..78b300b6 100644 --- a/server/src/entity/bot.rs +++ b/server/src/entity/bot.rs @@ -19,8 +19,8 @@ use super::{Entity, EntityContext}; use anyhow::Result; use hurrycurry_bot::{BotAlgo, DynBotAlgo}; use hurrycurry_protocol::{Character, Hand, PacketS, PlayerClass, PlayerID}; -use log::info; -use std::{any::Any, random::random}; +use log::debug; +use std::any::Any; pub type DynBotDriver = BotDriver<DynBotAlgo>; @@ -49,8 +49,8 @@ impl<T: BotAlgo + Any> Entity for BotDriver<T> { } fn tick(&mut self, c: EntityContext<'_>) -> Result<()> { if let Some((name, character, class)) = self.join_data.take() { - self.id = PlayerID(random(..)); // TODO bad code, can collide - info!("spawn {:?} ({name:?})", self.id); + self.id = c.game.get_unused_player_id(); // TODO clashes when multiple bots join in the same tick + debug!("join {}", self.id); c.packet_in.push_back(PacketS::Join { name, character, @@ -62,7 +62,7 @@ impl<T: BotAlgo + Any> Entity for BotDriver<T> { let input = self.algo.tick(self.id, c.game, c.dt); if input.leave { - info!("leave {:?}", self.id); + debug!("leave {}", self.id); c.packet_in.push_back(PacketS::Leave { player: self.id }); self.left = true; return Ok(()); diff --git a/server/src/entity/pedestrians.rs b/server/src/entity/pedestrians.rs index cc5d6d90..edfe5ca3 100644 --- a/server/src/entity/pedestrians.rs +++ b/server/src/entity/pedestrians.rs @@ -38,8 +38,9 @@ impl Entity for Pedestrians { fn tick(&mut self, c: EntityContext<'_>) -> Result<()> { self.cooldown -= c.dt; if self.cooldown <= 0. && self.players.len() < 32 { - let id = PlayerID(random(..)); + let id = c.game.get_unused_player_id(); c.packet_in.push_back(PacketS::Join { + id: Some(id), name: "Pedestrian".to_string(), character: Character { color: random(..), @@ -47,7 +48,6 @@ impl Entity for Pedestrians { headwear: 0, }, class: PlayerClass::Customer, - id: Some(id), position: self.points.first().copied(), }); self.players.insert(id, 0); diff --git a/server/src/entity/tram.rs b/server/src/entity/tram.rs index 391d16a9..2d6aa8c1 100644 --- a/server/src/entity/tram.rs +++ b/server/src/entity/tram.rs @@ -1,5 +1,3 @@ -use std::random::random; - /* Hurry Curry! - a game about cooking Copyright (C) 2025 Hurry Curry! Contributors @@ -36,18 +34,16 @@ impl Entity for Tram { false } fn tick(&mut self, c: EntityContext<'_>) -> Result<()> { - if self.ids.is_empty() { - for i in 0..self.length { - let id = PlayerID(random(..)); - c.packet_in.push_back(PacketS::Join { - name: format!("Tram {i}"), - character: self.character, - class: PlayerClass::Tram, - id: Some(id), - position: self.points.first().copied(), - }); - self.ids.push(id); - } + if self.ids.len() < self.length { + let id = c.game.get_unused_player_id(); + c.packet_in.push_back(PacketS::Join { + id: Some(id), + name: format!("Tram {}", self.ids.len()), + character: self.character, + class: PlayerClass::Tram, + position: self.points.first().copied(), + }); + self.ids.push(id); } for (i, id) in self.ids.iter().enumerate() { |