diff options
Diffstat (limited to 'engine/src/asset.rs')
| -rw-r--r-- | engine/src/asset.rs | 35 |
1 files changed, 15 insertions, 20 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<ImportWorkUserData>, import_work_msg_receiver: MpscReceiver<ImportWorkMessage>, import_work_msg_sender: MpscSender<ImportWorkMessage>, - events: Events, + curr_tick_events: Vec<Event>, } 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<Id>) { 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<Event>, - last_tick_events: Vec<Event>, + last_tick: Vec<Event>, } impl Events { - pub fn last_tick_events(&self) -> impl Iterator<Item = &Event> + pub fn iter_last_tick(&self) -> impl Iterator<Item = &Event> { - 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<Assets>) +fn add_received_assets(mut assets: Single<Assets>, mut events: Single<Events>) { 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 { |
