Entity.UpdatePerformance sets ThermalOnline only when performance exceeds EntitySettings.ShutdownPerformance. A weapon at 0.006 performance at a hull's starting temperature passed the old "> 0" test but could never fire. The threshold is read from production (new EntitySettings().ShutdownPerformance). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
26 lines
1.2 KiB
C#
26 lines
1.2 KiB
C#
using System.Linq;
|
|
using Xunit;
|
|
|
|
// A weapon is thermally online only while its performance exceeds the shutdown threshold (Entity.UpdatePerformance
|
|
// compares against EntitySettings.ShutdownPerformance), and wear runs at full rate below it. Hull cells
|
|
// start at Entity.StartingCellTemperature, so every shipped weapon must perform there, or a ship fitted with it
|
|
// can never fire it. The catalog comes from the shipped GameData/Aetheria.cc and the temperature from the
|
|
// constant Entity builds its cells with, so a unit slip in authoring (celsius for kelvin) fails here.
|
|
public sealed class ShippedWeaponOperabilityTests
|
|
{
|
|
[Fact]
|
|
public void EveryShippedWeaponPerformsAtAHullsStartingTemperature()
|
|
{
|
|
using var cache = RestoredHullsTests.OpenCatalog();
|
|
var weapons = cache.GetAll<GearData>().OfType<WeaponItemData>().ToArray();
|
|
Assert.NotEmpty(weapons);
|
|
|
|
var threshold = new EntitySettings().ShutdownPerformance;
|
|
Assert.True(threshold > 0f);
|
|
|
|
var dead = weapons.Where(weapon => weapon.Performance(Entity.StartingCellTemperature) <= threshold)
|
|
.Select(weapon => $"{weapon.Name} ({weapon.MinimumTemperature}..{weapon.MaximumTemperature} K)").ToArray();
|
|
|
|
Assert.Empty(dead);
|
|
}
|
|
}
|