Skip to content

Commit

Permalink
better handling of property names
Browse files Browse the repository at this point in the history
  • Loading branch information
diogotr7 committed Jan 25, 2025
1 parent af35039 commit b349843
Show file tree
Hide file tree
Showing 6 changed files with 179 additions and 135 deletions.
259 changes: 140 additions & 119 deletions src/StarBreaker.DataCore/DataCoreBinary.cs

Large diffs are not rendered by default.

5 changes: 2 additions & 3 deletions src/StarBreaker.DataCore/DataCoreExtractionOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ namespace StarBreaker.DataCore;
public class DataCoreExtractionOptions
{
public required bool ShouldWriteMetadata { get; init; }
public required bool ShouldWriteEmptyArrays { get; init; }
public required bool ShouldWriteTypeNames { get; init; }
public required bool ShouldWriteBaseTypeNames { get; init; }
public required bool ShouldWriteDataTypes { get; init; }
public required bool ShouldWriteNulls { get; init; }
public required bool ShouldWriteEnumMetadata { get; init; }
public required bool ShouldSkipEmptyArrays { get; init; }
}
9 changes: 4 additions & 5 deletions src/StarBreaker.DataCore/DataForge.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class DataForge

public DataForge(Stream stream)
{
DataCore = new DataCoreBinary(stream);
DataCore = new DataCoreBinary(new DataCoreDatabase(stream));
}

public Dictionary<string, DataCoreRecord> GetRecordsByFileName(string? fileNameFilter = null)
Expand Down Expand Up @@ -131,10 +131,9 @@ public void ExtractUnp4k(string outputFileName, IProgress<double>? progress = nu
private static DataCoreExtractionOptions GetDefaultExtractionOptions() => new()
{
ShouldWriteMetadata = false,
ShouldWriteEmptyArrays = false,
ShouldWriteTypeNames = false,
ShouldWriteTypeNames = true,
ShouldWriteBaseTypeNames = false,
ShouldWriteDataTypes = false,
ShouldWriteNulls = false
ShouldWriteEnumMetadata = false,
ShouldSkipEmptyArrays = true
};
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace StarBreaker.DataCore;

public static class DataTypeExtensions
public static class EnumExtensions
{
public static string ToStringFast(this DataType dataType) => dataType switch
{
Expand All @@ -25,4 +25,12 @@ public static class DataTypeExtensions
DataType.Boolean => "Boolean",
_ => throw new ArgumentOutOfRangeException(nameof(dataType), dataType, null)
};

public static string ToStringFast(this ConversionType conversionType) => conversionType switch
{
ConversionType.Attribute => "Attribute",
ConversionType.ClassArray => "ClassArray",
ConversionType.ComplexArray => "ComplexArray",
ConversionType.SimpleArray => "SimpleArray",
};
}
29 changes: 23 additions & 6 deletions src/StarBreaker.Sandbox/DataCoreSandbox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,18 @@ public static class DataCoreSandbox
{
public static void Run()
{
ExtractAll();
//ExtractUnp4k();
//ExtractProblematic();
ExtractAll();
}

private static void ExtractUnp4k()
{
var timer = new TimeLogger();
var dcb = new DataForge(new MemoryStream(File.ReadAllBytes(@"D:\StarCitizen\P4k\Data\Game2.dcb")));
timer.LogReset("Loaded DataForge");
dcb.ExtractUnp4k(@"D:\unp4k\Unpak.xml");
timer.LogReset("Extracted all records.");
}

private static void ExtractAll()
Expand All @@ -16,7 +27,11 @@ private static void ExtractAll()
var dcb = new DataForge(new MemoryStream(File.ReadAllBytes(@"D:\StarCitizen\P4k\Data\Game2.dcb")));
timer.LogReset("Loaded DataForge");
Directory.CreateDirectory(@"D:\StarCitizen\DataCore\Sandbox");
#if DEBUG
dcb.ExtractAll(@"D:\StarCitizen\DataCore\Sandbox");
#else
dcb.ExtractAllParallel(@"D:\StarCitizen\DataCore\Sandbox");
#endif
timer.LogReset("Extracted all records.");
}

Expand All @@ -33,11 +48,13 @@ private static void ExtractProblematic()
var broker = dcb.GetRecordsByFileName("*missionbroker.pu*").Values.Single();
var unittest = dcb.GetRecordsByFileName("*unittesta*").Values.Single();
var zeroggraph = dcb.GetRecordsByFileName("*playerzerogtraversalgraph*").Values.Single();
var another = dcb.DataCore.Database.GetRecord(new CigGuid("04cd25f7-e0c6-4564-95ae-ecfc998e285f"));

dcb.GetFromRecord(zeroggraph).Save(@"D:\StarCitizen\DataCore\Sandbox\zeroggraph.xml");
dcb.GetFromRecord(broker).Save(@"D:\StarCitizen\DataCore\Sandbox\broker.xml");
dcb.GetFromRecord(unittest).Save(@"D:\StarCitizen\DataCore\Sandbox\unittesta.xml");
dcb.GetFromRecord(tagDatabase).Save(@"D:\StarCitizen\DataCore\Sandbox\tagdatabase.xml");
dcb.GetFromRecord(megaMap).Save(@"D:\StarCitizen\DataCore\Sandbox\megamap.xml");
//dcb.GetFromRecord(another).Save(@"D:\StarCitizen\DataCore\Sandbox\another.xml");
// dcb.GetFromRecord(zeroggraph).Save(@"D:\StarCitizen\DataCore\Sandbox\zeroggraph.xml");
// dcb.GetFromRecord(broker).Save(@"D:\StarCitizen\DataCore\Sandbox\broker.xml");
dcb.GetFromRecord(unittest).Save(@"D:\StarCitizen\DataCore\Sandbox\unittesta.xml");
// dcb.GetFromRecord(tagDatabase).Save(@"D:\StarCitizen\DataCore\Sandbox\tagdatabase.xml");
// dcb.GetFromRecord(megaMap).Save(@"D:\StarCitizen\DataCore\Sandbox\megamap.xml");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public DataCoreTabViewModel(IP4kService p4kService)
private void Initialize()
{
var entry = _p4KService.P4KFileSystem.OpenRead(dataCorePath);
var dcb = new DataCoreBinary(entry);
var dcb = new DataCoreBinary(new DataCoreDatabase(entry));
entry.Dispose();

Dispatcher.UIThread.InvokeAsync(() => DataCore = dcb);
Expand Down

0 comments on commit b349843

Please sign in to comment.