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:
co-authored by
Claude Opus 4.8
parent
d006b40927
commit
9ea4bdaf50
@@ -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
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user