diff --git a/examples/testbed/src/free_fly_camera.rs b/examples/testbed/src/free_fly_camera.rs index b6f404b..fa05a8b 100644 --- a/examples/testbed/src/free_fly_camera.rs +++ b/examples/testbed/src/free_fly_camera.rs @@ -86,6 +86,10 @@ pub fn free_fly_camera_controller(delta_time: Res, handler: Res InputButtons { let hash = Self::get_button_hash(&button); match self.button_events.get(&hash) { Some(button_event) => match button_event { - // this if statement should always be true, but just in case ;) ButtonEvent::JustPressed(b) if button == *b => true, _ => false, }, None => false } } + + /// Update any JustPressed events into Pressed events + /// + /// This must be done so that a key does not stay as JustPressed between multiple ticks + pub fn update(&mut self) { + for bev in self.button_events.values_mut() { + match bev { + ButtonEvent::JustPressed(btn) => { + *bev = ButtonEvent::Pressed(btn.clone()); + }, + _ => {}, + } + } + } } \ No newline at end of file diff --git a/lyra-game/src/input/system.rs b/lyra-game/src/input/system.rs index fb04a0f..b41a939 100755 --- a/lyra-game/src/input/system.rs +++ b/lyra-game/src/input/system.rs @@ -102,12 +102,15 @@ impl crate::ecs::system::System for InputSystem { let queue = world.try_get_resource_mut::() .and_then(|q| q.read_events::()); + let mut e = world.get_resource_or_else(InputButtons::::new); + e.update(); + drop(e); + if queue.is_none() { return Ok(()); } let mut events = queue.unwrap(); - while let Some(event) = events.pop_front() { self.process_event(world, &event); } diff --git a/lyra-game/src/render/camera.rs b/lyra-game/src/render/camera.rs index 882f7c5..3b5ab46 100755 --- a/lyra-game/src/render/camera.rs +++ b/lyra-game/src/render/camera.rs @@ -46,7 +46,8 @@ pub struct CameraUniform { pub view_projection: glam::Mat4, /// The position of the camera pub position: glam::Vec3, - _padding: u32, + pub tile_debug: u32, + //_padding: [u8; 3], } @@ -57,7 +58,8 @@ impl Default for CameraUniform { inverse_projection: glam::Mat4::IDENTITY, view_projection: glam::Mat4::IDENTITY, position: Default::default(), - _padding: 0, + tile_debug: 0, + //_padding: 0, } } } @@ -69,7 +71,7 @@ impl CameraUniform { inverse_projection, view_projection, position, - _padding: 0 + tile_debug: 0 } } } @@ -128,7 +130,7 @@ impl RenderCamera { inverse_projection: proj.inverse(), view_projection: self.view_proj, position, - _padding: 0, + tile_debug: camera.debug as u32, } }, CameraProjectionMode::Orthographic => { @@ -150,7 +152,7 @@ impl RenderCamera { inverse_projection: proj.inverse(), view_projection: self.view_proj, position, - _padding: 0, + tile_debug: camera.debug as u32, } }, } diff --git a/lyra-game/src/render/shaders/base.wgsl b/lyra-game/src/render/shaders/base.wgsl index 7b97ddf..f91291e 100755 --- a/lyra-game/src/render/shaders/base.wgsl +++ b/lyra-game/src/render/shaders/base.wgsl @@ -24,6 +24,7 @@ struct CameraUniform { inverse_projection: mat4x4, view_projection: mat4x4, position: vec3, + tile_debug: u32, }; struct Light { @@ -127,7 +128,10 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { return vec4(light_object_res, object_color.a);*/ - + if (u_camera.tile_debug == 1u) { + return debug_grid(in); + } + let tile_index = vec2(floor(in.clip_position.xy / 16.0)); let tile: vec2 = textureLoad(t_light_grid, tile_index).xy; @@ -168,11 +172,14 @@ fn debug_grid(in: VertexOutput) -> vec4 { let ta: bool = x < 0.05 || y < 0.05; let tb: bool = x > 0.95 || y > 0.95; - if ( ta || tb ) { + let ratio = f32(tile.y) / f32(u_lights.light_count); + return vec4(ratio, ratio, ratio, 1.0); + + /* if ( ta || tb ) { return vec4(0.0, 0.0, 0.0, 1.0); } else { return vec4(f32(tile_index.x) / 50.0, f32(tile_index.y) / 38.0, 0.0, 1.0); - } + } */ } fn blinn_phong_dir_light(world_pos: vec3, world_norm: vec3, dir_light: Light, material: Material, specular_factor: vec3) -> vec3 { diff --git a/lyra-game/src/scene/camera.rs b/lyra-game/src/scene/camera.rs index 36137a5..0808699 100755 --- a/lyra-game/src/scene/camera.rs +++ b/lyra-game/src/scene/camera.rs @@ -7,6 +7,7 @@ pub struct CameraComponent { pub transform: Transform, pub fov: Angle, pub mode: CameraProjectionMode, + pub debug: bool, } impl Default for CameraComponent { @@ -15,6 +16,7 @@ impl Default for CameraComponent { transform: Transform::default(), fov: Angle::Degrees(45.0), mode: CameraProjectionMode::Perspective, + debug: false, } } }