aboutsummaryrefslogtreecommitdiff
path: root/server/src/game.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-06 12:39:57 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-06 12:39:57 +0200
commitc56431eb8fcb1ec6758a5aa3cdbba3892989085f (patch)
treeef3d7b1e5420b231e85f89cb8437c9581bb81494 /server/src/game.rs
parent8360741499e11767aa3cbbec0fae43ddaab706f9 (diff)
downloadhurrycurry-c56431eb8fcb1ec6758a5aa3cdbba3892989085f.tar
hurrycurry-c56431eb8fcb1ec6758a5aa3cdbba3892989085f.tar.bz2
hurrycurry-c56431eb8fcb1ec6758a5aa3cdbba3892989085f.tar.zst
conveyors
Diffstat (limited to 'server/src/game.rs')
-rw-r--r--server/src/game.rs27
1 files changed, 24 insertions, 3 deletions
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<PacketC>,
demand: Option<DemandState>,
pub points: i64,
+ entities: Vec<DynEntity>,
end: Option<Instant>,
}
@@ -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<TileIndex> for Tile {
}
}
-fn interact_effect(
+pub fn interact_effect(
data: &Gamedata,
edge: bool,
this: &mut Option<Item>,