From 6c894036b84326347ded75519d9465c3673a779c Mon Sep 17 00:00:00 2001 From: HampusM Date: Mon, 28 Sep 2026 18:20:35 +0200 Subject: refactor(engine): store asset::Events as a sole --- engine/src/asset.rs | 35 +++++++++++++++-------------------- engine/src/rendering/shader.rs | 5 ++++- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/engine/src/asset.rs b/engine/src/asset.rs index 9d69727..04cb385 100644 --- a/engine/src/asset.rs +++ b/engine/src/asset.rs @@ -111,7 +111,7 @@ pub struct Assets import_work_queue: WorkQueue, import_work_msg_receiver: MpscReceiver, import_work_msg_sender: MpscSender, - events: Events, + curr_tick_events: Vec, } impl Assets @@ -129,7 +129,7 @@ impl Assets import_work_queue: WorkQueue::new("asset_importing_work_queue"), import_work_msg_receiver, import_work_msg_sender, - events: Events::default(), + curr_tick_events: Vec::with_capacity(capacity), } } @@ -436,8 +436,7 @@ impl Assets } else { entry.state = AssetState::Ready(index, label.clone()); - self.events - .curr_tick_events + self.curr_tick_events .push(Event::Stored(id, label.into_label())); let waiting_dependants = std::mem::take(&mut entry.waiting_dependants); @@ -448,11 +447,6 @@ impl Assets Handle::from_id(id) } - pub fn events(&self) -> &Events - { - &self.events - } - fn recurse_update_dependants(&mut self, initial_dependants: Vec) { let mut all_dependants = initial_dependants; @@ -496,8 +490,7 @@ impl Assets *state = AssetState::Ready(index, label.clone()); - self.events - .curr_tick_events + self.curr_tick_events .push(Event::Stored(dependant_id, label.into_label())); all_dependants.append(waiting_dependants); @@ -828,18 +821,17 @@ struct IdValid label_hash: LabelHash, } -#[derive(Debug, Default)] +#[derive(Debug, Default, Sole)] pub struct Events { - curr_tick_events: Vec, - last_tick_events: Vec, + last_tick: Vec, } impl Events { - pub fn last_tick_events(&self) -> impl Iterator + pub fn iter_last_tick(&self) -> impl Iterator { - self.last_tick_events.iter() + self.last_tick.iter() } } @@ -952,6 +944,7 @@ impl crate::ecs::extension::Extension for Extension fn collect(self, mut collector: crate::ecs::extension::Collector<'_>) { let _ = collector.add_sole(self.assets); + let _ = collector.add_sole(Events::default()); collector.spawn_declared_entity(&HANDLE_ASSETS_PHASE); @@ -960,17 +953,19 @@ impl crate::ecs::extension::Extension for Extension } } -fn add_received_assets(mut assets: Single) +fn add_received_assets(mut assets: Single, mut events: Single) { let Ok(assets) = assets.get_mut() else { unreachable!(); }; - let Events { curr_tick_events, last_tick_events } = &mut assets.events; + let Ok(events) = events.get_mut() else { + unreachable!(); + }; - std::mem::swap(last_tick_events, curr_tick_events); + std::mem::swap(&mut events.last_tick, &mut assets.curr_tick_events); - curr_tick_events.clear(); + assets.curr_tick_events.clear(); while let Ok(import_work_msg) = assets.import_work_msg_receiver.try_recv() { match import_work_msg { diff --git a/engine/src/rendering/shader.rs b/engine/src/rendering/shader.rs index 2528471..f56a9ae 100644 --- a/engine/src/rendering/shader.rs +++ b/engine/src/rendering/shader.rs @@ -25,6 +25,7 @@ use crate::asset::{ Asset, Assets, Event as AssetEvent, + Events as AssetEvents, Handle as AssetHandle, Id as AssetId, Submitter as AssetSubmitter, @@ -1387,6 +1388,7 @@ fn initialize(mut assets: Single) -> Result<(), crate::Error> fn load_modules( mut context: Single, assets: Single, + asset_events: Single, ) -> Result<(), crate::Error> { let Ok(context) = context.get_mut() else { @@ -1394,8 +1396,9 @@ fn load_modules( }; let assets = assets.get()?; + let asset_events = asset_events.get()?; - for AssetEvent::Stored(asset_id, asset_label) in assets.events().last_tick_events() { + for AssetEvent::Stored(asset_id, asset_label) in asset_events.iter_last_tick() { let asset_handle = AssetHandle::::from_id(*asset_id); if !assets.is_loaded_and_has_type(&asset_handle) { -- cgit v1.2.3-18-g5258