diff options
author | metamuffin <metamuffin@disroot.org> | 2024-09-16 15:33:52 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-09-16 15:34:01 +0200 |
commit | a24dd4b81ad8f87d34f1c55efa17cd3840d2ac5e (patch) | |
tree | 7ffdf92a44f73d6f7c5db4a30f2254117dc8f49b /server/src/server.rs | |
parent | 8f949e36143eabd8b176dbd16c3d90045d256a74 (diff) | |
download | hurrycurry-a24dd4b81ad8f87d34f1c55efa17cd3840d2ac5e.tar hurrycurry-a24dd4b81ad8f87d34f1c55efa17cd3840d2ac5e.tar.bz2 hurrycurry-a24dd4b81ad8f87d34f1c55efa17cd3840d2ac5e.tar.zst |
generate index for passive recipes by input for faster lookup
Diffstat (limited to 'server/src/server.rs')
-rw-r--r-- | server/src/server.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/server/src/server.rs b/server/src/server.rs index 6a310254..fd7db5b5 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -16,7 +16,7 @@ */ use crate::{ - data::{DataIndex, Serverdata}, + data::{index::GamedataIndex, DataIndex, Serverdata}, entity::{Entities, EntityContext}, interaction::{interact, tick_slot}, scoreboard::ScoreboardStore, @@ -52,6 +52,7 @@ pub struct Server { pub tx: Sender<PacketC>, pub connections: HashMap<ConnectionID, HashSet<PlayerID>>, pub scoreboard: ScoreboardStore, + pub gamedata_index: GamedataIndex, } pub trait GameServerExt { @@ -304,7 +305,8 @@ impl Server { packet_out: VecDeque::new(), connections: HashMap::new(), data: Serverdata::default().into(), - entities: vec![], + gamedata_index: GamedataIndex::default(), + entities: Vec::new(), player_id_counter: PlayerID(1), score_changed: false, packet_loopback: VecDeque::new(), @@ -321,8 +323,6 @@ impl Server { (gamedata, serverdata, entities): (Gamedata, Serverdata, Entities), timer: Option<Duration>, ) { - self.game - .load(gamedata, &serverdata, timer, &mut self.packet_out); for mut e in self.entities.drain(..) { e.destructor(EntityContext { game: &mut self.game, @@ -334,6 +334,9 @@ impl Server { load_map: &mut None, }); } + self.game + .load(gamedata, &serverdata, timer, &mut self.packet_out); + self.gamedata_index.update(&self.game.data); self.data = serverdata.into(); self.entities = entities; } @@ -579,6 +582,7 @@ impl Server { tick_slot( dt, &self.game.data, + &self.gamedata_index, Some(tile.kind), &mut tile.item, ItemLocation::Tile(pos), @@ -618,6 +622,7 @@ impl Server { tick_slot( dt, &self.game.data, + &self.gamedata_index, None, &mut player.item, ItemLocation::Player(pid), |