aboutsummaryrefslogtreecommitdiff
path: root/exporter/src/bin/textures.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-14 14:58:38 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-14 14:58:38 +0100
commit7ff78cff53eba1da60b8beb851732e2f8197c221 (patch)
treefa6d914270ba1acdeddbc3aa1ce1cf7cf0824a7b /exporter/src/bin/textures.rs
parent6debd2c0a230d623c06869ca4c4f13519f53eb5d (diff)
downloadunity-tools-7ff78cff53eba1da60b8beb851732e2f8197c221.tar
unity-tools-7ff78cff53eba1da60b8beb851732e2f8197c221.tar.bz2
unity-tools-7ff78cff53eba1da60b8beb851732e2f8197c221.tar.zst
move files around
Diffstat (limited to 'exporter/src/bin/textures.rs')
-rw-r--r--exporter/src/bin/textures.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/exporter/src/bin/textures.rs b/exporter/src/bin/textures.rs
new file mode 100644
index 0000000..2e077fe
--- /dev/null
+++ b/exporter/src/bin/textures.rs
@@ -0,0 +1,55 @@
+use anyhow::anyhow;
+use log::warn;
+use std::{
+ env::args,
+ fs::{File, create_dir_all},
+ io::BufReader,
+};
+use unity_tools::{
+ classes::texture2d::Texture2D, 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 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"))?
+ .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 != "Texture2D" {
+ continue;
+ }
+ let value = file.read_object(ob)?;
+ let mut texture = Texture2D::from_value(value)?;
+ if texture.image_data.is_empty() {
+ texture.image_data = texture.stream_data.read(&mut fs2)?;
+ }
+ let path = format!(
+ "/tmp/a/{}_{i}.png",
+ texture.name.replace("/", "-").replace(".", "-")
+ );
+ match texture.to_image() {
+ Ok(im) => {
+ if !im.as_rgba32f().is_some() {
+ im.save(&path).unwrap();
+ println!("{path}");
+ }
+ }
+ Err(e) => warn!("{e}"),
+ }
+ i += 1;
+ }
+
+ Ok(())
+}