diff --git a/game/reconstructed/heat.cpp b/game/reconstructed/heat.cpp index 9084809..13684e0 100644 --- a/game/reconstructed/heat.cpp +++ b/game/reconstructed/heat.cpp @@ -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 // diff --git a/game/reconstructed/heat.hpp b/game/reconstructed/heat.hpp index c5dd7b0..3cb6c59 100644 --- a/game/reconstructed/heat.hpp +++ b/game/reconstructed/heat.hpp @@ -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) //