diff --git a/context/src/core/context.rs b/context/src/core/context.rs index fe9b965..b50037c 100644 --- a/context/src/core/context.rs +++ b/context/src/core/context.rs @@ -6,7 +6,7 @@ use super::vulkancore::VulkanCore; #[cfg(feature = "sound")] use audio::SoundHandler; -use ecs::World; +use ecs::{Resource, World, resources::Resource as ResourceTrait}; use crate::prelude::*; use anyhow::Result; @@ -22,6 +22,7 @@ use std::rc::Rc; use std::sync::{Arc, Mutex, MutexGuard, RwLock, RwLockReadGuard, RwLockWriteGuard}; use std::time::{Duration, Instant}; +#[derive(Resource)] pub struct Context { core: VulkanCore, pub(crate) presentation: PresentationCore, @@ -59,7 +60,7 @@ impl Context { pub fn next_frame<'a, C, F>(&mut self, world: &mut World, mut f: F) -> Result where - C: Send + Sync + 'static, + C: ResourceTrait + Send + Sync + 'static, F: FnMut(&mut World, &mut C, Event<'_>) -> Result<()> + Send + Sync + 'a, { let render_core = self.render_core.clone(); diff --git a/engine/src/assets/asset_manager.rs b/engine/src/assets/asset_manager.rs index 8009d39..9e918ba 100644 --- a/engine/src/assets/asset_manager.rs +++ b/engine/src/assets/asset_manager.rs @@ -3,11 +3,13 @@ use crate::prelude::*; use anyhow::Result; use asset::*; use assetpath::AssetPath; +use ecs::Resource; use std::collections::HashMap; use std::sync::{Arc, RwLock}; use std::thread; +#[derive(Resource)] pub struct AssetManager { gltf_directory: AssetPath, diff --git a/engine/src/engine/engine.rs b/engine/src/engine/engine.rs index 2b5f5c9..cf413b7 100644 --- a/engine/src/engine/engine.rs +++ b/engine/src/engine/engine.rs @@ -6,6 +6,7 @@ use super::engine_settings::EngineSettings; use anyhow::Result; use assetpath::AssetPath; use context::prelude::cgmath::vec3; +use ecs::{Resource, resources::Resource as ResourceTrait}; use crate::assets::asset_manager::AssetManager; use crate::prelude::*; @@ -13,6 +14,7 @@ use crate::prelude::*; use std::collections::HashMap; use std::sync::Arc; +#[derive(Resource)] pub struct GuiHandlerRenderer; impl TScene for GuiHandlerRenderer { @@ -44,12 +46,13 @@ impl TScene for GuiHandlerRenderer { } } +#[derive(Resource)] pub struct Engine { pub(crate) resource_base_path: String, } impl Engine { - pub fn new( + pub fn new( #[allow(unused)] mut create_info: EngineCreateInfo<'_>, world: &mut WorldBuilder, ) -> Result<()> { @@ -248,7 +251,7 @@ impl Engine { } impl Engine { - fn main_system(world: &mut World) -> Result { + fn main_system(world: &mut World) -> Result { let gui_handler = world.resources.get_mut_unchecked::(); let input_map = world.resources.get_unchecked::(); let context = world.resources.get_unchecked::(); diff --git a/engine/src/engine/engine_event_handling.rs b/engine/src/engine/engine_event_handling.rs index 1cbdf92..6e9a925 100644 --- a/engine/src/engine/engine_event_handling.rs +++ b/engine/src/engine/engine_event_handling.rs @@ -1,5 +1,6 @@ use crate::prelude::*; use anyhow::Result; +use ecs::Resource; use std::collections::HashMap; #[derive(Debug)] @@ -31,6 +32,7 @@ pub trait EventConsumer: Send + Sync + 'static { fn event(&mut self, world: &mut World, event: EngineEvent<'_>) -> Result<()>; } +#[derive(Resource)] pub struct InputMap { pub direction_mapping: HashMap, } diff --git a/engine/src/engine/engine_settings.rs b/engine/src/engine/engine_settings.rs index 18c7ac6..c38d312 100644 --- a/engine/src/engine/engine_settings.rs +++ b/engine/src/engine/engine_settings.rs @@ -1,5 +1,6 @@ use anyhow::{Result, bail}; use assetpath::AssetPath; +use ecs::Resource; use crate::prelude::*; @@ -71,7 +72,7 @@ pub struct AssetDirectories { pub tile_file_directory: AssetPath, } -#[derive(Debug)] +#[derive(Debug, Resource)] pub struct EngineSettings { current_controller_type: RwLock>, diff --git a/engine/src/scene/content/components/location.rs b/engine/src/scene/content/components/location.rs index 5609914..abf7db5 100644 --- a/engine/src/scene/content/components/location.rs +++ b/engine/src/scene/content/components/location.rs @@ -67,10 +67,9 @@ impl Location { Ok(entity.get_component_mut::()?) } - pub fn setup(mut multi_mut: MultiMut<'_>) -> Result<()> { - let location = multi_mut.get::()?; - let draw = multi_mut.get::().ok(); - let audio = multi_mut.get::