Skip to content

Commit

Permalink
wrap record data in a record type
Browse files Browse the repository at this point in the history
  • Loading branch information
diogotr7 committed Jan 26, 2025
1 parent bc7114c commit e1729ec
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 40 deletions.
6 changes: 3 additions & 3 deletions src/StarBreaker.DataCore.Generated/DataCoreBinaryGenerated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace StarBreaker.DataCoreGenerated;

//TODO: come up with a way of hashing the types we generated, then verify that the datacore file we're reading matches the types we have.
// if they don't match we *WILL* fail to read it. We should throw before this.
public sealed partial class DataCoreBinaryGenerated : IDataCoreBinary<IDataCoreReadable>
public sealed partial class DataCoreBinaryGenerated : IDataCoreBinary<DataCoreTypedRecord>
{
public DataCoreDatabase Database { get; }

Expand All @@ -14,14 +14,14 @@ public DataCoreBinaryGenerated(DataCoreDatabase database)
Database = database;
}

public IDataCoreReadable GetFromMainRecord(DataCoreRecord record)
public DataCoreTypedRecord GetFromMainRecord(DataCoreRecord record)
{
var data = ReadFromRecord(record.StructIndex, record.InstanceIndex);

if (data == null)
throw new InvalidOperationException($"Failed to read data from record {record}");

return data;
return new DataCoreTypedRecord(record.GetFileName(Database), record.GetName(Database), record.Id, data);
}

public void SaveToFile(DataCoreRecord record, string path)
Expand Down
10 changes: 10 additions & 0 deletions src/StarBreaker.DataCore.Generated/DataCoreTypedRecord.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using StarBreaker.Common;

namespace StarBreaker.DataCoreGenerated;

public record DataCoreTypedRecord(
string RecordFileName,
string RecordName,
CigGuid RecordId,
IDataCoreReadable Data
);
59 changes: 22 additions & 37 deletions src/StarBreaker.Sandbox/DataCoreSandbox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,36 +16,13 @@ public static void Run()
//WriteJson();
}

private static void ExtractAll()
{
var timer = new TimeLogger();
var dcb = DataForge.FromDcbXml(@"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.");
}

private static void ExtractProblematic()
{
var timer = new TimeLogger();

var dcb = DataForge.FromDcbXml(@"D:\StarCitizen\P4k\Data\Game2.dcb");
timer.LogReset("Loaded DataForge");

var yy = dcb.DataCore.Database.MainRecords
.AsParallel()
.Select(x => dcb.GetFromRecord(x)).ToArray();

timer.LogReset("Extracted all records.");

return;
Directory.CreateDirectory(@"D:\StarCitizen\DataCore\Sandbox");


var megaMap = dcb.GetRecordsByFileName("*megamap.pu*").Values.Single();
var tagDatabase = dcb.GetRecordsByFileName("*TagDatabase*").Values.Single();
var broker = dcb.GetRecordsByFileName("*missionbroker.pu*").Values.Single();
Expand All @@ -70,28 +47,36 @@ private static void ExtractGenerated()
var p4k = new P4kFileSystem(P4kFile.FromFile(@"C:\Program Files\Roberts Space Industries\StarCitizen\PTU\Data.p4k"));
var dcbStream = p4k.OpenRead(@"Data\Game2.dcb");

var df = new DataForge<IDataCoreReadable>(new DataCoreBinaryGenerated(new DataCoreDatabase(dcbStream)));
var df = new DataForge<DataCoreTypedRecord>(new DataCoreBinaryGenerated(new DataCoreDatabase(dcbStream)));

timer.LogReset("Loaded DataForge");

var megaMap = df.GetRecordsByFileName("*megamap.pu*").Values.Single();
var tagDatabase = df.GetRecordsByFileName("*TagDatabase*").Values.Single();
var broker = df.GetRecordsByFileName("*missionbroker.pu*").Values.Single();
var unittest = df.GetRecordsByFileName("*unittesta*").Values.Single();
var zeroggraph = df.GetRecordsByFileName("*playerzerogtraversalgraph*").Values.Single();
var another = df.DataCore.Database.GetRecord(new CigGuid("04cd25f7-e0c6-4564-95ae-ecfc998e285f"));
var bruh = df.GetFromRecord(tagDatabase);

var yy = df.DataCore.Database.MainRecords
var allRecords = df.DataCore.Database.MainRecords
.AsParallel()
.Select(x => df.GetFromRecord(x)).ToList();
timer.LogReset("Extracted all records.");

var zeroGTraversalGraphs = yy.OfType<ZeroGTraversalGraph>().ToList();

var classDefinitions = allRecords.Where(r => r.Data is EntityClassDefinition).Select(r => r.Data as EntityClassDefinition).ToList();
//var spaceships = classDefinitions.Where(x => x.Data.tags.Any(t => t?.tagName == "Ship")).ToList();

Console.WriteLine();
}

private static void ExtractXml()
{
var timer = new TimeLogger();
var dcb = DataForge.FromDcbXml(@"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.");
}

private static void WriteJson()
private static void ExtractJson()
{
var timer = new TimeLogger();
var dcb = DataForge.FromDcbJson(@"D:\StarCitizen\P4k\Data\Game2.dcb");
Expand Down

0 comments on commit e1729ec

Please sign in to comment.