Fix ecs changes

This commit is contained in:
hodasemi 2025-04-05 10:27:57 +02:00
parent d8bebf69df
commit 885e8126ac
7 changed files with 24 additions and 24 deletions

View file

@ -25,10 +25,8 @@ impl TScene for GuiHandlerRenderer {
indices: &TargetMode<usize>, indices: &TargetMode<usize>,
world: &mut World, world: &mut World,
) -> Result<()> { ) -> Result<()> {
world let gui_handler: &mut GuiHandler = world.resources.get_mut()?;
.resources gui_handler.process(buffer_recorder, indices)
.get_mut::<GuiHandler>()
.process(buffer_recorder, indices)
} }
fn resize( fn resize(
@ -38,11 +36,8 @@ impl TScene for GuiHandlerRenderer {
images: &TargetMode<Vec<Arc<Image>>>, images: &TargetMode<Vec<Arc<Image>>>,
world: &mut World, world: &mut World,
) -> Result<()> { ) -> Result<()> {
world.resources.get_mut::<GuiHandler>().resize( let gui_handler: &mut GuiHandler = world.resources.get_mut()?;
window_width as u32, gui_handler.resize(window_width as u32, window_height as u32, images)
window_height as u32,
images,
)
} }
} }

View file

@ -182,7 +182,7 @@ impl EntityComponent for Audio {
sound.stop_looping().unwrap(); sound.stop_looping().unwrap();
} }
self.clear(world.resources.get_mut::<Context>()) self.clear(world.resources.get_mut()?)
} }
} }

View file

@ -62,14 +62,19 @@ impl Location {
}; };
entity.insert_component(location); entity.insert_component(location);
Self::setup(entity.multi_mut())?; Self::setup(entity)?;
Ok(entity.get_component_mut::<Self>()?) Ok(entity.get_component_mut::<Self>()?)
} }
pub fn setup(entity: &mut EntityObject) -> Result<()> { pub fn setup(entity: &mut EntityObject) -> Result<()> {
let (location, draw, audio): (&mut Location, &mut Draw, &mut Audio) = let (location, draw, audio): (
entity.get_components_mut()?; Option<&mut Location>,
Option<&mut Draw>,
Option<&mut Audio>,
) = entity.get_components_mut()?;
let location = location.unwrap();
if let Some(draw) = draw { if let Some(draw) = draw {
location.set_draw_callback(draw); location.set_draw_callback(draw);

View file

@ -24,6 +24,7 @@ impl<'a> From<&'a FreeCameraControl> for HoldInfo {
} }
} }
#[derive(Resource)]
pub struct FreeCameraControl { pub struct FreeCameraControl {
roll: Deg<f32>, roll: Deg<f32>,
pitch: Deg<f32>, pitch: Deg<f32>,

View file

@ -4,7 +4,7 @@ use anyhow::Result;
use ecs::*; use ecs::*;
use engine::prelude::{ use engine::prelude::{
cgmath::{Vector3, Vector4, vec3, vec4}, cgmath::{Vector3, Vector4, vec3},
*, *,
}; };
@ -341,13 +341,11 @@ impl Game {
_entity: Entity, _entity: Entity,
control: &mut FreeSpaceControl, control: &mut FreeSpaceControl,
) -> Result<()> { ) -> Result<()> {
const DEFAULT_CENTER: Vector4<f32> = vec4(0.0, 0.0, 0.0, 1.0);
let scene = world.resources.get_mut::<Scene>(); let scene = world.resources.get_mut::<Scene>();
let view = scene.view_mut(); let view = scene.view_mut();
view.camera_mut() view.camera_mut()
.set_center((control.translation() * DEFAULT_CENTER).truncate()); .set_center((control.translation() * Vector4::unit_w()).truncate());
view.camera_mut() view.camera_mut()
.set_eye_dir(control.rotation() * Vector3::unit_y()); .set_eye_dir(control.rotation() * Vector3::unit_y());
view.camera_mut() view.camera_mut()

View file

@ -11,14 +11,15 @@ fn main() -> Result<()> {
world_builder.add_system(GameState::update); world_builder.add_system(GameState::update);
world_builder.resources.insert(GameState::default()); world_builder.resources.insert(GameState::default());
let view = world_builder.resources.get_mut::<Scene>().view_mut(); let scene: &mut Scene = world_builder.resources.get_mut()?;
let view = scene.view_mut();
let camera_control = FreeCameraControl::new(view)?; let camera_control = FreeCameraControl::new(view)?;
world_builder.resources.insert(camera_control); world_builder.resources.insert(camera_control);
world_builder.build().run() world_builder.build().run()
} }
#[derive(Default)] #[derive(Default, Resource)]
enum GameState { enum GameState {
#[default] #[default]
Startup, Startup,
@ -60,17 +61,16 @@ impl Game {
fn event(&mut self, world: &mut World, event: EngineEvent<'_>) -> Result<()> { fn event(&mut self, world: &mut World, event: EngineEvent<'_>) -> Result<()> {
match event { match event {
EngineEvent::MouseButtonDown(MouseButton::Left) => { EngineEvent::MouseButtonDown(MouseButton::Left) => {
let camera_control = world.resources.get_mut::<FreeCameraControl>(); let camera_control: &mut FreeCameraControl = world.resources.get_mut()?;
camera_control.mouse_down(); camera_control.mouse_down();
} }
EngineEvent::MouseButtonUp(MouseButton::Left) => { EngineEvent::MouseButtonUp(MouseButton::Left) => {
let camera_control = world.resources.get_mut::<FreeCameraControl>(); let camera_control: &mut FreeCameraControl = world.resources.get_mut()?;
camera_control.mouse_release(); camera_control.mouse_release();
} }
EngineEvent::MouseMotion(x, y) => { EngineEvent::MouseMotion(x, y) => {
let mut resources = world.resources.multi_mut(); let (scene, camera_control): (&mut Scene, &mut FreeCameraControl) =
let scene = resources.get::<Scene>(); world.resources.get_mut()?;
let camera_control = resources.get::<FreeCameraControl>();
camera_control.mouse_move(x, y, scene.view_mut())?; camera_control.mouse_move(x, y, scene.view_mut())?;
} }

View file

@ -31,6 +31,7 @@ impl<T: ExactSizeIterator<Item = PathBuf>> From<T> for SkyBoxImages {
} }
} }
#[derive(Resource)]
pub struct SkyBox { pub struct SkyBox {
enabled: bool, enabled: bool,