Aetheria/tools/AetherDb/scripts/station-fit.cs
Meta Vens 02058a3cdf Build ServerShared without Unity and add AetherDb scripts
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>
2026-09-11 23:23:20 +02:00

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;