Start fixing free space example

This commit is contained in:
hodasemi 2025-04-06 09:36:21 +02:00
parent 885e8126ac
commit 27403f16ba
4 changed files with 18 additions and 23 deletions

View file

@ -170,7 +170,7 @@ impl AssetLoader for EntityManager {
} }
entity_object.insert_component(Audio::new( entity_object.insert_component(Audio::new(
assets.world().resources.get_mut::<Context>(), assets.world().resources.get_mut()?,
entity_parser.sound_map, entity_parser.sound_map,
)?); )?);
} }

View file

@ -10,7 +10,7 @@ use engine::prelude::{
use crate::{FREE_CAMERA_CONTROL, celestial_object::*}; use crate::{FREE_CAMERA_CONTROL, celestial_object::*};
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug, Resource)]
struct PlayerEntity(Entity); struct PlayerEntity(Entity);
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
@ -37,7 +37,7 @@ enum Control {
SecondaryWeapon, SecondaryWeapon,
} }
#[derive(Clone, Debug)] #[derive(Clone, Debug, Resource)]
struct InputSettings { struct InputSettings {
mappings: HashMap<(String, u32, Input), (Control, bool)>, mappings: HashMap<(String, u32, Input), (Control, bool)>,
} }
@ -112,9 +112,8 @@ impl Game {
pub fn update(&mut self, world: &mut World) -> Result<()> { pub fn update(&mut self, world: &mut World) -> Result<()> {
if FREE_CAMERA_CONTROL { if FREE_CAMERA_CONTROL {
let now = world.now(); let now = world.now();
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.update(now, scene.view_mut())?; camera_control.update(now, scene.view_mut())?;
} }
@ -157,24 +156,23 @@ impl Game {
) -> Result<Option<EngineEvent<'a>>> { ) -> Result<Option<EngineEvent<'a>>> {
match event { match event {
EngineEvent::MouseButtonDown(MouseButton::Middle) => { EngineEvent::MouseButtonDown(MouseButton::Middle) => {
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::Middle) => { EngineEvent::MouseButtonUp(MouseButton::Middle) => {
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())?;
return Ok(Some(event)); return Ok(Some(event));
} }
EngineEvent::KeyDown(key) => { EngineEvent::KeyDown(key) => {
let camera_control = world.resources.get_mut::<FreeCameraControl>(); let camera_control: &mut FreeCameraControl = world.resources.get_mut()?;
match key { match key {
Keycode::W => camera_control.forward_back(1.0), Keycode::W => camera_control.forward_back(1.0),
@ -188,7 +186,7 @@ impl Game {
} }
} }
EngineEvent::KeyUp(key) => { EngineEvent::KeyUp(key) => {
let camera_control = world.resources.get_mut::<FreeCameraControl>(); let camera_control: &mut FreeCameraControl = world.resources.get_mut()?;
match key { match key {
Keycode::W => camera_control.forward_back(-1.0), Keycode::W => camera_control.forward_back(-1.0),
@ -282,12 +280,8 @@ impl Game {
} }
pub fn setup_scene(world: &mut World) -> Result<()> { pub fn setup_scene(world: &mut World) -> Result<()> {
world let scene: &mut Scene = world.resources.get_mut()?;
.resources scene.view_mut().camera_mut().look_at(false);
.get_mut::<Scene>()
.view_mut()
.camera_mut()
.look_at(false);
let mut fighter = AssetHandler::create(world).create_entity("fighter_edited")?; let mut fighter = AssetHandler::create(world).create_entity("fighter_edited")?;
fighter.insert_component(FreeSpaceControl::new( fighter.insert_component(FreeSpaceControl::new(
@ -317,7 +311,7 @@ impl Game {
light.set_power(50_000_000_000.0)?; light.set_power(50_000_000_000.0)?;
light.set_color(vec3(1.0, 1.0, 1.0))?; light.set_color(vec3(1.0, 1.0, 1.0))?;
let scene = world.resources.get_mut::<Scene>(); let scene: &mut Scene = world.resources.get_mut()?;
scene.add_light(light)?; scene.add_light(light)?;
world.commit_entity_changes() world.commit_entity_changes()
@ -341,7 +335,7 @@ impl Game {
_entity: Entity, _entity: Entity,
control: &mut FreeSpaceControl, control: &mut FreeSpaceControl,
) -> Result<()> { ) -> Result<()> {
let scene = world.resources.get_mut::<Scene>(); let scene: &mut Scene = world.resources.get_mut()?;
let view = scene.view_mut(); let view = scene.view_mut();
view.camera_mut() view.camera_mut()

View file

@ -5,7 +5,7 @@ use engine::prelude::*;
use crate::game::Game; use crate::game::Game;
#[derive(Default)] #[derive(Default, Resource)]
pub enum GameState { pub enum GameState {
#[default] #[default]
Startup, Startup,

View file

@ -41,7 +41,8 @@ fn main() -> Result<()> {
)?; )?;
if FREE_CAMERA_CONTROL { if FREE_CAMERA_CONTROL {
let view = world_builder.resources.get_mut::<Scene>().view_mut(); let scene:&mut Scene = world_builder.resources.get_mut::<Scene>()?;
let view = .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);
} }