Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Dat/Dat.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

<ItemGroup>
<Compile Remove="Services\**" />
<EmbeddedResource Remove="Services\**" />
<None Remove="Services\**" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp" Version="4.0.0" />
</ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion DataQuery/DataQuery.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
Expand Down
192 changes: 3 additions & 189 deletions DataQuery/Program.cs
Original file line number Diff line number Diff line change
@@ -1,190 +1,4 @@
// See https://aka.ms/new-console-template for more information
using OpenLoco.Common.Logging;
using Common.Logging;
using OpenLoco.Dat.Data;
using Common.Logging;
using OpenLoco.Dat.FileParsing;
using Common.Logging;
using OpenLoco.Dat.Objects;
using Common.Logging;
using OpenLoco.Definitions.Database;
using Common.Logging;
using System.Reflection;
using Common.Logging;
// DataQuery: legacy one-off research console app. All queries previously here have been
// removed; use the DatabaseTools project for current dev/query tooling.

var dir = "Q:\\Games\\Locomotion\\Server\\Objects";
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);

//QueryCostIndices(dir, logger, index);
//QueryCargoCategories(dir, logger, index);
//QueryVehicleBodyUnkSprites(dir, logger, index);
//QueryIndustryHasShadows(dir, logger, index);

Console.WriteLine("done");

Console.ReadLine();

static void QueryIndustryHasShadows(string dir, Logger logger, ObjectIndex index)
{
var results = new List<(ObjectIndexEntry Obj, ObjectSource ObjectSource)>();

foreach (var obj in index.Objects.Where(x => x.ObjectType == ObjectType.Industry))
{
try
{
var o = SawyerStreamReader.LoadFullObjectFromFile(Path.Combine(dir, obj.FileName), logger);
if (o?.LocoObject != null)
{
var struc = (IndustryObject)o.Value.LocoObject.Object;
var header = o.Value.DatFileInfo.S5Header;
var source = OriginalObjectFiles.GetFileSource(header.Name, header.Checksum);

if (struc.Flags.HasFlag(IndustryObjectFlags.HasShadows))
{
results.Add((obj, source));
}
}
}
catch (Exception ex)
{
Console.WriteLine($"{obj.FileName} - {ex.Message}");
}
}

Console.WriteLine(results.Count);

const string csvHeader = "DatName, ObjectSource";
var lines = results
.OrderBy(x => x.Obj.DisplayName)
.Select(x => string.Join(',', x.Obj.DisplayName, x.ObjectSource));

File.WriteAllLines("vehicleBodiesWithUnkSpritesFlag.csv", [csvHeader, .. lines]);
}

static void QueryVehicleBodyUnkSprites(string dir, Logger logger, ObjectIndex index)
{
var results = new List<(ObjectIndexEntry Obj, ObjectSource ObjectSource)>();

foreach (var obj in index.Objects.Where(x => x.ObjectType == ObjectType.Vehicle))
{
try
{
var o = SawyerStreamReader.LoadFullObjectFromFile(Path.Combine(dir, obj.FileName), logger);
if (o?.LocoObject != null)
{
var struc = (VehicleObject)o.Value.LocoObject.Object;
var header = o.Value.DatFileInfo.S5Header;
var source = OriginalObjectFiles.GetFileSource(header.Name, header.Checksum);

if (struc.Flags.HasFlag(VehicleObjectFlags.AlternatingCarSprite))
{
results.Add((obj, source));
}
}
}
catch (Exception ex)
{
Console.WriteLine($"{obj.FileName} - {ex.Message}");
}
}

Console.WriteLine(results.Count);

const string csvHeader = "DatName, ObjectSource";
var lines = results
.OrderBy(x => x.Obj.DisplayName)
.Select(x => string.Join(',', x.Obj.DisplayName, x.ObjectSource));

File.WriteAllLines("vehicleBodiesWithUnkSpritesFlag.csv", [csvHeader, .. lines]);
}

static void QueryCargoCategories(string dir, Logger logger, ObjectIndex index)
{
var results = new List<(ObjectIndexEntry Obj, CargoCategory CargoCategory, string LocalisedName, ObjectSource ObjectSource)>();

foreach (var obj in index.Objects.Where(x => x.ObjectType == ObjectType.Cargo))
{
try
{
var o = SawyerStreamReader.LoadFullObjectFromFile(Path.Combine(dir, obj.FileName), logger);
if (o?.LocoObject != null)
{
var struc = (CargoObject)o.Value.LocoObject.Object;

var header = o.Value.DatFileInfo.S5Header;
var source = OriginalObjectFiles.GetFileSource(header.Name, header.Checksum);

results.Add((obj, struc.CargoCategory, o.Value.LocoObject.StringTable.Table["Name"][LanguageId.English_UK], source));
}
}
catch (Exception ex)
{
Console.WriteLine($"{obj.FileName} - {ex.Message}");
}
}

Console.WriteLine("writing to file");

const string csvHeader = "DatName, CargoCategory, LocalisedName, ObjectSource";
var lines = results
.OrderBy(x => x.Obj.DisplayName)
.Select(x => string.Join(',', x.Obj.DisplayName, (int)x.CargoCategory, x.LocalisedName, x.ObjectSource));
File.WriteAllLines("cargoCategories.csv", [csvHeader, .. lines]);
}

static void QueryCostIndices(string dir, Logger logger, ObjectIndex index)
{
var results = new List<(ObjectIndexEntry Obj, byte CostIndex, short? RunCostIndex)>();

foreach (var obj in index.Objects)
{
try
{
var o = SawyerStreamReader.LoadFullObjectFromFile(Path.Combine(dir, obj.FileName), logger);
if (o?.LocoObject != null)
{
var struc = o.Value.LocoObject.Object;
var type = struc.GetType();

var costIndexProperty = type.GetProperty("CostIndex", BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
var paymentIndexProperty = type.GetProperty("PaymentIndex", BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
var runCostIndexProperty = type.GetProperty("RunCostIndex", BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);

byte? costIndex = null;
byte? runCostIndex = null;

if (costIndexProperty?.PropertyType == typeof(byte) && costIndexProperty.GetValue(struc) is byte costIndexValue)
{
costIndex = costIndexValue;
}
else if (paymentIndexProperty?.PropertyType == typeof(byte) && paymentIndexProperty.GetValue(struc) is byte paymentIndexValue)
{
costIndex = paymentIndexValue;
}

if (runCostIndexProperty?.PropertyType == typeof(byte) && runCostIndexProperty.GetValue(struc) is byte runCostIndexValue)
{
runCostIndex = runCostIndexValue;
}

if (costIndex != null)
{
results.Add((obj, costIndex.Value, runCostIndex));
}
}
}
catch (Exception ex)
{
Console.WriteLine($"{obj.FileName} - {ex.Message}");
}
}

Console.WriteLine("writing to file");

const string header = "DatName, ObjectType, CostIndex, RunCostIndex";
var lines = results
.OrderBy(x => x.Obj.DisplayName)
.Select(x => string.Join(',', x.Obj.DisplayName, x.Obj.ObjectType, x.CostIndex, x.RunCostIndex));
File.WriteAllLines("costIndex.csv", [header, .. lines]);
}
Console.WriteLine("DataQuery: no-op. See DatabaseTools for current dev/query tooling.");
2 changes: 1 addition & 1 deletion DatabaseTools/DatabaseTools.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<ProjectReference Include="..\Common\Common.csproj" />
<ProjectReference Include="..\Dat\Dat.csproj" />
<ProjectReference Include="..\Definitions\Definitions.csproj" />
<ProjectReference Include="..\Index\Index.csproj" />
<ProjectReference Include="..\ObjectService\ObjectService.csproj" />
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion DatabaseTools/Services/DatabaseExportService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public static class DatabaseExportService
public static Task ExportAllAsync(ToolsSettings settings, Action<string> log)
=> Task.Run(() =>
{
using var db = LocoDbContext.GetDbFromFile(settings.DatabaseFile)
using var db = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile)
?? throw new InvalidOperationException($"Database not found at {settings.DatabaseFile}");

log("Loading from database...");
Expand Down
51 changes: 32 additions & 19 deletions DatabaseTools/Services/DatabaseHelperScripts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
using Definitions.ObjectModels.Objects.Wall;
using Definitions.ObjectModels.Objects.Water;
using Definitions.ObjectModels.Types;
using Index;
using Definitions;
using Microsoft.EntityFrameworkCore;
using System.IO.Hashing;
using System.Reflection;
Expand Down Expand Up @@ -103,7 +103,8 @@ public static Task QueryBuildingVar_AC(ToolsSettings settings, Action<string> lo
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var results = new List<(ObjectIndexEntry Obj, int var_ac)>();

Expand Down Expand Up @@ -143,7 +144,8 @@ public static Task QueryBuildingProducedQuantity(ToolsSettings settings, Action<
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var results = new List<(ObjectIndexEntry Obj, (string ProducedName, int ProducedQuantity))>();

Expand Down Expand Up @@ -179,7 +181,8 @@ public static Task QueryHeadquarters(ToolsSettings settings, Action<string> log)
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var results = new List<(ObjectIndexEntry Obj, ObjectSource ObjectSource)>();

Expand Down Expand Up @@ -216,7 +219,8 @@ public static Task QueryCostIndex(ToolsSettings settings, Action<string> log) =>
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var results = new List<(ObjectIndexEntry Obj, ObjectSource ObjectSource, ObjectType ObjectType, byte CostIndex)>();

Expand Down Expand Up @@ -267,7 +271,8 @@ public static Task QueryTrackStationOneSidedTrack(ToolsSettings settings, Action
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var results = new List<(ObjectIndexEntry Obj, ObjectSource ObjectSource, List<string> Flags)>();

Expand Down Expand Up @@ -323,7 +328,8 @@ public static Task QueryIndustryHasShadows(ToolsSettings settings, Action<string
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var results = new List<(ObjectIndexEntry Obj, ObjectSource ObjectSource)>();

Expand Down Expand Up @@ -361,7 +367,8 @@ public static Task QueryVehicleBodyUnkSprites(ToolsSettings settings, Action<str
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var results = new List<(ObjectIndexEntry Obj, ObjectSource ObjectSource)>();

Expand Down Expand Up @@ -399,7 +406,8 @@ public static Task QueryCargoCategories(ToolsSettings settings, Action<string> l
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var results = new List<(ObjectIndexEntry Obj, CargoCategory CargoCategory, string LocalisedName, ObjectSource ObjectSource)>();

Expand Down Expand Up @@ -433,7 +441,8 @@ public static Task QueryCostIndices(ToolsSettings settings, Action<string> log)
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var results = new List<(ObjectIndexEntry Obj, byte CostIndex, short? RunCostIndex)>();

Expand Down Expand Up @@ -488,11 +497,12 @@ public static Task QueryCostIndices(ToolsSettings settings, Action<string> log)

public static async Task WritexxHash3(ToolsSettings settings, Action<string> log)
{
using var db = LocoDbContext.GetDbFromFile(settings.DatabaseFile)
using var db = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile)
?? throw new InvalidOperationException($"Database not found at {settings.DatabaseFile}");
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var objects = await db.DatObjects.Include(x => x.Object).ToListAsync();

Expand All @@ -518,11 +528,12 @@ public static async Task WritexxHash3(ToolsSettings settings, Action<string> log

public static async Task FixObjectDescriptions(ToolsSettings settings, Action<string> log)
{
using var db = LocoDbContext.GetDbFromFile(settings.DatabaseFile)
using var db = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile)
?? throw new InvalidOperationException($"Database not found at {settings.DatabaseFile}");
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var objects = await db.Objects.Include(x => x.DatObjects).ToListAsync();

Expand Down Expand Up @@ -561,11 +572,12 @@ public static async Task FixObjectDescriptions(ToolsSettings settings, Action<st

public static async Task WriteStringTable(ToolsSettings settings, Action<string> log)
{
using var db = LocoDbContext.GetDbFromFile(settings.DatabaseFile)
using var db = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile)
?? throw new InvalidOperationException($"Database not found at {settings.DatabaseFile}");
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);

var objects = await db.Objects
.Include(x => x.DatObjects)
Expand Down Expand Up @@ -622,8 +634,9 @@ public static async Task SetupSubObjects(ToolsSettings settings, Action<string>
{
var dir = settings.ObjectDirectory;
var logger = new Logger();
var index = ObjectIndex.LoadOrCreateIndex(dir, logger);
using var db = LocoDbContext.GetDbFromFile(settings.DatabaseFile)
using var indexDb = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile);
var index = ObjectIndex.FromDb(indexDb);
using var db = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile)
?? throw new InvalidOperationException($"Database not found at {settings.DatabaseFile}");

var objects = await db.Objects.Include(x => x.DatObjects).ToListAsync();
Expand Down Expand Up @@ -672,7 +685,7 @@ public static async Task SetupSubObjects(ToolsSettings settings, Action<string>

public static async Task QuerySubObjects(ToolsSettings settings, Action<string> log)
{
using var db = LocoDbContext.GetDbFromFile(settings.DatabaseFile)
using var db = BaseLocoDbContext.GetDbFromFile(settings.DatabaseFile)
?? throw new InvalidOperationException($"Database not found at {settings.DatabaseFile}");

var results = await db.ObjClimate
Expand Down
Loading