if (props) {
SGPropertyNode* parent = props->getParent();
- if (parent) {
+ if (parent)
model_removed->setStringValue(props->getPath());
- parent->removeChild(props->getName(), props->getIndex(), false);
- }
-
- // so that radar does not have to do extra checks
- props->setBoolValue("radar/in-range", false);
- props->removeChild("id", 0);
-
}
delete fp;
fp = 0;
return serviceable;
}
+SGPropertyNode* FGAIBase::_getProps() const {
+ return props;
+}
+
void FGAIBase::_setAltitude( double _alt ) {
setAltitude( _alt );
}
tmgr->release((*ai_list_itr)->getID());
--mNumAiModels;
--(mNumAiTypeModels[(*ai_list_itr)->getType()]);
- (*ai_list_itr)->unbind();
+ FGAIBase *base = *ai_list_itr;
+ SGPropertyNode *props = base->_getProps();
+
+ props->setBoolValue("valid", false);
+ base->unbind();
+
+ // for backward compatibility reset properties, so that aircraft,
+ // which don't know the <valid> property, keep working
+ // TODO: remove after a while
+ props->setIntValue("id", -1);
+ props->setBoolValue("radar/in-range", false);
+ props->setIntValue("refuel/tanker", false);
+
ai_list_itr = ai_list.erase(ai_list_itr);
} else {
fetchUserState();
//more than 10000 mp-aircrafts in the property tree we should optimize the mp-server
{
p = root->getNode(typeString, i, false);
- if (!p) break;
- if (p->getIntValue("id",-1)==model->getID())
- {
+ if (!p || !p->getBoolValue("valid", false))
+ break;
+ if (p->getIntValue("id",-1)==model->getID()) {
p->setStringValue("callsign","***invalid node***"); //debug only, should never set!
-
}
}
p = root->getNode(typeString, i, true);
|| model->getType()==FGAIBase::otMultiplayer
|| model->getType()==FGAIBase::otStatic);
model->bind();
+ p->setBoolValue("valid", true);
}