From 3a2cbf0208635866e6da56091ce8e046c0bebb35 Mon Sep 17 00:00:00 2001 From: HampusM Date: Thu, 11 Sep 2025 18:42:53 +0200 Subject: feat(ecs): add get_sole fn to World --- ecs/src/lib.rs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'ecs/src/lib.rs') diff --git a/ecs/src/lib.rs b/ecs/src/lib.rs index 6f49a91..e9494a7 100644 --- a/ecs/src/lib.rs +++ b/ecs/src/lib.rs @@ -33,7 +33,7 @@ use crate::query::{ TermsBuilderInterface, MAX_TERM_CNT as QUERY_MAX_TERM_CNT, }; -use crate::sole::Sole; +use crate::sole::{Single, Sole}; use crate::stats::Stats; use crate::system::observer::{Observer, WrapperComponent as ObserverWrapperComponent}; use crate::system::{Callbacks, Metadata as SystemMetadata, System, SystemComponent}; @@ -212,6 +212,11 @@ impl World Some(EntityHandle::new(archetype, entity, self)) } + pub fn get_sole(&self) -> Option> + { + Some(Single::new(self.data.sole_storage.get::()?)) + } + pub fn event_submitter(&self) -> EventSubmitter<'_> { EventSubmitter::new(self) @@ -246,17 +251,9 @@ impl World return StepResult::Stop; } - let mut stats_lock = self - .data - .sole_storage - .get::() - .expect("No stats sole found") - .write_nonblock() - .expect("Failed to aquire read-write stats sole lock"); - - let stats = stats_lock - .downcast_mut::() - .expect("Casting stats sole to Stats type failed"); + let Some(mut stats) = self.get_sole::() else { + unreachable!(); // Reason: is added in World::new + }; stats.current_tick += 1; -- cgit v1.2.3-18-g5258