diff --git a/src/AIModel/AIAircraft.cxx b/src/AIModel/AIAircraft.cxx index e7258d60e..6559bbcbd 100644 --- a/src/AIModel/AIAircraft.cxx +++ b/src/AIModel/AIAircraft.cxx @@ -113,6 +113,9 @@ void FGAIAircraft::bind() { props->tie("controls/gear/gear-down", SGRawValueMethods<FGAIAircraft,bool>(*this, &FGAIAircraft::_getGearDown)); + props->tie("transponder-id", + SGRawValueMethods<FGAIAircraft,const char*>(*this, + &FGAIAircraft::_getTransponderCode)); } @@ -120,6 +123,7 @@ void FGAIAircraft::unbind() { FGAIBase::unbind(); props->untie("controls/gear/gear-down"); + props->untie("transponder-id"); } @@ -343,6 +347,11 @@ bool FGAIAircraft::_getGearDown() const { } +const char * FGAIAircraft::_getTransponderCode() const { + return transponderCode.c_str(); +} + + bool FGAIAircraft::loadNextLeg() { int leg; diff --git a/src/AIModel/AIAircraft.hxx b/src/AIModel/AIAircraft.hxx index fd4fd2ad0..49639799a 100644 --- a/src/AIModel/AIAircraft.hxx +++ b/src/AIModel/AIAircraft.hxx @@ -75,6 +75,9 @@ public: virtual const char* getTypeString(void) const { return "aircraft"; } + string GetTransponderCode() { return transponderCode; }; + void SetTransponderCode(string tc) { transponderCode = tc;}; + // included as performance data needs them, who else? inline PerformanceData* getPerformance() { return _performance; }; inline bool onGround() const { return no_roll; }; @@ -133,6 +136,7 @@ private: string acType; string company; + string transponderCode; int spinCounter; double prevSpeed; @@ -142,6 +146,8 @@ private: bool _getGearDown() const; + const char * _getTransponderCode() const; + bool reachedWaypoint; time_t timeElapsed; diff --git a/src/ATC/trafficcontrol.cxx b/src/ATC/trafficcontrol.cxx index c8657ba1d..0d08fb52a 100644 --- a/src/ATC/trafficcontrol.cxx +++ b/src/ATC/trafficcontrol.cxx @@ -385,7 +385,9 @@ void FGATCController::transmit(FGTrafficRecord *rec, AtcMsgId msgId, AtcMsgDir m string fltType; string rwyClass; string SID; + string transponderCode; FGAIFlightPlan *fp; + string fltRules; switch (msgId) { case MSG_ANNOUNCE_ENGINE_START: text = sender + ". Ready to Start up"; @@ -416,8 +418,11 @@ void FGATCController::transmit(FGTrafficRecord *rec, AtcMsgId msgId, AtcMsgDir m SID = "fly runway heading "; } //snprintf(buffer, 7, "%3.2f", heading); + fltRules = rec->getAircraft()->getTrafficRef()->getFlightRules(); + transponderCode = genTransponderCode(fltRules); + rec->getAircraft()->SetTransponderCode(transponderCode); text = receiver + ". Start-up approved. " + atisInformation + " correct, runway " + activeRunway - + ", " + SID + ", squawk BBBB. " + + + ", " + SID + ", squawk " + transponderCode + ". " + "For push-back and taxi clearance call " + taxiFreqStr + ". " + sender + " control."; break; case MSG_DENY_ENGINE_START: @@ -432,8 +437,9 @@ void FGATCController::transmit(FGTrafficRecord *rec, AtcMsgId msgId, AtcMsgDir m } taxiFreqStr = formatATCFrequency3_2(taxiFreq); activeRunway = rec->getAircraft()->GetFlightPlan()->getRunway(); + transponderCode = rec->getAircraft()->GetTransponderCode(); text = receiver + ". Start-up approved. " + atisInformation + " correct, runway " + - activeRunway + ", " + SID + ", squawk BBBB. " + + activeRunway + ", " + SID + ", squawk " + transponderCode + ". " + "For push-back and taxi clearance call " + taxiFreqStr + ". " + sender; break; default: @@ -461,6 +467,16 @@ string FGATCController::formatATCFrequency3_2(int freq) { return string(buffer); } +string FGATCController::genTransponderCode(string fltRules) { + if (fltRules == "VFR") { + return string("1200"); + } else { + char buffer[5]; + snprintf(buffer, 5, "%d%d%d%d", rand() % 8, rand() % 8,rand() % 8, rand() % 8); + return string(buffer); + } +} + /*************************************************************************** * class FGTowerController * diff --git a/src/ATC/trafficcontrol.hxx b/src/ATC/trafficcontrol.hxx index 850a0f930..7ca8e88bf 100644 --- a/src/ATC/trafficcontrol.hxx +++ b/src/ATC/trafficcontrol.hxx @@ -207,6 +207,7 @@ private: string formatATCFrequency3_2(int ); + string genTransponderCode(string fltRules); public: typedef enum {