- add heading-deg, pitch-deg, roll-deg to impact/
- if no <impact-reports> node is defined for a particular submodel, then write the path to /ai/models/model-impact instead - don't tie() properties that are only ever set a single time, if at all! - better variable names
This commit is contained in:
parent
e8f2255039
commit
bbb1d2d0c3
2 changed files with 20 additions and 45 deletions
|
@ -47,13 +47,8 @@ FGAIBallistic::FGAIBallistic() :
|
|||
_ht_agl_ft(0),
|
||||
_load_resistance(0),
|
||||
_solid(false),
|
||||
_impact_data(false),
|
||||
_impact_report_node(0),
|
||||
_impact_energy(0),
|
||||
_impact_speed(0),
|
||||
_impact_lat(0),
|
||||
_impact_lon(0),
|
||||
_impact_elev(0),
|
||||
_impact_reported(false),
|
||||
_impact_report_node(fgGetNode("/ai/models/model-impact", true)),
|
||||
_mat_name("")
|
||||
{
|
||||
no_roll = false;
|
||||
|
@ -113,16 +108,6 @@ void FGAIBallistic::bind() {
|
|||
SGRawValuePointer<bool>(&_solid));
|
||||
props->tie("altitude-agl-ft",
|
||||
SGRawValuePointer<double>(&_ht_agl_ft));
|
||||
props->tie("impact/latitude-deg",
|
||||
SGRawValuePointer<double>(&_impact_lat));
|
||||
props->tie("impact/longitude-deg",
|
||||
SGRawValuePointer<double>(&_impact_lon));
|
||||
props->tie("impact/elevation-m",
|
||||
SGRawValuePointer<double>(&_impact_elev));
|
||||
props->tie("impact/speed-mps",
|
||||
SGRawValuePointer<double>(&_impact_speed));
|
||||
props->tie("impact/energy-kJ",
|
||||
SGRawValuePointer<double>(&_impact_energy));
|
||||
}
|
||||
|
||||
void FGAIBallistic::unbind() {
|
||||
|
@ -131,11 +116,6 @@ void FGAIBallistic::unbind() {
|
|||
props->untie("material/load-resistance");
|
||||
props->untie("material/solid");
|
||||
props->untie("altitude-agl-ft");
|
||||
props->untie("impact/latitude-deg");
|
||||
props->untie("impact/longitude-deg");
|
||||
props->untie("impact/elevation-m");
|
||||
props->untie("impact/speed-mps");
|
||||
props->untie("impact/energy-kJ");
|
||||
}
|
||||
|
||||
void FGAIBallistic::update(double dt) {
|
||||
|
@ -201,13 +181,11 @@ void FGAIBallistic::setRandom(bool r) {
|
|||
}
|
||||
|
||||
void FGAIBallistic::setImpact(bool i) {
|
||||
_impact = i;
|
||||
_report_impact = i;
|
||||
}
|
||||
|
||||
void FGAIBallistic::setImpactReportNode(const string& path) {
|
||||
if (path.empty())
|
||||
_impact_report_node = 0;
|
||||
else
|
||||
if (!path.empty())
|
||||
_impact_report_node = fgGetNode(path.c_str(), true);
|
||||
}
|
||||
|
||||
|
@ -296,7 +274,7 @@ void FGAIBallistic::Run(double dt) {
|
|||
// recalculate total speed
|
||||
speed = sqrt( vs * vs + hs * hs) / SG_KT_TO_FPS;
|
||||
|
||||
if (_impact && !_impact_data)
|
||||
if (_report_impact && !_impact_reported)
|
||||
handle_impact();
|
||||
|
||||
// set destruction flag if altitude less than sea level -1000
|
||||
|
@ -335,18 +313,21 @@ void FGAIBallistic::handle_impact() {
|
|||
|
||||
// report impact by setting property-tied variables
|
||||
if (_ht_agl_ft <= 0) {
|
||||
_impact_data = true;
|
||||
_impact_reported = true;
|
||||
double speed_mps = speed * SG_KT_TO_MPS;
|
||||
|
||||
_impact_lat = pos.getLatitudeDeg();
|
||||
_impact_lon = pos.getLongitudeDeg();
|
||||
_impact_elev = elevation_m;
|
||||
_impact_speed = speed * SG_KT_TO_MPS;
|
||||
_impact_energy = (_mass * slugs_to_kgs) * _impact_speed
|
||||
* _impact_speed / (2 * 1000);
|
||||
SGPropertyNode *n = props->getNode("impact", true);
|
||||
n->setDoubleValue("longitude-deg", pos.getLongitudeDeg());
|
||||
n->setDoubleValue("latitude-deg", pos.getLatitudeDeg());
|
||||
n->setDoubleValue("elevation-m", elevation_m);
|
||||
n->setDoubleValue("heading-deg", hdg);
|
||||
n->setDoubleValue("pitch-deg", pitch);
|
||||
n->setDoubleValue("roll-deg", roll);
|
||||
n->setDoubleValue("speed-mps", speed_mps);
|
||||
n->setDoubleValue("energy-kJ", (_mass * slugs_to_kgs)
|
||||
* speed_mps * speed_mps / (2 * 1000));
|
||||
|
||||
// and inform the owner
|
||||
if (_impact_report_node)
|
||||
_impact_report_node->setStringValue(props->getPath());
|
||||
_impact_report_node->setStringValue(props->getPath());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -81,16 +81,10 @@ private:
|
|||
double _ht_agl_ft; // height above ground level
|
||||
double _load_resistance; // ground load resistanc N/m^2
|
||||
bool _solid; // if true ground is solid for FDMs
|
||||
bool _impact; // if true an impact point on the terrain is calculated
|
||||
bool _impact_data; // if true impact data have been set
|
||||
bool _report_impact; // if true an impact point on the terrain is calculated
|
||||
bool _impact_reported; // if true impact data have been set
|
||||
SGPropertyNode_ptr _impact_report_node;
|
||||
|
||||
double _impact_energy;
|
||||
double _impact_speed;
|
||||
double _impact_lat;
|
||||
double _impact_lon;
|
||||
double _impact_elev;
|
||||
|
||||
string _mat_name;
|
||||
string _name;
|
||||
|
||||
|
|
Loading…
Reference in a new issue