From 168611418145a0e72ba1fcffc554c46b48557425 Mon Sep 17 00:00:00 2001 From: Eigeen Date: Sun, 17 Aug 2025 21:14:07 +0800 Subject: [PATCH] fix: error setting new sub patch id --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/app.rs | 2 +- src/chunk.rs | 20 +++++++++++++++----- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5ee656d..54bdfe6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -713,7 +713,7 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "mhws-tex-decompressor" -version = "0.2.1" +version = "0.2.2" dependencies = [ "color-eyre", "colored", diff --git a/Cargo.toml b/Cargo.toml index 64cd55d..dc252c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mhws-tex-decompressor" -version = "0.2.1" +version = "0.2.2" edition = "2024" [dependencies] diff --git a/src/app.rs b/src/app.rs index b75b63a..6614ff4 100644 --- a/src/app.rs +++ b/src/app.rs @@ -405,7 +405,7 @@ I'm sure I've checked the list, press Enter to continue"#, let new_patch_id = max_patch_id + 1; // Create a new chunk name - let output_chunk_name = chunk_name.with_sub_patch(new_patch_id); + let output_chunk_name = chunk_name.set_sub_patch(new_patch_id); // Add the new patch to the chunk list so it can be found in subsequent processing all_chunk_names.push(output_chunk_name.clone()); diff --git a/src/chunk.rs b/src/chunk.rs index c778872..64958bf 100644 --- a/src/chunk.rs +++ b/src/chunk.rs @@ -123,10 +123,20 @@ impl ChunkName { }) } - /// Add a sub patch component with the given ID - pub fn with_sub_patch(&self, patch_id: u32) -> Self { + /// Add or replace a sub patch component with the given ID + pub fn set_sub_patch(&self, patch_id: u32) -> Self { let mut new_components = self.components.clone(); - new_components.push(ChunkComponent::SubPatch(patch_id)); + + // Check if SubPatch already exists and replace it + if let Some(pos) = new_components + .iter() + .position(|c| matches!(c, ChunkComponent::SubPatch(_))) + { + new_components[pos] = ChunkComponent::SubPatch(patch_id); + } else { + new_components.push(ChunkComponent::SubPatch(patch_id)); + } + Self { components: new_components, } @@ -289,9 +299,9 @@ mod tests { } #[test] - fn test_with_sub_patch() { + fn test_set_sub_patch() { let base = ChunkName::try_from_str("re_chunk_000.pak.sub_001.pak").unwrap(); - let with_patch = base.with_sub_patch(99); + let with_patch = base.set_sub_patch(99); assert_eq!(with_patch.major_id(), Some(0)); assert_eq!(with_patch.sub_id(), Some(1));