diff options
Diffstat (limited to 'src/bin/meshes.rs')
-rw-r--r-- | src/bin/meshes.rs | 59 |
1 files changed, 0 insertions, 59 deletions
diff --git a/src/bin/meshes.rs b/src/bin/meshes.rs deleted file mode 100644 index e3758c4..0000000 --- a/src/bin/meshes.rs +++ /dev/null @@ -1,59 +0,0 @@ -#![feature(array_chunks)] -use anyhow::anyhow; -use std::{ - env::args, - fs::{File, create_dir_all}, - io::{BufReader, BufWriter, Write}, -}; -use unity_tools::{ - classes::mesh::{Mesh, VertexDataChannel}, - object::parser::FromValue, - serialized_file::SerializedFile, - unityfs::UnityFS, -}; - -fn main() -> anyhow::Result<()> { - env_logger::init_from_env("LOG"); - let file = || BufReader::new(File::open(args().nth(1).unwrap()).unwrap()); - let mut fs = UnityFS::open(file())?; - - let mut i = 0; - create_dir_all("/tmp/a").unwrap(); - - let cabfile = fs - .nodes() - .iter() - .find(|n| !n.name.ends_with(".resource") && !n.name.ends_with(".resS")) - .ok_or(anyhow!("no CAB file found"))? - .to_owned(); - - let mut cab = fs.read(&cabfile)?; - let mut file = SerializedFile::read(&mut cab)?; - for ob in file.objects.clone() { - if file.get_object_type_tree(&ob)?.type_string != "Mesh" { - continue; - } - let value = file.read_object(ob)?; - let mesh = Mesh::from_value(value).unwrap(); - 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; - } - - Ok(()) -} |