diff --git a/src/BlitzKit.CLI/Functions/Mangler.cs b/src/BlitzKit.CLI/Functions/Mangler.cs index 5be7726e0..4c66cda80 100644 --- a/src/BlitzKit.CLI/Functions/Mangler.cs +++ b/src/BlitzKit.CLI/Functions/Mangler.cs @@ -40,10 +40,9 @@ namespace BlitzKit.CLI.Functions { var pdaName = $"PDA_{tankDir.Name}"; var pda = tankDir.GetUasset($"{pdaName}.uasset").Get(pdaName); + var tankId = pda.GetName("TankId"); - Console.WriteLine(pda); - - return new(); + return new() { Id = tankId }; } Dictionary CrewTypes = new() diff --git a/src/BlitzKit.CLI/Models/MappedUObject.cs b/src/BlitzKit.CLI/Models/MappedUObject.cs new file mode 100644 index 000000000..4421c4293 --- /dev/null +++ b/src/BlitzKit.CLI/Models/MappedUObject.cs @@ -0,0 +1,82 @@ +using CUE4Parse.FileProvider; +using CUE4Parse.FileProvider.Objects; +using CUE4Parse.UE4.Assets.Exports; +using CUE4Parse.UE4.Assets.Objects; +using CUE4Parse.UE4.Assets.Objects.Properties; +using CUE4Parse.UE4.Objects.UObject; + +namespace BlitzKit.CLI.Models +{ + public class MappedUObject : UObject + { + readonly Dictionary Names = []; + readonly Dictionary SoftObjects = []; + readonly Dictionary Objects = []; + readonly Dictionary Structs = []; + readonly Dictionary Booleans = []; + readonly Dictionary Floats = []; + readonly Dictionary Arrays = []; + + public MappedUObject(List properties) + : base(properties) + { + foreach (var property in properties) + { + switch (property.Tag) + { + case NameProperty name: + { + Names.Add(property.Name.Text, name); + break; + } + + case SoftObjectProperty softObject: + { + SoftObjects.Add(property.Name.Text, softObject); + break; + } + + case ObjectProperty obj: + { + Objects.Add(property.Name.Text, obj); + break; + } + + case StructProperty structure: + { + Structs.Add(property.Name.Text, structure); + break; + } + + case BoolProperty boolean: + { + Booleans.Add(property.Name.Text, boolean); + break; + } + + case FloatProperty number: + { + Floats.Add(property.Name.Text, number); + break; + } + + case ArrayProperty array: + { + Arrays.Add(property.Name.Text, array); + break; + } + + default: + { + throw new Exception($"Unhandled property type: {property}"); + } + } + } + } + + public string GetName(string name) + { + return Names[name].Value.Text; + } + } +} diff --git a/src/BlitzKit.CLI/Models/Uasset.cs b/src/BlitzKit.CLI/Models/Uasset.cs index c234cfbd1..13f1ca483 100644 --- a/src/BlitzKit.CLI/Models/Uasset.cs +++ b/src/BlitzKit.CLI/Models/Uasset.cs @@ -7,7 +7,7 @@ namespace BlitzKit.CLI.Models public class Uasset { readonly GameFile file; - readonly Dictionary objects = []; + readonly Dictionary objects = []; public Uasset(GameFile file, AbstractFileProvider provider) { @@ -16,10 +16,10 @@ namespace BlitzKit.CLI.Models foreach (var obj in objects) { - this.objects.Add(obj.Name, obj); + this.objects.Add(obj.Name, new(obj.Properties)); } } - public UObject Get(string name) => objects[name]; + public MappedUObject Get(string name) => objects[name]; } }