Browse Source

Add CameraController struct and integrate it into State

Ghastrod 1 năm trước cách đây
mục cha
commit
777d9e21be
2 tập tin đã thay đổi với 13 bổ sung3 xóa
  1. 1 1
      src/controller.rs
  2. 12 2
      src/lib.rs

+ 1 - 1
src/controller.rs

@@ -5,7 +5,7 @@ use winit::event::WindowEvent;
 use crate::camera::Camera;
 use crate::camera::CameraUniform;
 
-struct CameraController{
+pub struct CameraController{
     speed: f32,
     is_forward_pressed: bool,
     is_backward_pressed: bool,

+ 12 - 2
src/lib.rs

@@ -1,10 +1,12 @@
 use std::iter;
 
+use controller::CameraController;
 use debug_triangle::DEBUG_VERT;
 use simple_plane::generate_jamie_plane;
 use simple_plane::generate_square;
 use wgpu::util::DeviceExt;
 
+mod controller;
 mod vertex;
 use vertex::Vertex;
 mod simple_plane;
@@ -116,6 +118,7 @@ struct State<'a> {
     camera_uniform: CameraUniform,
     camera_buffer: wgpu::Buffer,
     camera_bind_group: wgpu::BindGroup,
+    camera_controller: CameraController,
 }
 
 impl<'a> State<'a> {
@@ -379,6 +382,8 @@ impl<'a> State<'a> {
 
         let num_vertices = vert.len() as u32;
         //let num_indices = indices.len() as u32;
+
+        let camera_controller = CameraController::new(0.2);
         Self {
             surface,
             device,
@@ -398,6 +403,7 @@ impl<'a> State<'a> {
             camera_uniform,
             camera_buffer,
             camera_bind_group,
+            camera_controller,
         }
     }
 
@@ -416,10 +422,14 @@ impl<'a> State<'a> {
 
     #[allow(unused_variables)]
     fn input(&mut self, event: &WindowEvent) -> bool {
-        false
+        self.camera_controller.process_events(event)
     }
 
-    fn update(&mut self) {}
+    fn update(&mut self) {
+        self.camera_controller.update_camera(&mut self.camera);
+        self.camera_uniform.update_view_proj(&self.camera);
+        self.queue.write_buffer(&self.camera_buffer, 0, bytemuck::cast_slice(&[self.camera_uniform]));
+    }
 
     fn render(&mut self) -> Result<(), wgpu::SurfaceError> {
         let output = self.surface.get_current_texture()?;