summaryrefslogtreecommitdiff
path: root/world/src/main.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-05 20:31:28 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-05 20:31:28 +0100
commita6f57036bc954bab45d61fb41c1bd0a27001bad6 (patch)
tree2d01687549003cd2c38c9fc772e4ba543cd1b646 /world/src/main.rs
parentf2fa92e701b8da8e9d2e091ade21784623710374 (diff)
downloadweareserver-a6f57036bc954bab45d61fb41c1bd0a27001bad6.tar
weareserver-a6f57036bc954bab45d61fb41c1bd0a27001bad6.tar.bz2
weareserver-a6f57036bc954bab45d61fb41c1bd0a27001bad6.tar.zst
a
Diffstat (limited to 'world/src/main.rs')
-rw-r--r--world/src/main.rs61
1 files changed, 48 insertions, 13 deletions
diff --git a/world/src/main.rs b/world/src/main.rs
index 56b62c9..28a4ec4 100644
--- a/world/src/main.rs
+++ b/world/src/main.rs
@@ -1,13 +1,14 @@
use anyhow::Result;
use clap::Parser;
-use gltf::Gltf;
use std::{
- fs::File,
- io::BufReader,
net::{SocketAddr, TcpStream},
path::PathBuf,
};
-use weareshared::resources::Part;
+use weareshared::{
+ packets::{Object, Packet},
+ resources::{Part, Prefab, VertexAttributes},
+ store::ResourceStore,
+};
#[derive(Parser)]
struct Args {
@@ -19,21 +20,55 @@ fn main() -> Result<()> {
env_logger::init_from_env("LOG");
let args = Args::parse();
- let sock = TcpStream::connect(args.address)?;
+ let mut sock = TcpStream::connect(args.address)?;
+ let store = ResourceStore::new_memory();
- let scenefile = Gltf::from_reader(BufReader::new(File::open(args.scene)?))?;
- let scene = scenefile
- .default_scene()
- .unwrap_or(scenefile.scenes().next().unwrap());
+ let (gltf, buffers, _) = gltf::import(args.scene)?;
- for node in scene.nodes() {
+ let mut parts = Vec::new();
+ for node in gltf.nodes() {
if let Some(mesh) = node.mesh() {
for p in mesh.primitives() {
- for (sem, iter) in p.attributes() {}
+ let reader = p.reader(|buf| Some(&buffers[buf.index()]));
+ let mut attrs = vec![vec![]; 3];
+ for p in reader.read_positions().unwrap() {
+ attrs[0].push(p[0]);
+ attrs[1].push(p[1]);
+ attrs[2].push(p[2]);
+ }
+ let part = Part {
+ vertex: attrs
+ .into_iter()
+ .map(|d| {
+ let mut out = Vec::new();
+ VertexAttributes(d).serialize(&mut out)?;
+ store.set(&out)
+ })
+ .collect::<Result<Vec<_>, _>>()?,
+ ..Part::default()
+ };
+ let mut out = Vec::new();
+ part.serialize(&mut out)?;
+ parts.push(store.set(&out)?);
}
- let part = Part { ..Part::default() };
}
}
- Ok(())
+ let mut out = Vec::new();
+ Prefab(parts).serialize(&mut out)?;
+ let prefab = store.set(&out)?;
+
+ Packet::Add(Object::new(), prefab).serialize(&mut sock)?;
+
+ loop {
+ let packet = Packet::deserialize(&mut sock)?;
+ match packet {
+ Packet::RequestResource(hash) => {
+ if let Some(d) = store.get(hash)? {
+ Packet::RespondResource(d).serialize(&mut sock)?;
+ }
+ }
+ _ => (),
+ }
+ }
}