aboutsummaryrefslogtreecommitdiff
path: root/server/src/customer
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-20 01:38:00 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-23 19:21:49 +0200
commit720bb2e4f53d4467832ba59f97c9b6b6786181e7 (patch)
tree10ea600436adf2c101d9a1ccbf64808414bbc354 /server/src/customer
parent6f7b995dd9fa3bea95be8c24e2452f015b410839 (diff)
downloadhurrycurry-720bb2e4f53d4467832ba59f97c9b6b6786181e7.tar
hurrycurry-720bb2e4f53d4467832ba59f97c9b6b6786181e7.tar.bz2
hurrycurry-720bb2e4f53d4467832ba59f97c9b6b6786181e7.tar.zst
type safe indecies
Diffstat (limited to 'server/src/customer')
-rw-r--r--server/src/customer/mod.rs58
1 files changed, 28 insertions, 30 deletions
diff --git a/server/src/customer/mod.rs b/server/src/customer/mod.rs
index ecd99250..4c557d41 100644
--- a/server/src/customer/mod.rs
+++ b/server/src/customer/mod.rs
@@ -47,7 +47,7 @@ struct Customer {
pub async fn customer(game: Arc<RwLock<Game>>, mut grx: broadcast::Receiver<PacketC>) {
let mut state = CustomerManager {
- customer_id_counter: 0,
+ customer_id_counter: PlayerID(0),
walkable: Default::default(),
chairs: Default::default(),
items: Default::default(),
@@ -56,14 +56,14 @@ pub async fn customer(game: Arc<RwLock<Game>>, mut grx: broadcast::Receiver<Pack
data: Gamedata::default(),
},
};
- let initial = game.write().await.prime_client(-1);
+ let initial = game.write().await.prime_client(PlayerID(-1));
for p in initial {
match p {
PacketC::Init { data, .. } => {
state.demand.data = data;
}
PacketC::UpdateMap { pos, tile, .. } => {
- let tilename = &state.demand.data.tile_names[tile];
+ let tilename = state.demand.data.tile_name(tile);
if tilename == "floor" || tilename == "door" || tilename == "chair" {
state.walkable.insert(pos);
}
@@ -119,14 +119,14 @@ impl DemandState {
pub fn generate_demand(&self) -> DemandIndex {
// TODO insert sofa magic formula
- random::<usize>() % self.data.demands.len()
+ DemandIndex(random::<usize>() % self.data.demands.len())
}
}
impl CustomerManager {
pub fn tick(&mut self, packets_out: &mut Vec<(PlayerID, PacketS)>, dt: f32) {
if self.customers.len() < self.demand.target_customer_count() {
- self.customer_id_counter -= 1;
+ self.customer_id_counter.0 -= 1;
let id = self.customer_id_counter;
packets_out.push((
id,
@@ -164,7 +164,7 @@ impl CustomerManager {
packets_out.push((
id,
PacketS::Communicate {
- message: Some(Message::Item(self.demand.data.demands[demand].from)),
+ message: Some(Message::Item(self.demand.data.demand(demand).from)),
},
));
p.state = CustomerState::Waiting {
@@ -174,41 +174,39 @@ impl CustomerManager {
}
}
CustomerState::Waiting { chair, demand } => {
+ let demand = &self.demand.data.demand(*demand);
let demand_pos = [IVec2::NEG_X, IVec2::NEG_Y, IVec2::X, IVec2::Y]
.into_iter()
.find_map(|off| {
let pos = *chair + off;
- if self.items.get(&pos) == Some(demand) {
+ if self.items.get(&pos) == Some(&demand.from) {
Some(pos)
} else {
None
}
});
if let Some(pos) = demand_pos {
- let demand = &self.demand.data.demands[*demand];
- if self.items.get(&pos) == Some(&demand.from) {
- packets_out.push((id, PacketS::Communicate { message: None }));
- for edge in [true, false] {
- packets_out.push((id, PacketS::Interact { pos, edge }))
- }
- packets_out.push((
- id,
- PacketS::ReplaceHand {
- item: Some(demand.to),
- },
- ));
- for edge in [true, false] {
- packets_out.push((id, PacketS::Interact { pos, edge }))
- }
- let path = find_path(
- &self.walkable,
- p.movement.position.as_ivec2(),
- self.demand.data.customer_spawn.as_ivec2(),
- )
- .expect("no path to exit");
- *self.chairs.get_mut(&chair).unwrap() = true;
- p.state = CustomerState::Exiting { path }
+ packets_out.push((id, PacketS::Communicate { message: None }));
+ for edge in [true, false] {
+ packets_out.push((id, PacketS::Interact { pos, edge }))
+ }
+ packets_out.push((
+ id,
+ PacketS::ReplaceHand {
+ item: Some(demand.to),
+ },
+ ));
+ for edge in [true, false] {
+ packets_out.push((id, PacketS::Interact { pos, edge }))
}
+ let path = find_path(
+ &self.walkable,
+ p.movement.position.as_ivec2(),
+ self.demand.data.customer_spawn.as_ivec2(),
+ )
+ .expect("no path to exit");
+ *self.chairs.get_mut(&chair).unwrap() = true;
+ p.state = CustomerState::Exiting { path }
}
debug!("waiting")
}