From e79ed0cf8515a1d5a00f39191a9a6e564833ddd2 Mon Sep 17 00:00:00 2001 From: tresabhi <43380238+tresabhi@users.noreply.github.com> Date: Thu, 6 Mar 2025 19:41:55 -0600 Subject: [PATCH] feat: texture exporter --- src/BlitzKit.CLI/Functions/Mangler.cs | 34 +++++++++++++++------------ src/BlitzKit.CLI/Utils/Exporter.cs | 16 +++++++++++++ 2 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 src/BlitzKit.CLI/Utils/Exporter.cs diff --git a/src/BlitzKit.CLI/Functions/Mangler.cs b/src/BlitzKit.CLI/Functions/Mangler.cs index 3e2c3bb71..c055ab57a 100644 --- a/src/BlitzKit.CLI/Functions/Mangler.cs +++ b/src/BlitzKit.CLI/Functions/Mangler.cs @@ -1,9 +1,5 @@ -using System.Data; -using System.Text; using System.Text.Json; using System.Text.RegularExpressions; -using System.Text.Unicode; -using System.Threading.Tasks; using Blitzkit; using BlitzKit.CLI.Models; using BlitzKit.CLI.Quicktype.Locales; @@ -11,13 +7,11 @@ using BlitzKit.CLI.Utils; using CUE4Parse.UE4.Assets.Exports; using CUE4Parse.UE4.Assets.Exports.Engine; using CUE4Parse.UE4.Assets.Exports.StaticMesh; +using CUE4Parse.UE4.Assets.Exports.Texture; using CUE4Parse.UE4.Assets.Objects; using CUE4Parse.UE4.Objects.UObject; -using CUE4Parse.UE4.Pak.Objects; using CUE4Parse.Utils; using Google.Protobuf; -using Google.Protobuf.Collections; -using Newtonsoft.Json.Linq; using YamlDotNet.Serialization; namespace BlitzKit.CLI.Functions @@ -99,8 +93,8 @@ namespace BlitzKit.CLI.Functions foreach (var tankDir in dir.Value.Directories) { - // if (tankDir.Value.Name != "R90_IS_4") - // continue; + if (tankDir.Value.Name != "R90_IS_4") + continue; tanksRaw.Add(MangleTank(tankDir.Value)); } @@ -197,15 +191,14 @@ namespace BlitzKit.CLI.Functions var pda = provider.LoadObject($"{tankDir.Path}/{pdaName}.{pdaName}"); var id = PropertyUtil.Get(pda, "TankId").Text; - var name = GetString($"TankEntity__{id.ToLowerInvariant()}__Short_Name"); - var slug = Diacritics.Remove(name.Locales["en"]).ToLower(); slug = Regex.Replace(slug, "[^a-z0-9]", "-"); slug = Regex.Replace(slug, "--+", "-"); slug = Regex.Replace(slug, "-$", ""); - // MangleHull(id, pda); + // MangleHull(pda); + MangleIcon(pda); Tank tank = new() { @@ -214,13 +207,24 @@ namespace BlitzKit.CLI.Functions Slug = slug, }; - changes.Add(new($"definitions/tanks/{id}.pb", tank.ToByteArray())); + changes.Add(new($"tanks/{id}/meta.pb", tank.ToByteArray())); return tank; } - void MangleHull(string tankId, UObject pda) + void MangleIcon(UObject pda) { + var id = PropertyUtil.Get(pda, "TankId").Text; + var smallIcon = BlitzKitExporter.Texture2D(PropertyUtil.Get(pda, "SmallIcon")); + var bigIcon = BlitzKitExporter.Texture2D(PropertyUtil.Get(pda, "BigIcon")); + + changes.Add(new($"tanks/{id}/icons/small.png", smallIcon)); + changes.Add(new($"tanks/{id}/icons/big.png", bigIcon)); + } + + void MangleHull(UObject pda) + { + var id = PropertyUtil.Get(pda, "TankId").Text; var hulls = PropertyUtil.Get(pda, "DT_Hulls"); UDataTableUtility.TryGetDataTableRow(hulls, "hull", StringComparison.Ordinal, out var hull); var hullVisualData = PropertyUtil.Get(hull, "VisualData"); @@ -228,7 +232,7 @@ namespace BlitzKit.CLI.Functions var hullCollision = PropertyUtil.Get(hullMeshSettings, "CollisionMesh"); MonoGltf hullCollisionGltf = new(hullCollision); - changes.Add(new($"tanks/{tankId}/collision/hull.glb", hullCollisionGltf.Write())); + changes.Add(new($"tanks/{id}/collision/hull.glb", hullCollisionGltf.Write())); } } } diff --git a/src/BlitzKit.CLI/Utils/Exporter.cs b/src/BlitzKit.CLI/Utils/Exporter.cs new file mode 100644 index 000000000..b797a5df5 --- /dev/null +++ b/src/BlitzKit.CLI/Utils/Exporter.cs @@ -0,0 +1,16 @@ +using CUE4Parse_Conversion.Textures; +using CUE4Parse.UE4.Assets.Exports.Texture; + +namespace BlitzKit.CLI.Utils +{ + public static class BlitzKitExporter + { + public static byte[] Texture2D(UTexture2D texture) + { + return texture + .Decode(ETexturePlatform.DesktopMobile)! + .Encode(ETextureFormat.Png, 100) + .ToArray(); + } + } +}