Files
cosmoteer-pressure-relief-r…/components/radiator_auto.rules
T
TotenKnopfandClaude Opus 5 e64b50c2be feat: make the radiator report its own internal state
v1.1.0 loaded cleanly and still did nothing, so the NetworkValue rewrite
was not the whole story. Rather than keep guessing at which link in the
chain is dead, add indicator icons bound to the internal signals.

An indicator draws while its toggle is off, so one glance at a radiator
now separates the cases that were previously indistinguishable:

  wrench absent   -> the AddBase never merged; nothing in the mod runs
  thermal missile -> no thermal-ammo signal arriving
  resource        -> no hold signal arriving from a battery

Tests check that every added indicator binds to a component that exists
and to a sprite that exists in the indicators atlas.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011oLWY1G6S8U35bi2FxVWni
2026-08-28 23:46:22 +02:00

97 lines
2.6 KiB
Plaintext

// ABOUT ME
// Components merged into the Radiator. They receive the three network values
// this mod broadcasts and combine them into a single gate, AutoPowerToggle,
// which mod.rules then substitutes for the radiator's vanilla PowerToggle on
// the parts of the radiator that actually dissipate heat.
//
// Each broadcast arrives as a number, 1 or 0, summarised across the network by
// a NetworkValueReceiver and turned back into a toggle by a threshold at 0.5.
// A network with no broadcaster at all yields 0, which is why a ship without
// thermal batteries or thermal launchers keeps vanilla behaviour.
//
// The player's manual on/off switch (PowerToggle) is preserved and still wins:
// a radiator the player has switched off stays off. The automation can only
// idle a radiator the player has left on.
//
// A radiator vents when ANY of these hold:
// - the network is not asking it to hold (no battery, or battery full)
// - no launcher on the network is using thermal ammunition
// - some part is overflowing heat right now (safety net, overrides all)
AutoRad_HoldSignal
{
Type = NetworkValueReceiver
Categories = [ auto_radiator_hold ]
Mode = Max
AllowUncategorized = false
}
AutoRad_ThermalAmmoSignal
{
Type = NetworkValueReceiver
Categories = [ auto_radiator_ammo_user ]
Mode = Max
AllowUncategorized = false
}
AutoRad_ForceVentSignal
{
Type = NetworkValueReceiver
Categories = [ auto_radiator_force_vent ]
Mode = Max
AllowUncategorized = false
}
AutoRad_IsHolding
{
Type = ThresholdToggle
ValueFrom = AutoRad_HoldSignal
MinAmount = 0.5
}
AutoRad_ThermalAmmoInUse
{
Type = ThresholdToggle
ValueFrom = AutoRad_ThermalAmmoSignal
MinAmount = 0.5
}
AutoRad_ForceVent
{
Type = ThresholdToggle
ValueFrom = AutoRad_ForceVentSignal
MinAmount = 0.5
}
AutoRad_VentAllowed
{
Type = MultiToggle
Toggles
[
{ Toggle = AutoRad_IsHolding; Invert = true }
{ Toggle = AutoRad_ThermalAmmoInUse; Invert = true }
AutoRad_ForceVent
]
Mode = Any
}
// The replacement gate. PowerToggle is the radiator's vanilla UIToggle, so the
// player's switch remains the master control.
AutoPowerToggle
{
Type = MultiToggle
Toggles = [ PowerToggle, AutoRad_VentAllowed ]
Mode = All
}
// Diagnostic anchor. An indicator icon shows while its toggle is OFF, so an
// icon bound to this one is visible whenever these components were merged onto
// the part at all. If that icon is absent, the AddBase in mod.rules did not
// take effect and nothing else in this file is running either -- which is the
// single most useful thing to be able to tell apart from a dead signal.
AutoRad_AlwaysOff
{
Type = StaticToggle
ToggleOn = false
}