diff --git a/fyrox-graph/src/constructor.rs b/fyrox-graph/src/constructor.rs index f1f3dfc11..cf7085ccf 100644 --- a/fyrox-graph/src/constructor.rs +++ b/fyrox-graph/src/constructor.rs @@ -19,6 +19,7 @@ // SOFTWARE. use fxhash::FxHashMap; +use fyrox_core::parking_lot::MappedMutexGuard; use fyrox_core::pool::Handle; use fyrox_core::uuid::Uuid; use fyrox_core::{ @@ -178,17 +179,27 @@ impl GraphNodeConstructorContainer { .map(|c| (c.default)()) } + pub fn try_get_variant( + &self, + constructor_variant_id: &ConstructorVariantId, + ) -> Option>> { + let map = self.map.safe_lock(); + MutexGuard::try_map(map, |v| { + let variants = v.get_mut(&constructor_variant_id.type_uuid)?; + variants + .variants + .get_mut(constructor_variant_id.variant_index) + }) + .ok() + } + pub fn try_create_variant( &self, constructor_variant_id: &ConstructorVariantId, ctx: &mut Ctx, ) -> Option> { - let map = self.map.safe_lock(); - let variants = map.get(&constructor_variant_id.type_uuid)?; - let variant = variants - .variants - .get(constructor_variant_id.variant_index)?; - Some((variant.constructor)(ctx)) + self.try_get_variant(constructor_variant_id) + .map(|variant| (variant.constructor)(ctx)) } /// Returns total amount of constructors.