diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 109 |
1 files changed, 59 insertions, 50 deletions
diff --git a/src/main.rs b/src/main.rs index 4d62f8c..9455ac6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ mod sprite_loader; mod vfx; use futures::executor; +use glam::IVec2; use std::{collections::VecDeque, sync::Arc, time::Instant}; use winit::{ application::ApplicationHandler, @@ -18,7 +19,7 @@ use winit::{ }; use crate::{ - camera::Camera, + camera::{Camera, CameraController}, config::WINDOW_TITLE, content::{ entities::{ @@ -35,7 +36,7 @@ use crate::{ }, proc_gen::TilesetWorldGenerator, renderer::RendererState, - sim::{entity::EntityDef, rb_manager::DebugRenderMode, sim_manager::SimManager}, + sim::{rb_manager::DebugRenderMode, sim_manager::SimManager}, vfx::VfxManager, }; @@ -66,9 +67,9 @@ struct App { // game input_manager: InputManager, - camera: Option<Camera>, - vfx_manager: Option<VfxManager>, - sim_manager: Option<SimManager>, + camera_controller: Option<CameraController>, + vfx_manager: VfxManager, + sim_manager: SimManager, world_generator: TilesetWorldGenerator, // renderer @@ -84,43 +85,47 @@ impl App { // delta time is the real seconds elapsed since the last time this was called fn update(&mut self, delta_time: f32) { // apply inputs - if let Some(camera) = &mut self.camera { - camera.handle_camera_input(&self.input_manager, delta_time) + if let Some(camera_controller) = &mut self.camera_controller { + camera_controller.update(&self.input_manager, &self.sim_manager, delta_time); } - if let Some(sim) = &mut self.sim_manager - && let Some(vfx_manager) = &mut self.vfx_manager - { - // --TEST SPAWNING-- - if self.input_manager.pressed(Input::Action1) { - sim.create_entity(entity_cube_def( - self.input_manager.world_mouse_pos, - self.config.dropper_material, - )); - } - - if self.input_manager.pressed(Input::Grenade) { - sim.create_entity(entity_grenade_def(self.input_manager.world_mouse_pos, 3.0)); - } + // --TEST SPAWNING-- + if self.input_manager.pressed(Input::Action1) { + self.sim_manager.create_entity(entity_cube_def( + self.input_manager.world_mouse_pos, + self.config.dropper_material, + )); + } - if self.input_manager.pressed(Input::Tnt) { - sim.create_entity(entity_tnt_def(self.input_manager.world_mouse_pos)); - } + if self.input_manager.pressed(Input::Grenade) { + self.sim_manager + .create_entity(entity_grenade_def(self.input_manager.world_mouse_pos, 3.0)); + } - if self.input_manager.pressed(Input::Action5) { - sim.create_entity(entity_wizard_def(self.input_manager.world_mouse_pos)); - } + if self.input_manager.pressed(Input::Tnt) { + self.sim_manager + .create_entity(entity_tnt_def(self.input_manager.world_mouse_pos)); + } - if self.input_manager.pressed(Input::Action3) { - sim.create_entity(entity_bullet_emitter_def( - self.input_manager.world_mouse_pos, - 3.0, - )); - } + if self.input_manager.pressed(Input::Action5) { + self.sim_manager + .create_entity(entity_wizard_def(self.input_manager.world_mouse_pos)); + } - sim.update(vfx_manager, &self.config, &self.input_manager, delta_time); - self.input_manager.reset_for_frame(); + if self.input_manager.pressed(Input::Action3) { + self.sim_manager.create_entity(entity_bullet_emitter_def( + self.input_manager.world_mouse_pos, + 3.0, + )); } + + self.sim_manager.update( + &mut self.vfx_manager, + &self.config, + &self.input_manager, + delta_time, + ); + self.input_manager.reset_for_frame(); } } @@ -141,10 +146,10 @@ impl Default for App { input_manager: InputManager::new(), - camera: None, + camera_controller: None, - vfx_manager: Some(VfxManager::new()), - sim_manager: Some(SimManager::new()), + vfx_manager: VfxManager::new(), + sim_manager: SimManager::new(), world_generator: TilesetWorldGenerator::new( "assets/tilesets/tileset1", Box::new(MinesBiome::new()), @@ -177,7 +182,10 @@ impl ApplicationHandler for App { self.renderer_state = Some(executor::block_on(RendererState::new(window.clone()))); let size = window.inner_size(); - self.camera = Some(Camera::new((size.width as i32, size.height as i32))); + self.camera_controller = Some(CameraController::new( + IVec2::new(size.width as i32, size.height as i32), + camera::CameraControllerMode::Free, + )); } fn window_event( @@ -196,17 +204,20 @@ impl ApplicationHandler for App { } } - if let Some(camera) = &self.camera { - self.input_manager.apply_event(&event, camera); + if let Some(camera_controller) = &self.camera_controller { + self.input_manager + .apply_event(&event, camera_controller.camera()); } match event { WindowEvent::Resized(size) => { if let Some(renderer_state) = &mut self.renderer_state - && let Some(camera) = &mut self.camera + && let Some(camera_controller) = &mut self.camera_controller { renderer_state.resize(size.width, size.height); - camera.resize((size.width as i32, size.height as i32)); + camera_controller + .camera_mut() + .resize(IVec2::new(size.width as i32, size.height as i32)); } } WindowEvent::CloseRequested => { @@ -236,21 +247,19 @@ impl ApplicationHandler for App { self.update(delta_time); if let Some(renderer_state) = &mut self.renderer_state - && let Some(sim) = &mut self.sim_manager - && let Some(vfx) = &mut self.vfx_manager - && let Some(camera) = &mut self.camera + && let Some(camera_controller) = &mut self.camera_controller { renderer_state.render( - sim, - vfx, - camera, + &mut self.sim_manager, + &self.vfx_manager, + camera_controller.camera_mut(), &mut self.config, &self.diagnostics, &self.input_manager, &self.world_generator, ); - vfx.after_render(delta_time); + self.vfx_manager.after_render(delta_time); } } _ => {} |
