diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-07 15:15:19 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-07 15:15:19 +0100 |
commit | e32de26dcb5e1498f2b2fa19cacb593bec518ef4 (patch) | |
tree | 8a5d3d0e4629d04527e1f8203adbfcbe9d03838a /client/src/state.rs | |
parent | d81eebe423fd3e00df5ff035ec24fe7fb37f2c62 (diff) | |
download | weareserver-e32de26dcb5e1498f2b2fa19cacb593bec518ef4.tar weareserver-e32de26dcb5e1498f2b2fa19cacb593bec518ef4.tar.bz2 weareserver-e32de26dcb5e1498f2b2fa19cacb593bec518ef4.tar.zst |
camera controller broken
Diffstat (limited to 'client/src/state.rs')
-rw-r--r-- | client/src/state.rs | 30 |
1 files changed, 27 insertions, 3 deletions
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<State<'a>> { 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); |