diff options
Diffstat (limited to 'server/src/server.rs')
-rw-r--r-- | server/src/server.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/server/src/server.rs b/server/src/server.rs index f4ccbf35..faac080f 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -17,7 +17,7 @@ */ use crate::{ data::Serverdata, - entity::{Entity, EntityContext, EntityT}, + entity::{Entities, EntityContext}, interaction::{interact, tick_slot, InteractEffect, TickEffect}, }; use anyhow::{anyhow, bail, Result}; @@ -36,7 +36,7 @@ use std::{ pub struct ServerState { pub data: Arc<Serverdata>, - entities: Vec<Entity>, + pub entities: Entities, pub lobby: bool, pub player_id_counter: PlayerID, pub score_changed: bool, @@ -224,12 +224,13 @@ impl ServerState { impl Server<'_> { pub fn load( &mut self, - (gamedata, serverdata): (Gamedata, Serverdata), + (gamedata, serverdata, entities): (Gamedata, Serverdata, Entities), timer: Option<Duration>, packet_out: &mut VecDeque<PacketC>, ) { self.game.load(gamedata, &serverdata, timer, packet_out); self.state.data = serverdata.into(); + self.state.entities = entities; } pub fn join_player( @@ -585,16 +586,21 @@ impl Server<'_> { ); } + let mut packet_in = VecDeque::new(); for entity in self.state.entities.iter_mut() { if let Err(e) = entity.tick(EntityContext { game: self.game, packet_out, score_changed: &mut self.state.score_changed, + packet_in: &mut packet_in, dt, }) { warn!("entity tick failed: {e}") } } + for p in packet_in.drain(..) { + let _ = self.packet_in(p, &mut vec![], packet_out); + } let now = Instant::now(); |