diff options
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/commands.rs | 10 | ||||
-rw-r--r-- | server/src/entity/bot.rs | 8 | ||||
-rw-r--r-- | server/src/entity/customers.rs | 8 | ||||
-rw-r--r-- | server/src/entity/mod.rs | 12 | ||||
-rw-r--r-- | server/src/entity/pedestrians.rs | 11 | ||||
-rw-r--r-- | server/src/entity/tram.rs | 4 | ||||
-rw-r--r-- | server/src/main.rs | 4 | ||||
-rw-r--r-- | server/src/server.rs | 8 |
8 files changed, 41 insertions, 24 deletions
diff --git a/server/src/commands.rs b/server/src/commands.rs index b5645c8c..5be9e662 100644 --- a/server/src/commands.rs +++ b/server/src/commands.rs @@ -24,7 +24,9 @@ use crate::{ use anyhow::Result; use clap::{Parser, ValueEnum}; use hurrycurry_bot::algos::ALGO_CONSTRUCTORS; -use hurrycurry_protocol::{DocumentElement, Menu, Message, PacketC, PlayerClass, PlayerID}; +use hurrycurry_protocol::{ + Character, DocumentElement, Menu, Message, PacketC, PlayerClass, PlayerID, +}; use std::{fmt::Write, time::Duration}; #[derive(Parser)] @@ -242,7 +244,11 @@ impl Server { let algo = cons(); self.entities.push(Box::new(BotDriver::new( format!("{}-bot", name.unwrap_or((*aname).to_owned())), - 51, + Character { + color: 0, + hairstyle: 0, + headwear: 0, + }, PlayerClass::Bot, algo, ))); diff --git a/server/src/entity/bot.rs b/server/src/entity/bot.rs index 922cc55e..8d3994cb 100644 --- a/server/src/entity/bot.rs +++ b/server/src/entity/bot.rs @@ -18,7 +18,7 @@ use super::{Entity, EntityContext}; use anyhow::Result; use hurrycurry_bot::{BotAlgo, DynBotAlgo}; -use hurrycurry_protocol::{Hand, PacketS, PlayerClass, PlayerID}; +use hurrycurry_protocol::{Character, Hand, PacketS, PlayerClass, PlayerID}; use log::info; use rand::random; use std::any::Any; @@ -27,14 +27,14 @@ pub type DynBotDriver = BotDriver<DynBotAlgo>; pub struct BotDriver<T> { algo: T, - join_data: Option<(String, i32, PlayerClass)>, + join_data: Option<(String, Character, PlayerClass)>, id: PlayerID, interacting: bool, left: bool, } impl<T: BotAlgo> BotDriver<T> { - pub fn new(name: String, character: i32, class: PlayerClass, algo: T) -> Self { + pub fn new(name: String, character: Character, class: PlayerClass, algo: T) -> Self { Self { algo, id: PlayerID(0), @@ -51,7 +51,7 @@ 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:?}, {character})", self.id); + info!("spawn {:?} ({name:?})", self.id); c.packet_in.push_back(PacketS::Join { name, character, diff --git a/server/src/entity/customers.rs b/server/src/entity/customers.rs index 02051901..05246a54 100644 --- a/server/src/entity/customers.rs +++ b/server/src/entity/customers.rs @@ -18,7 +18,7 @@ use super::{bot::BotDriver, Entity, EntityContext}; use anyhow::Result; use hurrycurry_bot::algos::{Customer, CustomerConfig}; -use hurrycurry_protocol::PlayerClass; +use hurrycurry_protocol::{Character, PlayerClass}; use rand::random; pub struct Customers { @@ -56,7 +56,11 @@ impl Entity for Customers { self.spawn_cooldown = 10. + random::<f32>() * 10.; let bot = BotDriver::new( "".to_string(), - -1 - random::<u16>() as i32, + Character { + color: random(), + hairstyle: random(), + headwear: 0, + }, PlayerClass::Customer, Customer::new(CustomerConfig { unknown_order: !c.serverdata.flags.disable_unknown_orders, diff --git a/server/src/entity/mod.rs b/server/src/entity/mod.rs index 75ea0e9b..2eadc0ff 100644 --- a/server/src/entity/mod.rs +++ b/server/src/entity/mod.rs @@ -42,7 +42,7 @@ use environment_effect::{EnvironmentController, EnvironmentEffect, EnvironmentEf use hurrycurry_client_lib::Game; use hurrycurry_protocol::{ glam::{IVec2, Vec2}, - PacketC, PacketS, PlayerID, + Character, PacketC, PacketS, PlayerID, }; use item_portal::ItemPortal; use player_portal::PlayerPortal; @@ -142,7 +142,7 @@ pub enum EntityDecl { }, Tram { length: usize, - character: Option<i32>, + color: Option<i32>, points: Vec<Vec2>, spacing: f32, smoothing: f32, @@ -219,13 +219,17 @@ pub fn construct_entity( EntityDecl::Environment(names) => Box::new(EnvironmentController(names)), EntityDecl::Tram { length, - character, + color, points, smoothing, spacing, } => Box::new(Tram { length, - character: character.unwrap_or(51), + character: Character { + color: color.unwrap_or_default(), + hairstyle: 0, + headwear: 0, + }, ids: Vec::new(), points, progress: 0., diff --git a/server/src/entity/pedestrians.rs b/server/src/entity/pedestrians.rs index 9b433ded..64adf57b 100644 --- a/server/src/entity/pedestrians.rs +++ b/server/src/entity/pedestrians.rs @@ -1,5 +1,3 @@ -use std::collections::HashMap; - /* Hurry Curry! - a game about cooking Copyright 2025 metamuffin @@ -19,9 +17,10 @@ use std::collections::HashMap; */ use super::{Entity, EntityContext}; use anyhow::Result; -use hurrycurry_protocol::{glam::Vec2, PacketS, PlayerClass, PlayerID}; +use hurrycurry_protocol::{glam::Vec2, Character, PacketS, PlayerClass, PlayerID}; use rand::{random, rng}; use rand_distr::Distribution; +use std::collections::HashMap; pub struct Pedestrians { pub players: HashMap<PlayerID, usize>, @@ -40,7 +39,11 @@ impl Entity for Pedestrians { let id = PlayerID(random()); c.packet_in.push_back(PacketS::Join { name: "Pedestrian".to_string(), - character: 0, + character: Character { + color: random(), + hairstyle: random(), + headwear: 0, + }, class: PlayerClass::Customer, id: Some(id), position: self.points.get(0).copied(), diff --git a/server/src/entity/tram.rs b/server/src/entity/tram.rs index 26a191aa..76ce6dbd 100644 --- a/server/src/entity/tram.rs +++ b/server/src/entity/tram.rs @@ -17,12 +17,12 @@ */ use super::{Entity, EntityContext}; use anyhow::Result; -use hurrycurry_protocol::{glam::Vec2, PacketS, PlayerClass, PlayerID}; +use hurrycurry_protocol::{glam::Vec2, Character, PacketS, PlayerClass, PlayerID}; use rand::random; pub struct Tram { pub length: usize, - pub character: i32, + pub character: Character, pub ids: Vec<PlayerID>, pub points: Vec<Vec2>, pub progress: f32, diff --git a/server/src/main.rs b/server/src/main.rs index cc5bcb52..d476fc30 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -304,7 +304,7 @@ async fn run(args: Args) -> anyhow::Result<()> { #[cfg(test)] mod test { - use hurrycurry_protocol::{PacketS, PlayerClass, PlayerID}; + use hurrycurry_protocol::{Character, PacketS, PlayerClass, PlayerID}; use hurrycurry_server::{data::DATA_DIR, server::Server, ConnectionID}; use std::future::Future; use tokio::sync::broadcast; @@ -360,7 +360,7 @@ mod test { ConnectionID(conn.try_into().unwrap()), PacketS::Join { name: format!("test {conn}"), - character: 1, + character: Character::default(), class: PlayerClass::Chef, id: None, position: None, diff --git a/server/src/server.rs b/server/src/server.rs index 3823c0ca..c30f54a4 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -28,8 +28,8 @@ use hurrycurry_client_lib::{Game, Involvement, Item, Player, Tile}; use hurrycurry_protocol::{ glam::{IVec2, Vec2}, movement::MovementBase, - Gamedata, Hand, ItemLocation, Menu, MessageTimeout, PacketC, PacketS, PlayerClass, PlayerID, - Score, TileIndex, + Character, Gamedata, Hand, ItemLocation, Menu, MessageTimeout, PacketC, PacketS, PlayerClass, + PlayerID, Score, TileIndex, }; use log::{info, warn}; use rand::random; @@ -73,7 +73,7 @@ pub trait GameServerExt { &mut self, id: PlayerID, name: String, - character: i32, + character: Character, class: PlayerClass, serverdata: &Serverdata, custom_position: Option<Vec2>, @@ -245,7 +245,7 @@ impl GameServerExt for Game { &mut self, id: PlayerID, name: String, - character: i32, + character: Character, class: PlayerClass, serverdata: &Serverdata, custom_position: Option<Vec2>, |