use crate::{download::Downloader, network::Network, renderer::Renderer}; use anyhow::Result; use log::info; use std::net::TcpStream; use weareshared::{store::ResourceStore, tree::SceneTree}; use winit::window::Window; pub struct State<'a> { pub network: Network, pub downloader: Downloader, pub renderer: Renderer<'a>, pub tree: SceneTree, } impl<'a> State<'a> { pub fn new(conn: TcpStream, window: &'a Window) -> Result> { info!("new state"); Ok(Self { network: Network::new(conn), tree: SceneTree::default(), renderer: Renderer::new(window)?, downloader: Downloader::new(ResourceStore::new_memory()), }) } pub fn update(&mut self) -> Result<()> { for p in self.network.packet_recv.try_iter() { self.downloader.packet(&p)?; } self.downloader.update(&mut self.network); Ok(()) } }