From c56431eb8fcb1ec6758a5aa3cdbba3892989085f Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 6 Jul 2024 12:39:57 +0200 Subject: conveyors --- server/src/game.rs | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'server/src/game.rs') diff --git a/server/src/game.rs b/server/src/game.rs index 838a71e4..13ee5410 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -18,6 +18,7 @@ use crate::{ customer::DemandState, data::Gamedata, + entity::{construct_entity, DynEntity}, interaction::{interact, tick_slot, InteractEffect, TickEffect}, protocol::{ ItemIndex, ItemLocation, Message, PacketC, PacketS, PlayerID, RecipeIndex, TileIndex, @@ -68,6 +69,7 @@ pub struct Game { packet_out: VecDeque, demand: Option, pub points: i64, + entities: Vec, end: Option, } @@ -76,10 +78,11 @@ impl Game { Self { data: Gamedata::default().into(), packet_out: Default::default(), - players: Default::default(), - tiles: Default::default(), + players: HashMap::new(), + tiles: HashMap::new(), demand: None, end: None, + entities: vec![], points: 0, } } @@ -112,6 +115,12 @@ impl Game { self.data = gamedata.into(); self.points = 0; self.end = timer.map(|dur| Instant::now() + dur); + self.entities = self + .data + .entities + .iter() + .map(|decl| construct_entity(decl)) + .collect(); for (&p, (tile, item)) in &self.data.initial_map { self.tiles.insert( @@ -476,6 +485,18 @@ impl Game { } } + for entity in &mut self.entities { + if let Err(e) = entity.tick( + &self.data, + &mut self.points, + &mut self.packet_out, + &mut self.tiles, + dt, + ) { + warn!("entity tick failed: {e}") + } + } + return self.end.map(|t| t < Instant::now()).unwrap_or_default(); } } @@ -486,7 +507,7 @@ impl From for Tile { } } -fn interact_effect( +pub fn interact_effect( data: &Gamedata, edge: bool, this: &mut Option, -- cgit v1.2.3-70-g09d2