Allow local acft to override packaged acft
When an explicit aircraft-dir is set, check this location before checking installed packages. This allows setting —aircraft and -aircraft-dir to correctly take precedence over a package.
This commit is contained in:
parent
ec7816a565
commit
40d5d918ba
1 changed files with 27 additions and 3 deletions
|
@ -193,6 +193,24 @@ public:
|
||||||
_cache = autoSave->getNode("sim/startup/path-cache", true);
|
_cache = autoSave->getNode("sim/startup/path-cache", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief haveExplicitAircraft - check if the combination of /sim/aircraft
|
||||||
|
* and /sim/aircraft-dir defines an explicit -set.xml. We need to detect
|
||||||
|
* this case to short-circuit package detection
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool haveExplicitAircraft() const
|
||||||
|
{
|
||||||
|
const std::string aircraftDir = fgGetString("/sim/aircraft-dir", "");
|
||||||
|
if (aircraftDir.empty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string aircraft = fgGetString( "/sim/aircraft", "");
|
||||||
|
SGPath setFile = SGPath::fromUtf8(aircraftDir) / (aircraft + "-set.xml");
|
||||||
|
return setFile.exists();
|
||||||
|
}
|
||||||
|
|
||||||
bool loadAircraft()
|
bool loadAircraft()
|
||||||
{
|
{
|
||||||
std::string aircraft = fgGetString( "/sim/aircraft", "");
|
std::string aircraft = fgGetString( "/sim/aircraft", "");
|
||||||
|
@ -624,11 +642,18 @@ int fgInitAircraft(bool reinit)
|
||||||
flightgear::Options::sharedInstance()->initAircraft();
|
flightgear::Options::sharedInstance()->initAircraft();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FindAndCacheAircraft f(globals->get_props());
|
||||||
|
const bool haveExplicit = f.haveExplicitAircraft();
|
||||||
|
|
||||||
SGSharedPtr<Root> pkgRoot(globals->packageRoot());
|
SGSharedPtr<Root> pkgRoot(globals->packageRoot());
|
||||||
SGPropertyNode* aircraftProp = fgGetNode("/sim/aircraft", true);
|
SGPropertyNode* aircraftProp = fgGetNode("/sim/aircraft", true);
|
||||||
|
|
||||||
string aircraftId(aircraftProp->getStringValue());
|
string aircraftId(aircraftProp->getStringValue());
|
||||||
PackageRef acftPackage = pkgRoot->getPackageById(aircraftId);
|
|
||||||
|
PackageRef acftPackage;
|
||||||
|
if (!haveExplicit) {
|
||||||
|
acftPackage = pkgRoot->getPackageById(aircraftId);
|
||||||
|
}
|
||||||
|
|
||||||
if (acftPackage) {
|
if (acftPackage) {
|
||||||
if (acftPackage->isInstalled()) {
|
if (acftPackage->isInstalled()) {
|
||||||
SG_LOG(SG_GENERAL, SG_INFO, "Loading aircraft from package:" << acftPackage->qualifiedId());
|
SG_LOG(SG_GENERAL, SG_INFO, "Loading aircraft from package:" << acftPackage->qualifiedId());
|
||||||
|
@ -667,7 +692,6 @@ int fgInitAircraft(bool reinit)
|
||||||
|
|
||||||
initAircraftDirsNasalSecurity();
|
initAircraftDirsNasalSecurity();
|
||||||
|
|
||||||
FindAndCacheAircraft f(globals->get_props());
|
|
||||||
if (!f.loadAircraft()) {
|
if (!f.loadAircraft()) {
|
||||||
return flightgear::FG_OPTIONS_ERROR;
|
return flightgear::FG_OPTIONS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue