aboutsummaryrefslogtreecommitdiff
path: root/server/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server.rs')
-rw-r--r--server/src/server.rs12
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();