diff --git a/engine/src/scene/scene/scene_base.rs b/engine/src/scene/scene/scene_base.rs index 96d6cca..6010e6a 100644 --- a/engine/src/scene/scene/scene_base.rs +++ b/engine/src/scene/scene/scene_base.rs @@ -178,14 +178,6 @@ impl Scene { Ok(scene) } - - pub fn device(&self) -> &Arc { - &self.device - } - - pub fn queue(&self) -> &Arc> { - &self.queue - } } // object handling @@ -258,6 +250,8 @@ impl Scene { pub fn as_scene_contents(&mut self) -> SceneContents<'_> { SceneContents::new( + &self.device, + &self.queue, self.render_type, self.frame_time, self.start_time, @@ -275,6 +269,8 @@ impl Scene { let mut temp_events = self.events.clone_from_register(); let mut scene_content = SceneContents::new( + &self.device, + &self.queue, self.render_type, self.frame_time, self.start_time, @@ -328,6 +324,8 @@ impl Scene { pub fn execute_archetype(&mut self, name: impl ToString) -> Result<()> { let mut scene_content = SceneContents::new( + &self.device, + &self.queue, self.render_type, self.frame_time, self.start_time, @@ -657,6 +655,14 @@ impl Scene { } impl SceneEntities for Scene { + fn device(&self) -> &Arc { + &self.device + } + + fn queue(&self) -> &Arc> { + &self.queue + } + fn entity(&self, entity: Entity) -> std::result::Result<&EntityObject, EntityNotFoundError> { self.entities .get(&entity) @@ -810,6 +816,8 @@ impl SceneEntities for Scene { let p = map as *const Box as *mut Box; let mut scene_content = SceneContents::new( + &self.device, + &self.queue, self.render_type, self.frame_time, self.start_time, diff --git a/engine/src/scene/scene/scene_content.rs b/engine/src/scene/scene/scene_content.rs index e95090d..11c05fa 100644 --- a/engine/src/scene/scene/scene_content.rs +++ b/engine/src/scene/scene/scene_content.rs @@ -2,6 +2,7 @@ use std::{ any::{Any, TypeId}, collections::HashMap, ptr::NonNull, + sync::{Arc, Mutex}, time::{Duration, Instant}, }; @@ -36,6 +37,9 @@ impl std::fmt::Display for EntityNotFoundError { impl std::error::Error for EntityNotFoundError {} pub trait SceneEntities { + fn device(&self) -> &Arc; + fn queue(&self) -> &Arc>; + fn entity(&self, entity: Entity) -> std::result::Result<&EntityObject, EntityNotFoundError>; fn entity_mut( &mut self, @@ -92,6 +96,9 @@ enum ComponentChange { } pub struct SceneContents<'a> { + device: &'a Arc, + queue: &'a Arc>, + render_type: SceneType, frame_time: Duration, @@ -113,6 +120,8 @@ pub struct SceneContents<'a> { impl<'a> SceneContents<'a> { pub(crate) fn new( + device: &'a Arc, + queue: &'a Arc>, render_type: SceneType, frame_time: Duration, start_time: Instant, @@ -128,6 +137,9 @@ impl<'a> SceneContents<'a> { resources: &'a mut Resources, ) -> Self { Self { + device, + queue, + screen_extents, frame_time, @@ -345,6 +357,14 @@ impl EntityChanges { } impl<'a> SceneEntities for SceneContents<'a> { + fn device(&self) -> &Arc { + &self.device + } + + fn queue(&self) -> &Arc> { + &self.queue + } + fn entity(&self, entity: Entity) -> std::result::Result<&EntityObject, EntityNotFoundError> { self.entities.entity(entity) }