aboutsummaryrefslogtreecommitdiff
path: root/src/bin/gltf.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/gltf.rs')
-rw-r--r--src/bin/gltf.rs57
1 files changed, 3 insertions, 54 deletions
diff --git a/src/bin/gltf.rs b/src/bin/gltf.rs
index 07adec6..323b6d2 100644
--- a/src/bin/gltf.rs
+++ b/src/bin/gltf.rs
@@ -1,16 +1,7 @@
#![feature(array_chunks)]
use anyhow::anyhow;
-use std::{
- env::args,
- fs::{File, create_dir_all},
- io::{BufReader, BufWriter, Seek, SeekFrom, Write},
-};
-use unity_tools::{
- classes::mesh::{Mesh, VertexDataChannel},
- object::{parser::FromValue, read::read_value},
- serialized_file::SerializedFile,
- unityfs::UnityFS,
-};
+use std::{env::args, fs::File, io::BufReader};
+use unity_tools::{serialized_file::SerializedFile, unityfs::UnityFS};
fn main() -> anyhow::Result<()> {
env_logger::init_from_env("LOG");
@@ -18,9 +9,6 @@ fn main() -> anyhow::Result<()> {
let mut fs = UnityFS::open(file())?;
// let mut fs2 = UnityFS::open(file())?;
- let mut i = 0;
- create_dir_all("/tmp/a").unwrap();
-
let cabfile = fs
.find_main_file()
.ok_or(anyhow!("no CAB file found"))?
@@ -28,46 +16,7 @@ fn main() -> anyhow::Result<()> {
let mut cab = fs.read(&cabfile)?;
let file = SerializedFile::read(&mut cab)?;
- for ob in file.objects {
- cab.seek(SeekFrom::Start(ob.data_offset))?;
- let typetree = if ob.type_id < 0 {
- unimplemented!()
- } else {
- &file.types[ob.type_id as usize]
- };
- if let Some(typetree) = &typetree.type_tree {
- if typetree.type_string != "Mesh" {
- continue;
- }
- let value = read_value(typetree, file.endianness, &mut cab)?;
- let mesh = Mesh::from_value(value).unwrap();
- // if mesh.stream_data.len() == 0 {
- // let ress = ress.as_mut().unwrap();
- // ress.seek(SeekFrom::Start(mesh.stream_data.offset))?;
- // ress.by_ref()
- // .take(mesh.stream_data.size as u64)
- // .read_to_end(&mut mesh.)?;
- // }
- let mut obj = BufWriter::new(File::create(format!(
- "/tmp/a/{}_{i}.obj",
- mesh.name.replace("/", "-").replace(".", "-")
- ))?);
-
- let (pos_dims, positions) = mesh
- .vertex_data
- .read_channel(VertexDataChannel::Position)
- .unwrap();
- assert_eq!(pos_dims, 3);
-
- for [x, y, z] in positions.array_chunks() {
- writeln!(obj, "v {x} {y} {z}")?;
- }
- for [a, b, c] in mesh.read_indecies() {
- writeln!(obj, "f {} {} {}", a + 1, b + 1, c + 1)?;
- }
- i += 1;
- }
- }
+ for _ob in file.objects {}
Ok(())
}