diff --git a/AssetStudioCLI/Options/CLIOptions.cs b/AssetStudioCLI/Options/CLIOptions.cs index 6652289..5147ec7 100644 --- a/AssetStudioCLI/Options/CLIOptions.cs +++ b/AssetStudioCLI/Options/CLIOptions.cs @@ -28,6 +28,7 @@ namespace AssetStudioCLI.Options None, TypeName, ContainerPath, + ContainerPathFull, SourceFileName, } @@ -155,10 +156,11 @@ namespace AssetStudioCLI.Options optionDefaultValue: AssetGroupOption.ContainerPath, optionName: "-g, --group-option ", optionDescription: "Specify the way in which exported assets should be grouped\n" + - "\n" + + "\n" + "None - Do not group exported assets\n" + "Type - Group exported assets by type name\n" + "Container - Group exported assets by container path\n" + + "ContainerFull - Group exported assets by full container path (e.g. with prefab name)\n" + "Filename - Group exported assets by source file name\n" + "Example: \"-g container\"\n", optionHelpGroup: HelpGroups.General @@ -475,6 +477,9 @@ namespace AssetStudioCLI.Options case "container": o_groupAssetsBy.Value = AssetGroupOption.ContainerPath; break; + case "containerfull": + o_groupAssetsBy.Value = AssetGroupOption.ContainerPathFull; + break; case "filename": o_groupAssetsBy.Value = AssetGroupOption.SourceFileName; break; @@ -734,7 +739,7 @@ namespace AssetStudioCLI.Options } else { - Console.WriteLine($"# {appAssembly.Name}\n# Based on AssetStudio Mod v{appAssembly.Version}\n"); + Console.WriteLine($"# {appAssembly.Name}\n# Based on AssetStudioMod v{appAssembly.Version}\n"); Console.WriteLine($"{usage}\n\n{helpMessage}"); } } diff --git a/AssetStudioCLI/Studio.cs b/AssetStudioCLI/Studio.cs index 2715b00..9732ce2 100644 --- a/AssetStudioCLI/Studio.cs +++ b/AssetStudioCLI/Studio.cs @@ -261,18 +261,24 @@ namespace AssetStudioCLI var toExportCount = parsedAssetsList.Count; var exportedCount = 0; + var groupOption = options.o_groupAssetsBy.Value; foreach (var asset in parsedAssetsList) { string exportPath; - switch (options.o_groupAssetsBy.Value) + switch (groupOption) { case AssetGroupOption.TypeName: exportPath = Path.Combine(savePath, asset.TypeString); break; case AssetGroupOption.ContainerPath: + case AssetGroupOption.ContainerPathFull: if (!string.IsNullOrEmpty(asset.Container)) { exportPath = Path.Combine(savePath, Path.GetDirectoryName(asset.Container)); + if (groupOption == AssetGroupOption.ContainerPathFull) + { + exportPath = Path.Combine(exportPath, Path.GetFileNameWithoutExtension(asset.Container)); + } } else { diff --git a/AssetStudioGUI/ExportOptions.Designer.cs b/AssetStudioGUI/ExportOptions.Designer.cs index 53cdc8b..d2c37ab 100644 --- a/AssetStudioGUI/ExportOptions.Designer.cs +++ b/AssetStudioGUI/ExportOptions.Designer.cs @@ -154,11 +154,12 @@ this.assetGroupOptions.Items.AddRange(new object[] { "type name", "container path", + "container path full (with name)", "source file name", "do not group"}); this.assetGroupOptions.Location = new System.Drawing.Point(6, 35); this.assetGroupOptions.Name = "assetGroupOptions"; - this.assetGroupOptions.Size = new System.Drawing.Size(149, 21); + this.assetGroupOptions.Size = new System.Drawing.Size(165, 21); this.assetGroupOptions.TabIndex = 8; // // label6 diff --git a/AssetStudioGUI/Studio.cs b/AssetStudioGUI/Studio.cs index 380cf25..a1dc2b5 100644 --- a/AssetStudioGUI/Studio.cs +++ b/AssetStudioGUI/Studio.cs @@ -32,6 +32,14 @@ namespace AssetStudioGUI XML } + internal enum AssetGroupOption + { + TypeName, + ContainerPath, + ContainerPathFull, + SourceFileName + } + internal enum ListSearchFilterMode { Include, @@ -389,25 +397,31 @@ namespace AssetStudioGUI int exportedCount = 0; int i = 0; Progress.Reset(); + var groupOption = (AssetGroupOption)Properties.Settings.Default.assetGroupOption; foreach (var asset in toExportAssets) { string exportPath; - switch (Properties.Settings.Default.assetGroupOption) + switch (groupOption) { - case 0: //type name + case AssetGroupOption.TypeName: exportPath = Path.Combine(savePath, asset.TypeString); break; - case 1: //container path + case AssetGroupOption.ContainerPath: + case AssetGroupOption.ContainerPathFull: if (!string.IsNullOrEmpty(asset.Container)) { exportPath = Path.Combine(savePath, Path.GetDirectoryName(asset.Container)); + if (groupOption == AssetGroupOption.ContainerPathFull) + { + exportPath = Path.Combine(exportPath, Path.GetFileNameWithoutExtension(asset.Container)); + } } else { exportPath = savePath; } break; - case 2: //source file + case AssetGroupOption.SourceFileName: if (string.IsNullOrEmpty(asset.SourceFile.originalPath)) { exportPath = Path.Combine(savePath, asset.SourceFile.fileName + "_export");