aboutsummaryrefslogtreecommitdiff
path: root/server/src/entity
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/entity')
-rw-r--r--server/src/entity/bot.rs10
-rw-r--r--server/src/entity/pedestrians.rs4
-rw-r--r--server/src/entity/tram.rs24
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() {