Aetheria.Shared.csproj compiles ServerShared with MessagePack, UniRx core, Ink and Unity.Mathematics from source against .NET Standard 2.1 (Unity's API level) with no Unity defines; a clean build checks that the simulation stays engine-independent. tools/AetherDb opens AetherDB.msgpack through the game's own CultCache for file-based C# scripts; station-fit checks every station hull can take a docking bay. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
22 lines
1.1 KiB
C#
22 lines
1.1 KiB
C#
// Checks that some docking bay fits every station hull, which LoadoutGenerator.GenerateStationLoadout requires.
|
|
// Exits with the number of station hulls that cannot take any docking bay.
|
|
using System;
|
|
using System.Linq;
|
|
|
|
var db = AetherDb.Open();
|
|
var bays = db.Cache.GetAll<DockingBayData>().ToArray();
|
|
var failures = 0;
|
|
foreach (var hull in db.Cache.GetAll<HullData>().Where(h => h.HullType == HullType.Station))
|
|
{
|
|
// Hardpoint gear is equipped before the docking bay, so the worst case leaves only the non-hardpoint interior free
|
|
var worstCase = new Shape(hull.Shape.Width, hull.Shape.Height);
|
|
foreach (var v in hull.InteriorCells.Coordinates) worstCase[v] = true;
|
|
foreach (var hardpoint in hull.Hardpoints)
|
|
foreach (var v in hardpoint.Shape.Coordinates)
|
|
worstCase[hardpoint.Position + v] = false;
|
|
|
|
var fitting = bays.Where(b => b.Shape.FitsWithin(worstCase, out _, out _)).Select(b => b.Name).ToArray();
|
|
if (fitting.Length == 0) failures++;
|
|
Console.WriteLine($"{hull.Name}: {(fitting.Length == 0 ? "NO docking bay fits" : string.Join(", ", fitting))}");
|
|
}
|
|
return failures;
|