1
0
Fork 0

Minor code fixes

This commit is contained in:
Lars Toenning 2020-03-04 12:42:37 +01:00 committed by James Turner
parent aca625eda2
commit e2135369ce
8 changed files with 69 additions and 65 deletions

View file

@ -42,7 +42,7 @@
#include <Scripting/NasalSys.hxx> #include <Scripting/NasalSys.hxx>
#include <Sound/fg_fx.hxx> #include <Sound/fg_fx.hxx>
FGSwiftAircraft::FGSwiftAircraft(const std::string& callsign, const std::string& modelpath, SGPropertyNode* p) FGSwiftAircraft::FGSwiftAircraft(const std::string& callsign, const std::string& modelpath, SGPropertyNode_ptr p)
{ {
using namespace simgear; using namespace simgear;
_model = SGModelLib::loadModel(modelpath); _model = SGModelLib::loadModel(modelpath);
@ -57,7 +57,6 @@ FGSwiftAircraft::FGSwiftAircraft(const std::string& callsign, const std::string&
props->setStringValue("callsign", callsign); props->setStringValue("callsign", callsign);
props->setBoolValue("valid",true); props->setBoolValue("valid",true);
} }
initPos = false;
} }
bool FGSwiftAircraft::updatePosition(SGGeod newPosition, SGVec3d orientation, double groundspeed, bool initPos) bool FGSwiftAircraft::updatePosition(SGGeod newPosition, SGVec3d orientation, double groundspeed, bool initPos)
@ -120,15 +119,15 @@ inline bool FGSwiftAircraft::operator<(const std::string& extCallsign)
return _model->getName().compare(extCallsign); return _model->getName().compare(extCallsign);
} }
double FGSwiftAircraft::getGroundElevation(double latitudeDeg, double longitudeDeg) const double FGSwiftAircraft::getGroundElevation(const SGGeod& pos) const
{ {
if(!initPos) { return std::numeric_limits<double>::quiet_NaN(); } if(!initPos) { return std::numeric_limits<double>::quiet_NaN(); }
double alt = 0; double alt = 0;
SGGeod pos; SGGeod posReq;
pos.setElevationFt(30000); posReq.setElevationFt(30000);
pos.setLatitudeDeg(latitudeDeg); posReq.setLatitudeDeg(pos.getLatitudeDeg());
pos.setLongitudeDeg(longitudeDeg); posReq.setLongitudeDeg(pos.getLongitudeDeg());
globals->get_scenery()->get_elevation_m(pos,alt,0,_model.get()); globals->get_scenery()->get_elevation_m(posReq,alt,0,_model.get());
return alt; return alt;
} }

View file

@ -41,19 +41,19 @@ class PagedLOD;
class FGSwiftAircraft class FGSwiftAircraft
{ {
public: public:
FGSwiftAircraft(const std::string& callsign, const std::string& modelpath, SGPropertyNode* p); FGSwiftAircraft(const std::string& callsign, const std::string& modelpath, SGPropertyNode_ptr p);
bool updatePosition(SGGeod newPosition, SGVec3d orientation, double groundspeed, bool initPos); bool updatePosition(SGGeod newPosition, SGVec3d orientation, double groundspeed, bool initPos);
~FGSwiftAircraft(); ~FGSwiftAircraft();
std::string getName() { return _model->getName(); }; std::string getName() { return _model->getName(); };
double getLatDeg() const; double getLatDeg() const;
double getLongDeg() const; double getLongDeg() const;
double getGroundElevation(double, double) const; double getGroundElevation(const SGGeod& pos) const;
double getFudgeFactor() const; double getFudgeFactor() const;
private: private:
bool initPos; bool initPos = false;
SGGeod position; SGGeod position;
SGPropertyNode* props; SGPropertyNode_ptr props;
osg::ref_ptr<osg::Node> _model; osg::ref_ptr<osg::Node> _model;
SGModelPlacement aip; SGModelPlacement aip;
inline bool operator<(const std::string& extCallsign); inline bool operator<(const std::string& extCallsign);

View file

@ -34,8 +34,8 @@ bool FGSwiftAircraftManager::addPlane(const std::string& callsign, std::string m
return false; return false;
const char* typeString = "swift"; const char* typeString = "swift";
SGPropertyNode* root = globals->get_props()->getNode("ai/models",true); SGPropertyNode_ptr root = globals->get_props()->getNode("ai/models",true);
SGPropertyNode* p; SGPropertyNode_ptr p;
int i; int i;
for(i = 0; i < 10000; i++){ for(i = 0; i < 10000; i++){
p = root->getNode(typeString,i,false); p = root->getNode(typeString,i,false);
@ -45,7 +45,7 @@ bool FGSwiftAircraftManager::addPlane(const std::string& callsign, std::string m
} }
p = root->getNode(typeString,i,true); p = root->getNode(typeString,i,true);
p->setIntValue("id",i); p->setIntValue("id",i);
auto* curAircraft = new FGSwiftAircraft(callsign, std::move(modelString), p); auto curAircraft = new FGSwiftAircraft(callsign, std::move(modelString), p);
aircraftByCallsign.insert(std::pair<std::string, FGSwiftAircraft*>(callsign, curAircraft)); aircraftByCallsign.insert(std::pair<std::string, FGSwiftAircraft*>(callsign, curAircraft));
return true; return true;
} }
@ -79,9 +79,13 @@ void FGSwiftAircraftManager::getRemoteAircraftData(std::vector<std::string>& cal
const FGSwiftAircraft *aircraft = it->second; const FGSwiftAircraft *aircraft = it->second;
assert(aircraft); assert(aircraft);
const double latDeg = aircraft->getLatDeg();
const double lonDeg = aircraft->getLongDeg(); SGGeod pos;
double groundElevation = aircraft->getGroundElevation(latDeg, lonDeg); pos.setLatitudeDeg(aircraft->getLatDeg());
pos.setLongitudeDeg(aircraft->getLongDeg());
const double latDeg = pos.getLatitudeDeg();
const double lonDeg = pos.getLongitudeDeg();
double groundElevation = aircraft->getGroundElevation(pos);
double fudgeFactor = aircraft->getFudgeFactor(); double fudgeFactor = aircraft->getFudgeFactor();
(void)fudgeFactor; (void)fudgeFactor;
@ -110,12 +114,11 @@ void FGSwiftAircraftManager::removeAllPlanes()
} }
} }
double FGSwiftAircraftManager::getElevationAtPosition(const std::string &callsign, double latitudeDeg, double FGSwiftAircraftManager::getElevationAtPosition(const std::string &callsign, const SGGeod& pos) const
double longitudeDeg, double altitudeMeters) const
{ {
auto it = aircraftByCallsign.find(callsign); auto it = aircraftByCallsign.find(callsign);
if(it != aircraftByCallsign.end()){ if(it != aircraftByCallsign.end()){
return it->second->getGroundElevation(latitudeDeg, longitudeDeg); return it->second->getGroundElevation(pos);
} }
return std::numeric_limits<double>::quiet_NaN(); return std::numeric_limits<double>::quiet_NaN();
} }

View file

@ -36,6 +36,6 @@ public:
std::vector<double>& elevationsM, std::vector<double>& verticalOffsets) const; std::vector<double>& elevationsM, std::vector<double>& verticalOffsets) const;
void removePlane(const std::string& callsign); void removePlane(const std::string& callsign);
void removeAllPlanes(); void removeAllPlanes();
double getElevationAtPosition(const std::string &callsign, double latitudeDeg, double longitudeDeg, double altitudeMeters) const; double getElevationAtPosition(const std::string &callsign, const SGGeod& pos) const;
}; };
#endif #endif

View file

@ -82,7 +82,7 @@ void CPlugin::startServer()
float CPlugin::startServerDeferred(float, float, int, void* refcon) float CPlugin::startServerDeferred(float, float, int, void* refcon)
{ {
auto* plugin = static_cast<CPlugin*>(refcon); auto plugin = static_cast<CPlugin*>(refcon);
if (!plugin->m_isRunning) { if (!plugin->m_isRunning) {
plugin->startServer(); plugin->startServer();
plugin->m_isRunning = true; plugin->m_isRunning = true;

View file

@ -203,42 +203,42 @@ protected:
DBusHandlerResult dbusMessageHandler(const CDBusMessage& message) override; DBusHandlerResult dbusMessageHandler(const CDBusMessage& message) override;
private: private:
SGPropertyNode* textMessageNode; SGPropertyNode_ptr textMessageNode;
SGPropertyNode* aircraftModelPathNode; SGPropertyNode_ptr aircraftModelPathNode;
//SGPropertyNode* aircraftLiveryNode; //SGPropertyNode_ptr aircraftLiveryNode;
//SGPropertyNode* aircraftIcaoCodeNode; //SGPropertyNode_ptr aircraftIcaoCodeNode;
SGPropertyNode* aircraftDescriptionNode; SGPropertyNode_ptr aircraftDescriptionNode;
SGPropertyNode* isPausedNode; SGPropertyNode_ptr isPausedNode;
SGPropertyNode* latitudeNode; SGPropertyNode_ptr latitudeNode;
SGPropertyNode* longitudeNode; SGPropertyNode_ptr longitudeNode;
SGPropertyNode* altitudeMSLNode; SGPropertyNode_ptr altitudeMSLNode;
SGPropertyNode* heightAGLNode; SGPropertyNode_ptr heightAGLNode;
SGPropertyNode* groundSpeedNode; SGPropertyNode_ptr groundSpeedNode;
SGPropertyNode* pitchNode; SGPropertyNode_ptr pitchNode;
SGPropertyNode* rollNode; SGPropertyNode_ptr rollNode;
SGPropertyNode* trueHeadingNode; SGPropertyNode_ptr trueHeadingNode;
SGPropertyNode* wheelsOnGroundNode; SGPropertyNode_ptr wheelsOnGroundNode;
SGPropertyNode* com1ActiveNode; SGPropertyNode_ptr com1ActiveNode;
SGPropertyNode* com1StandbyNode; SGPropertyNode_ptr com1StandbyNode;
SGPropertyNode* com2ActiveNode; SGPropertyNode_ptr com2ActiveNode;
SGPropertyNode* com2StandbyNode; SGPropertyNode_ptr com2StandbyNode;
SGPropertyNode* transponderCodeNode; SGPropertyNode_ptr transponderCodeNode;
SGPropertyNode* transponderModeNode; SGPropertyNode_ptr transponderModeNode;
SGPropertyNode* transponderIdentNode; SGPropertyNode_ptr transponderIdentNode;
SGPropertyNode* beaconLightsNode; SGPropertyNode_ptr beaconLightsNode;
SGPropertyNode* landingLightsNode; SGPropertyNode_ptr landingLightsNode;
SGPropertyNode* navLightsNode; SGPropertyNode_ptr navLightsNode;
SGPropertyNode* strobeLightsNode; SGPropertyNode_ptr strobeLightsNode;
SGPropertyNode* taxiLightsNode; SGPropertyNode_ptr taxiLightsNode;
SGPropertyNode* altimeterServiceableNode; SGPropertyNode_ptr altimeterServiceableNode;
SGPropertyNode* pressAltitudeFtNode; SGPropertyNode_ptr pressAltitudeFtNode;
SGPropertyNode* flapsDeployRatioNode; SGPropertyNode_ptr flapsDeployRatioNode;
SGPropertyNode* gearDeployRatioNode; SGPropertyNode_ptr gearDeployRatioNode;
SGPropertyNode* speedBrakeDeployRatioNode; SGPropertyNode_ptr speedBrakeDeployRatioNode;
SGPropertyNode* groundElevation; SGPropertyNode_ptr groundElevation;
//SGPropertyNode* numberEnginesNode; //SGPropertyNode_ptr numberEnginesNode;
//SGPropertyNode* engineN1PercentageNode; //SGPropertyNode_ptr engineN1PercentageNode;
SGPropertyNode* aircraftNameNode; SGPropertyNode_ptr aircraftNameNode;
}; };
} // namespace FGSwiftBus } // namespace FGSwiftBus

View file

@ -38,15 +38,13 @@ namespace FGSwiftBus {
CTraffic::CTraffic() CTraffic::CTraffic()
{ {
acm = new FGSwiftAircraftManager(); acm.reset(new FGSwiftAircraftManager());
SG_LOG(SG_NETWORK, SG_INFO, "FGSwiftBus Traffic started"); SG_LOG(SG_NETWORK, SG_INFO, "FGSwiftBus Traffic started");
} }
CTraffic::~CTraffic() CTraffic::~CTraffic()
{ {
cleanup(); cleanup();
delete acm;
acm = nullptr;
SG_LOG(SG_NETWORK, SG_INFO, "FGSwiftBus Traffic stopped"); SG_LOG(SG_NETWORK, SG_INFO, "FGSwiftBus Traffic stopped");
} }
@ -64,7 +62,7 @@ const std::string& CTraffic::ObjectPath()
void CTraffic::planeLoaded(void* id, bool succeeded, void* self) void CTraffic::planeLoaded(void* id, bool succeeded, void* self)
{ {
auto* traffic = static_cast<CTraffic*>(self); auto traffic = static_cast<CTraffic*>(self);
auto planeIt = traffic->m_planesById.find(id); auto planeIt = traffic->m_planesById.find(id);
if (planeIt == traffic->m_planesById.end()) { return; } if (planeIt == traffic->m_planesById.end()) { return; }
@ -255,7 +253,11 @@ DBusHandlerResult CTraffic::dbusMessageHandler(const CDBusMessage& message_)
message.getArgument(altitudeMeters); message.getArgument(altitudeMeters);
queueDBusCall([ = ]() queueDBusCall([ = ]()
{ {
double elevation = acm->getElevationAtPosition(callsign, latitudeDeg, longitudeDeg, altitudeMeters); SGGeod pos;
pos.setLatitudeDeg(latitudeDeg);
pos.setLongitudeDeg(longitudeDeg);
pos.setElevationM(altitudeMeters);
double elevation = acm->getElevationAtPosition(callsign, pos);
CDBusMessage reply = CDBusMessage::createReply(sender, serial); CDBusMessage reply = CDBusMessage::createReply(sender, serial);
reply.beginArgumentWrite(); reply.beginArgumentWrite();
reply.appendArgument(callsign); reply.appendArgument(callsign);

View file

@ -99,7 +99,7 @@ private:
bool m_emitSimFrame = true; bool m_emitSimFrame = true;
FGSwiftAircraftManager* acm; std::unique_ptr<FGSwiftAircraftManager> acm;
static void planeLoaded(void* id, bool succeeded, void* self); static void planeLoaded(void* id, bool succeeded, void* self);
}; };