gauges: publish HeatSink attribute table (CoolantMass/CoolantCapacity/CurrentTemperature)

The cockpit gauge config binds Subsystem/Attribute names (e.g.
HeatSink/CurrentTemperature) resolved by ParseAttribute -> FindSubsystem ->
GetAttributePointer -> the class's activeAttributeIndex.  HeatSink wired
GetAttributeIndex() into DefaultData but published an EMPTY table (only the
inherited SimulationState id 1), so every HeatSink/* numeric read NULL ->
guarded to 0.

Add HeatSink::AttributePointers[] + GetAttributeIndex() publishing CoolantMass
(coolantLevel @0x12C), CoolantCapacity (thermalCapacity @0x128), and
CurrentTemperature (inherited currentTemperature @0x114), chained to the parent
index so SimulationState is preserved and the built index stays dense (ids run
contiguously from HeatableSubsystem::NextAttributeID -- a gap would make
AttributeIndexSet::Find strcmp a garbage slot).  Condenser and Reservoir derive
from HeatSink with no override, so they inherit this table for free.

Verified live (BT_DEV_GAUGES): the Heat surface heatsink-temperature readout
(numeric HeatSink/CurrentTemperature, a base engine primitive that was already
drawing NULL) now shows 77 (= startTemp) instead of 0.  Combat un-regressed
(TARGET DESTROYED after 8 hits), 0 crashes.  The coolant attributes are ready
for the vertBar widget (next increment).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-06 18:19:09 -05:00
co-authored by Claude Opus 4.8
parent d006b40927
commit 9ea4bdaf50
2 changed files with 50 additions and 0 deletions
+28
View File
@@ -318,6 +318,34 @@ int
//###########################################################################
//###########################################################################
//#############################################################################
// Attribute Support
//
// The named attributes the cockpit gauges bind to (config content/GAUGE/L4GAUGE.CFG:
// HeatSink/CoolantMass, HeatSink/CoolantCapacity, HeatSink/CurrentTemperature).
// Chained to the parent index so SimulationState (id 1) is preserved; the ids run
// contiguously from HeatableSubsystem::NextAttributeID so the built index stays dense
// (AttributeIndexSet::Find strcmps every slot -- a gap would read a garbage name).
//
const HeatSink::IndexEntry
HeatSink::AttributePointers[]=
{
ATTRIBUTE_ENTRY(HeatSink, CoolantMass, coolantLevel), // @0x12C (live: UpdateCoolant depletes it)
ATTRIBUTE_ENTRY(HeatSink, CoolantCapacity, thermalCapacity), // @0x128
ATTRIBUTE_ENTRY(HeatSink, CurrentTemperature, currentTemperature) // @0x114 (inherited from HeatableSubsystem)
};
HeatSink::AttributeIndexSet&
HeatSink::GetAttributeIndex()
{
static HeatSink::AttributeIndexSet attributeIndex(
ELEMENTS(HeatSink::AttributePointers),
HeatSink::AttributePointers,
HeatableSubsystem::GetAttributeIndex()
);
return attributeIndex;
}
//#############################################################################
// Shared Data Support
//
+22
View File
@@ -275,6 +275,28 @@ inline int
static Derivation *GetClassDerivations();
static SharedData DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Attribute Support -- the cockpit gauge bindings resolved by name through
// Simulation::GetAttributePointer (see engine GAUGREND.cpp ParseAttribute):
// HeatSink/CoolantMass -> coolantLevel (@0x12C, live)
// HeatSink/CoolantCapacity -> thermalCapacity (@0x128)
// HeatSink/CurrentTemperature -> currentTemperature (@0x114, inherited)
// Condenser and Reservoir derive from HeatSink and define no override, so
// their DefaultData resolves Condenser6/CoolantMass/... to this same table.
// (SimulationState id 1 is preserved by chaining to the parent index.)
//
public:
enum {
CoolantMassAttributeID = HeatableSubsystem::NextAttributeID,
CoolantCapacityAttributeID,
CurrentTemperatureAttributeID,
NextAttributeID
};
private:
static const IndexEntry AttributePointers[];
public:
static AttributeIndexSet& GetAttributeIndex();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Heat alarm state (this+0x138, reported by PrintState @004ae050)
//