#include "TankProperties.hxx"
#include <simgear/math/SGMath.hxx>
+#include <simgear/sg_inlines.h>
#include <Main/fg_props.hxx>
static const double LBS_PER_KG = 2.20462262;
_unusable_m3(0.0)
{
_tiedProperties.setRoot( rootNode );
+}
+
+void TankProperties::bind()
+{
_tiedProperties.Tie("level-kg", this, &TankProperties::getContent_kg, &TankProperties::setContent_kg );
_tiedProperties.Tie("density-kgpm3", this, &TankProperties::getDensity_kgpm3, &TankProperties::setDensity_kgpm3 );
_tiedProperties.Tie("capacity-m3", this, &TankProperties::getCapacity_m3, &TankProperties::setCapacity_m3 );
{
}
+void TankProperties::unbind()
+{
+ _tiedProperties.Untie();
+}
+
double TankProperties::getContent_kg() const
{
return _content_kg;
void TankProperties::setContent_kg( double value )
{
- _content_kg = value;
+ _content_kg = SG_MAX2<double>(value, 0.0);
}
double TankProperties::getDensity_kgpm3() const
void TankProperties::setDensity_kgpm3( double value )
{
- _density_kgpm3 = value;
+ _density_kgpm3 = SG_MAX2<double>(value, 0.0);
}
double TankProperties::getDensity_ppg() const
void TankProperties::setDensity_ppg( double value )
{
- _density_kgpm3 = value * KG_PER_LBS / M3_PER_USGAL;
+ _density_kgpm3 = SG_MAX2<double>(value * KG_PER_LBS / M3_PER_USGAL, 0.0);
}
double TankProperties::getContent_lbs() const
void TankProperties::setContent_lbs( double value )
{
- _content_kg = value * KG_PER_LBS;
+ _content_kg = SG_MAX2<double>(value * KG_PER_LBS, 0.0);
}
double TankProperties::getContent_m3() const
void TankProperties::setContent_m3( double value )
{
// ugly hack to allow setting of a volumetric content without having the density
- _content_kg = value * (_density_kgpm3>0.0?_density_kgpm3:755.0);
+ _content_kg = SG_MAX2<double>(value * (_density_kgpm3>0.0?_density_kgpm3:755.0), 0.0);
}
double TankProperties::getContent_gal_us() const
void TankProperties::setCapacity_m3( double value )
{
- _capacity_m3 = value;
+ _capacity_m3 = SG_MAX2<double>(value, 0.0);
}
double TankProperties::getCapacity_gal_us() const
void TankProperties::setCapacity_gal_us( double value )
{
- _capacity_m3 = value * M3_PER_USGAL;
+ _capacity_m3 = SG_MAX2<double>(value * M3_PER_USGAL, 0.0);
}
double TankProperties::getCapacity_gal_imp() const
void TankProperties::setCapacity_gal_imp( double value )
{
- _capacity_m3 = value * M3_PER_IMPGAL;
+ _capacity_m3 = SG_MAX2<double>(value * M3_PER_IMPGAL, 0.0);
}
double TankProperties::getUnusable_m3() const
void TankProperties::setUnusable_m3( double value )
{
- _unusable_m3 = value;
+ _unusable_m3 = SG_MAX2<double>(value, 0.0);
}
double TankProperties::getUnusable_gal_us() const
void TankProperties::setUnusable_gal_us( double value )
{
- _unusable_m3 = value * M3_PER_USGAL;
+ _unusable_m3 = SG_MAX2<double>(value * M3_PER_USGAL, 0.0);
}
void TankProperties::setUnusable_gal_imp( double value )
{
- _unusable_m3 = value * M3_PER_IMPGAL;
+ _unusable_m3 = SG_MAX2<double>(value * M3_PER_IMPGAL, 0.0);
}
double TankProperties::getContent_norm() const
}
_tiedProperties.setRoot( rootNode );
- _tiedProperties.Tie("total-fuel-kg", this, &TankPropertiesList::getTotalContent_kg );
- _tiedProperties.Tie("total-fuel-lbs", this, &TankPropertiesList::getTotalContent_lbs );
- _tiedProperties.Tie("total-fuel-gal_us", this, &TankPropertiesList::getTotalContent_gal_us );
- _tiedProperties.Tie("total-fuel-gals", this, &TankPropertiesList::getTotalContent_gal_us );
- _tiedProperties.Tie("total-fuel-gal_imp", this, &TankPropertiesList::getTotalContent_gal_imp );
- _tiedProperties.Tie("total-fuel-norm", this, &TankPropertiesList::getTotalContent_norm );
}
double TankPropertiesList::getTotalContent_lbs() const
return capacity > SGLimitsd::min() ? content / capacity : 0.0;
}
+void TankPropertiesList::bind()
+{
+ _tiedProperties.Tie("total-fuel-kg", this, &TankPropertiesList::getTotalContent_kg );
+ _tiedProperties.Tie("total-fuel-lbs", this, &TankPropertiesList::getTotalContent_lbs );
+ _tiedProperties.Tie("total-fuel-gal_us", this, &TankPropertiesList::getTotalContent_gal_us );
+ _tiedProperties.Tie("total-fuel-gals", this, &TankPropertiesList::getTotalContent_gal_us );
+ _tiedProperties.Tie("total-fuel-gal_imp", this, &TankPropertiesList::getTotalContent_gal_imp );
+ _tiedProperties.Tie("total-fuel-norm", this, &TankPropertiesList::getTotalContent_norm );
+ for( const_iterator it = begin(); it != end(); ++it ) {
+ (*it)->bind();
+ }
+}
+void TankPropertiesList::unbind()
+{
+ for( const_iterator it = begin(); it != end(); ++it ) {
+ (*it)->unbind();
+ }
+ _tiedProperties.Untie();
+}