From e32de26dcb5e1498f2b2fa19cacb593bec518ef4 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 7 Jan 2025 15:15:19 +0100 Subject: camera controller broken --- client/src/state.rs | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'client/src/state.rs') diff --git a/client/src/state.rs b/client/src/state.rs index a370264..beac614 100644 --- a/client/src/state.rs +++ b/client/src/state.rs @@ -1,7 +1,8 @@ -use crate::{download::Downloader, network::Network, renderer::Renderer}; +use crate::{camera::Camera, download::Downloader, network::Network, renderer::Renderer}; use anyhow::{Context, Result}; +use glam::{Vec2, Vec3}; use log::{info, warn}; -use std::net::TcpStream; +use std::{net::TcpStream, time::Instant}; use weareshared::{store::ResourceStore, tree::SceneTree}; use winit::window::Window; @@ -10,19 +11,34 @@ pub struct State<'a> { pub downloader: Downloader, pub renderer: Renderer<'a>, pub tree: SceneTree, + pub camera: Camera, + pub delta: DeltaState, } + +pub struct DeltaState { + time: Instant, + pub move_dir: Vec3, + pub mouse_acc: Vec2, +} + impl<'a> State<'a> { pub fn new(conn: TcpStream, window: &'a Window) -> Result> { info!("new state"); Ok(Self { + camera: Camera::new(), network: Network::new(conn), tree: SceneTree::default(), renderer: Renderer::new(window)?, downloader: Downloader::new(ResourceStore::new_memory()), + delta: DeltaState { + time: Instant::now(), + move_dir: Vec3::ZERO, + mouse_acc: Vec2::ZERO, + }, }) } pub fn draw(&mut self) { - if let Err(e) = self.renderer.draw(&self.tree) { + if let Err(e) = self.renderer.draw(&self.tree, &self.camera) { warn!("draw failed: {e:?}"); } } @@ -30,6 +46,14 @@ impl<'a> State<'a> { self.renderer.resize(width, height); } pub fn update(&mut self) -> Result<()> { + let now = Instant::now(); + let dt = (now - self.delta.time).as_secs_f32(); + self.delta.time = now; + + self.camera + .update(self.delta.move_dir, self.delta.mouse_acc, dt); + self.delta.mouse_acc = Vec2::ZERO; + for p in self.network.packet_recv.try_iter() { self.downloader.packet(&p)?; self.tree.packet(&p); -- cgit v1.2.3-70-g09d2