summaryrefslogtreecommitdiff
path: root/client/src/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/state.rs')
-rw-r--r--client/src/state.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/client/src/state.rs b/client/src/state.rs
new file mode 100644
index 0000000..ef68b85
--- /dev/null
+++ b/client/src/state.rs
@@ -0,0 +1,33 @@
+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<State<'a>> {
+ 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(())
+ }
+}