diff options
Diffstat (limited to 'engine/src/camera/fly.rs')
| -rw-r--r-- | engine/src/camera/fly.rs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/engine/src/camera/fly.rs b/engine/src/camera/fly.rs index a6b336c..589ba8a 100644 --- a/engine/src/camera/fly.rs +++ b/engine/src/camera/fly.rs @@ -1,8 +1,10 @@ use crate::builder; -use crate::camera::{Active as ActiveCamera, Camera}; +use crate::camera::{Active as ActiveCamera, Camera, Controllable as ControllableCamera}; use crate::delta_time::DeltaTime; +use crate::ecs::actions::Actions; use crate::ecs::component::local::Local; use crate::ecs::phase::UPDATE as UPDATE_PHASE; +use crate::ecs::query::term::With; use crate::ecs::sole::Single; use crate::ecs::system::initializable::Initializable; use crate::ecs::system::Into; @@ -71,14 +73,35 @@ pub struct Options } fn update( - camera_query: Query<(&mut Camera, &mut WorldPosition, &mut Fly, &ActiveCamera)>, + camera_query: Query< + ( + &mut Camera, + &mut WorldPosition, + &mut Fly, + Option<&ControllableCamera>, + ), + (With<ActiveCamera>,), + >, keyboard: Single<Keyboard>, mouse: Single<Mouse>, delta_time: Single<DeltaTime>, options: Local<Options>, + mut actions: Actions, ) { - for (mut camera, mut camera_world_pos, mut fly_camera, _) in &camera_query { + for ( + camera_ent_id, + (mut camera, mut camera_world_pos, mut fly_camera, controllable_camera), + ) in camera_query.iter_with_euids() + { + if let Some(controllable_camera) = controllable_camera { + if !controllable_camera.control_enabled { + continue; + } + } else { + actions.add_components(camera_ent_id, (ControllableCamera::default(),)); + } + let delta_time = delta_time.duration; if mouse.curr_tick_position_delta != (Vec2 { x: 0.0, y: 0.0 }) { |
