From a8376aab4159a449a205de3ed7fdcaa5f6ca6369 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 13 Aug 2024 13:25:14 +0200 Subject: access entities as trait object --- server/src/server.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'server/src/server.rs') 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, - entities: Vec, + 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, packet_out: &mut VecDeque, ) { 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(); -- cgit v1.2.3-70-g09d2