Further progress towards AI/ATC dialog
This commit is contained in:
parent
939b9b65f3
commit
c89ea44131
4 changed files with 39 additions and 7 deletions
|
@ -52,7 +52,7 @@ FGAIPlane::~FGAIPlane() {
|
||||||
void FGAIPlane::Update(double dt) {
|
void FGAIPlane::Update(double dt) {
|
||||||
if(_pending) {
|
if(_pending) {
|
||||||
if(tuned_station) {
|
if(tuned_station) {
|
||||||
if(tuned_station->FreqClear()) {
|
if(tuned_station->GetFreqClear()) {
|
||||||
_pending = false;
|
_pending = false;
|
||||||
_transmit = true;
|
_transmit = true;
|
||||||
_transmitting = false;
|
_transmitting = false;
|
||||||
|
|
|
@ -36,7 +36,25 @@ FGATC::FGATC() {
|
||||||
FGATC::~FGATC() {
|
FGATC::~FGATC() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Derived classes wishing to use the response counter should call this from their own Update(...).
|
||||||
void FGATC::Update(double dt) {
|
void FGATC::Update(double dt) {
|
||||||
|
if(responseReqd) {
|
||||||
|
if(responseCounter >= responseTime) {
|
||||||
|
responseReqd = false;
|
||||||
|
respond = true;
|
||||||
|
} else {
|
||||||
|
responseCounter += dt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FGATC::SetResponseReqd(string rid) {
|
||||||
|
responseReqd = true;
|
||||||
|
respond = false; // TODO - this ignores the fact that more than one plane could call this before response
|
||||||
|
// Shouldn't happen with AI only, but user could confuse things??
|
||||||
|
responseID = rid;
|
||||||
|
responseCounter = 0.0;
|
||||||
|
responseTime = 2.5; // TODO - randomize this slightly.
|
||||||
}
|
}
|
||||||
|
|
||||||
void FGATC::AddPlane(string pid) {
|
void FGATC::AddPlane(string pid) {
|
||||||
|
|
|
@ -99,13 +99,15 @@ ostream& operator << (ostream& os, atc_type atc);
|
||||||
|
|
||||||
class FGATC {
|
class FGATC {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
FGATC();
|
FGATC();
|
||||||
virtual ~FGATC();
|
virtual ~FGATC();
|
||||||
|
|
||||||
// Run the internal calculations
|
// Run the internal calculations
|
||||||
virtual void Update(double dt);
|
// Derived classes should call this method from their own Update methods if they
|
||||||
|
// wish to use the response timer functionality.
|
||||||
|
void Update(double dt);
|
||||||
|
|
||||||
// Add plane to a stack
|
// Add plane to a stack
|
||||||
virtual void AddPlane(string pid);
|
virtual void AddPlane(string pid);
|
||||||
|
@ -120,10 +122,12 @@ class FGATC {
|
||||||
virtual void SetNoDisplay();
|
virtual void SetNoDisplay();
|
||||||
|
|
||||||
// Returns true if OK to transmit on this frequency
|
// Returns true if OK to transmit on this frequency
|
||||||
inline bool FreqClear() { return freqClear; }
|
inline bool GetFreqClear() { return freqClear; }
|
||||||
// Indicate that the frequency is in use
|
// Indicate that the frequency is in use
|
||||||
inline void FreqInUse() { freqClear = false; }
|
inline void SetFreqInUse() { freqClear = false; }
|
||||||
// Under development!!
|
// Transmission to the ATC is finished and a response is required
|
||||||
|
void SetResponseReqd(string rid);
|
||||||
|
// The above 3 funcs under development!!
|
||||||
// The idea is that AI traffic or the user ATC dialog box calls FreqInUse() when they begin transmitting,
|
// The idea is that AI traffic or the user ATC dialog box calls FreqInUse() when they begin transmitting,
|
||||||
// and that the tower control sets freqClear back to true following a reply.
|
// and that the tower control sets freqClear back to true following a reply.
|
||||||
// AI traffic should check FreqClear() is true prior to transmitting.
|
// AI traffic should check FreqClear() is true prior to transmitting.
|
||||||
|
@ -156,7 +160,7 @@ class FGATC {
|
||||||
inline const char* get_name() {return name.c_str();}
|
inline const char* get_name() {return name.c_str();}
|
||||||
inline void set_name(const string nm) {name = nm;}
|
inline void set_name(const string nm) {name = nm;}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// Render a transmission
|
// Render a transmission
|
||||||
// Outputs the transmission either on screen or as audio depending on user preference
|
// Outputs the transmission either on screen or as audio depending on user preference
|
||||||
|
@ -182,6 +186,13 @@ class FGATC {
|
||||||
FGATCVoice* vPtr;
|
FGATCVoice* vPtr;
|
||||||
|
|
||||||
bool freqClear; // Flag to indicate if the frequency is clear of ongoing dialog
|
bool freqClear; // Flag to indicate if the frequency is clear of ongoing dialog
|
||||||
|
bool responseReqd; // Flag to indicate we should be responding to a request/report
|
||||||
|
double responseTime; // Time to take from end of request transmission to beginning of response
|
||||||
|
// The idea is that this will be slightly random.
|
||||||
|
double responseCounter; // counter to implement the above
|
||||||
|
string responseID; // ID of the plane to respond to
|
||||||
|
bool respond; // Flag to indicate now is the time to respond - ie set following the count down of the response timer.
|
||||||
|
// Derived classes only need monitor this flag, and use the response ID, as long as they call FGATC::Update(...)
|
||||||
};
|
};
|
||||||
|
|
||||||
inline istream&
|
inline istream&
|
||||||
|
|
|
@ -736,6 +736,9 @@ void FGTower::Update(double dt) {
|
||||||
if(update_count >= update_count_max) {
|
if(update_count >= update_count_max) {
|
||||||
update_count = 0;
|
update_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call the base class update for the response time handling.
|
||||||
|
FGATC::Update(dt);
|
||||||
|
|
||||||
if(ident == "KEMT") {
|
if(ident == "KEMT") {
|
||||||
// For AI debugging convienience - may be removed
|
// For AI debugging convienience - may be removed
|
||||||
|
|
Loading…
Add table
Reference in a new issue