diff --git a/engine/src/engine/engine.rs b/engine/src/engine/engine.rs index cf413b7..52a3465 100644 --- a/engine/src/engine/engine.rs +++ b/engine/src/engine/engine.rs @@ -25,10 +25,8 @@ impl TScene for GuiHandlerRenderer { indices: &TargetMode, world: &mut World, ) -> Result<()> { - world - .resources - .get_mut::() - .process(buffer_recorder, indices) + let gui_handler: &mut GuiHandler = world.resources.get_mut()?; + gui_handler.process(buffer_recorder, indices) } fn resize( @@ -38,11 +36,8 @@ impl TScene for GuiHandlerRenderer { images: &TargetMode>>, world: &mut World, ) -> Result<()> { - world.resources.get_mut::().resize( - window_width as u32, - window_height as u32, - images, - ) + let gui_handler: &mut GuiHandler = world.resources.get_mut()?; + gui_handler.resize(window_width as u32, window_height as u32, images) } } diff --git a/engine/src/scene/content/components/audio.rs b/engine/src/scene/content/components/audio.rs index b21983c..00514a9 100644 --- a/engine/src/scene/content/components/audio.rs +++ b/engine/src/scene/content/components/audio.rs @@ -182,7 +182,7 @@ impl EntityComponent for Audio { sound.stop_looping().unwrap(); } - self.clear(world.resources.get_mut::()) + self.clear(world.resources.get_mut()?) } } diff --git a/engine/src/scene/content/components/location.rs b/engine/src/scene/content/components/location.rs index abf7db5..40c1a97 100644 --- a/engine/src/scene/content/components/location.rs +++ b/engine/src/scene/content/components/location.rs @@ -62,14 +62,19 @@ impl Location { }; entity.insert_component(location); - Self::setup(entity.multi_mut())?; + Self::setup(entity)?; Ok(entity.get_component_mut::()?) } pub fn setup(entity: &mut EntityObject) -> Result<()> { - let (location, draw, audio): (&mut Location, &mut Draw, &mut Audio) = - entity.get_components_mut()?; + let (location, draw, audio): ( + Option<&mut Location>, + Option<&mut Draw>, + Option<&mut Audio>, + ) = entity.get_components_mut()?; + + let location = location.unwrap(); if let Some(draw) = draw { location.set_draw_callback(draw); diff --git a/engine/src/scene/general/free_camera_control.rs b/engine/src/scene/general/free_camera_control.rs index 084d12c..b63ab3e 100644 --- a/engine/src/scene/general/free_camera_control.rs +++ b/engine/src/scene/general/free_camera_control.rs @@ -24,6 +24,7 @@ impl<'a> From<&'a FreeCameraControl> for HoldInfo { } } +#[derive(Resource)] pub struct FreeCameraControl { roll: Deg, pitch: Deg, diff --git a/examples/free_space/src/game.rs b/examples/free_space/src/game.rs index 2c43190..6c9490f 100644 --- a/examples/free_space/src/game.rs +++ b/examples/free_space/src/game.rs @@ -4,7 +4,7 @@ use anyhow::Result; use ecs::*; use engine::prelude::{ - cgmath::{Vector3, Vector4, vec3, vec4}, + cgmath::{Vector3, Vector4, vec3}, *, }; @@ -341,13 +341,11 @@ impl Game { _entity: Entity, control: &mut FreeSpaceControl, ) -> Result<()> { - const DEFAULT_CENTER: Vector4 = vec4(0.0, 0.0, 0.0, 1.0); - let scene = world.resources.get_mut::(); let view = scene.view_mut(); view.camera_mut() - .set_center((control.translation() * DEFAULT_CENTER).truncate()); + .set_center((control.translation() * Vector4::unit_w()).truncate()); view.camera_mut() .set_eye_dir(control.rotation() * Vector3::unit_y()); view.camera_mut() diff --git a/examples/simple_window/src/main.rs b/examples/simple_window/src/main.rs index 24380c3..3f5d882 100644 --- a/examples/simple_window/src/main.rs +++ b/examples/simple_window/src/main.rs @@ -11,14 +11,15 @@ fn main() -> Result<()> { world_builder.add_system(GameState::update); world_builder.resources.insert(GameState::default()); - let view = world_builder.resources.get_mut::().view_mut(); + let scene: &mut Scene = world_builder.resources.get_mut()?; + let view = scene.view_mut(); let camera_control = FreeCameraControl::new(view)?; world_builder.resources.insert(camera_control); world_builder.build().run() } -#[derive(Default)] +#[derive(Default, Resource)] enum GameState { #[default] Startup, @@ -60,17 +61,16 @@ impl Game { fn event(&mut self, world: &mut World, event: EngineEvent<'_>) -> Result<()> { match event { EngineEvent::MouseButtonDown(MouseButton::Left) => { - let camera_control = world.resources.get_mut::(); + let camera_control: &mut FreeCameraControl = world.resources.get_mut()?; camera_control.mouse_down(); } EngineEvent::MouseButtonUp(MouseButton::Left) => { - let camera_control = world.resources.get_mut::(); + let camera_control: &mut FreeCameraControl = world.resources.get_mut()?; camera_control.mouse_release(); } EngineEvent::MouseMotion(x, y) => { - let mut resources = world.resources.multi_mut(); - let scene = resources.get::(); - let camera_control = resources.get::(); + let (scene, camera_control): (&mut Scene, &mut FreeCameraControl) = + world.resources.get_mut()?; camera_control.mouse_move(x, y, scene.view_mut())?; } diff --git a/skybox/src/lib.rs b/skybox/src/lib.rs index dea9671..9b6daff 100644 --- a/skybox/src/lib.rs +++ b/skybox/src/lib.rs @@ -31,6 +31,7 @@ impl> From for SkyBoxImages { } } +#[derive(Resource)] pub struct SkyBox { enabled: bool,