summaryrefslogtreecommitdiff
path: root/engine/src/camera
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-06-05 21:36:17 +0200
committerHampusM <hampus@hampusmat.com>2026-06-05 21:36:17 +0200
commit4c7d0038826e48104a6853333afd3c64383b3991 (patch)
treec16af103aa740a6aaf9a1042f102864edfcf3752 /engine/src/camera
parentd9df85eb2a645f328a5ae9dcaa1ca75b787ef67e (diff)
feat(engine): add controllable camera component
Diffstat (limited to 'engine/src/camera')
-rw-r--r--engine/src/camera/fly.rs29
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 }) {