David Culp: Here are small changes that allow one to set a life-span for submodels.
This commit is contained in:
parent
cfc05f5f0d
commit
af284e4bb9
10 changed files with 22 additions and 4 deletions
|
@ -32,6 +32,7 @@ FGAIBallistic::FGAIBallistic(FGAIManager* mgr) {
|
||||||
_type_str = "ballistic";
|
_type_str = "ballistic";
|
||||||
_otype = otBallistic;
|
_otype = otBallistic;
|
||||||
drag_area = 0.007;
|
drag_area = 0.007;
|
||||||
|
life_timer = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FGAIBallistic::~FGAIBallistic() {
|
FGAIBallistic::~FGAIBallistic() {
|
||||||
|
@ -79,8 +80,15 @@ void FGAIBallistic::setDragArea(double a) {
|
||||||
drag_area = a;
|
drag_area = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FGAIBallistic::setLife(double seconds) {
|
||||||
|
life = seconds;
|
||||||
|
}
|
||||||
|
|
||||||
void FGAIBallistic::Run(double dt) {
|
void FGAIBallistic::Run(double dt) {
|
||||||
|
|
||||||
|
life_timer += dt;
|
||||||
|
if (life_timer > life) setDie(true);
|
||||||
|
|
||||||
double speed_north_deg_sec;
|
double speed_north_deg_sec;
|
||||||
double speed_east_deg_sec;
|
double speed_east_deg_sec;
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ public:
|
||||||
void setElevation( double el );
|
void setElevation( double el );
|
||||||
void setStabilization( bool val );
|
void setStabilization( bool val );
|
||||||
void setDragArea( double a );
|
void setDragArea( double a );
|
||||||
|
void setLife( double seconds );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -48,6 +49,7 @@ private:
|
||||||
double hs; // horizontal speed (fps)
|
double hs; // horizontal speed (fps)
|
||||||
bool aero_stabilized; // if true, object will point where it's going
|
bool aero_stabilized; // if true, object will point where it's going
|
||||||
double drag_area; // equivalent drag area in ft2
|
double drag_area; // equivalent drag area in ft2
|
||||||
|
double life_timer; // seconds
|
||||||
void Run(double dt);
|
void Run(double dt);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ FGAIBase::FGAIBase() {
|
||||||
in_range = false;
|
in_range = false;
|
||||||
invisible = true;
|
invisible = true;
|
||||||
no_roll = true;
|
no_roll = true;
|
||||||
|
life = 900;
|
||||||
model_path = "";
|
model_path = "";
|
||||||
model = 0;
|
model = 0;
|
||||||
_otype = otNull;
|
_otype = otNull;
|
||||||
|
|
|
@ -108,6 +108,7 @@ protected:
|
||||||
int id;
|
int id;
|
||||||
bool invisible;
|
bool invisible;
|
||||||
bool no_roll;
|
bool no_roll;
|
||||||
|
double life;
|
||||||
FGAIFlightPlan *fp;
|
FGAIFlightPlan *fp;
|
||||||
|
|
||||||
void Transform();
|
void Transform();
|
||||||
|
|
|
@ -253,7 +253,7 @@ int FGAIManager::createShip( string path, FGAIFlightPlan* flightplan ) {
|
||||||
|
|
||||||
int FGAIManager::createBallistic( string path, double latitude, double longitude,
|
int FGAIManager::createBallistic( string path, double latitude, double longitude,
|
||||||
double altitude, double azimuth, double elevation,
|
double altitude, double azimuth, double elevation,
|
||||||
double speed, double eda ) {
|
double speed, double eda, double life ) {
|
||||||
|
|
||||||
FGAIBallistic* ai_ballistic = new FGAIBallistic(this);
|
FGAIBallistic* ai_ballistic = new FGAIBallistic(this);
|
||||||
ai_list.push_back(ai_ballistic);
|
ai_list.push_back(ai_ballistic);
|
||||||
|
@ -267,6 +267,7 @@ int FGAIManager::createBallistic( string path, double latitude, double longitude
|
||||||
ai_ballistic->setLongitude(longitude);
|
ai_ballistic->setLongitude(longitude);
|
||||||
ai_ballistic->setLatitude(latitude);
|
ai_ballistic->setLatitude(latitude);
|
||||||
ai_ballistic->setDragArea(eda);
|
ai_ballistic->setDragArea(eda);
|
||||||
|
ai_ballistic->setLife(life);
|
||||||
ai_ballistic->init();
|
ai_ballistic->init();
|
||||||
ai_ballistic->bind();
|
ai_ballistic->bind();
|
||||||
return ai_ballistic->getID();
|
return ai_ballistic->getID();
|
||||||
|
@ -384,7 +385,7 @@ void FGAIManager::processScenario( string filename ) {
|
||||||
} else if (en->aitype == "ballistic"){
|
} else if (en->aitype == "ballistic"){
|
||||||
createBallistic( en->model_path, en->latitude, en->longitude,
|
createBallistic( en->model_path, en->latitude, en->longitude,
|
||||||
en->altitude, en->azimuth, en->elevation, en->speed,
|
en->altitude, en->azimuth, en->elevation, en->speed,
|
||||||
en->eda );
|
en->eda, en->life );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,7 +98,8 @@ public:
|
||||||
double azimuth, // in degrees (same as heading)
|
double azimuth, // in degrees (same as heading)
|
||||||
double elevation, // in degrees (same as pitch)
|
double elevation, // in degrees (same as pitch)
|
||||||
double speed, // in feet per second
|
double speed, // in feet per second
|
||||||
double eda ); // equivalent drag area, ft2
|
double eda, // equivalent drag area, ft2
|
||||||
|
double life ); // life span in seconds
|
||||||
|
|
||||||
int createStorm( string path, // path to exterior model
|
int createStorm( string path, // path to exterior model
|
||||||
double latitude, // in degrees -90 to 90
|
double latitude, // in degrees -90 to 90
|
||||||
|
|
|
@ -70,6 +70,7 @@ FGAIScenario::FGAIScenario(string filename)
|
||||||
en->strength = entry_node->getDoubleValue("strength-fps", 0.0);
|
en->strength = entry_node->getDoubleValue("strength-fps", 0.0);
|
||||||
en->diameter = entry_node->getDoubleValue("diameter-ft", 0.0);
|
en->diameter = entry_node->getDoubleValue("diameter-ft", 0.0);
|
||||||
en->eda = entry_node->getDoubleValue("eda", 0.007);
|
en->eda = entry_node->getDoubleValue("eda", 0.007);
|
||||||
|
en->life = entry_node->getDoubleValue("life", 900.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
entry_iterator = entries.begin();
|
entry_iterator = entries.begin();
|
||||||
|
|
|
@ -49,6 +49,7 @@ public:
|
||||||
double strength; // used by thermal objects
|
double strength; // used by thermal objects
|
||||||
double diameter; // used by thermal objects
|
double diameter; // used by thermal objects
|
||||||
double eda; // used by ballistic objects
|
double eda; // used by ballistic objects
|
||||||
|
double life; // life span in seconds
|
||||||
} entry;
|
} entry;
|
||||||
|
|
||||||
FGAIScenario(string filename);
|
FGAIScenario(string filename);
|
||||||
|
|
|
@ -88,7 +88,7 @@ SubmodelSystem::release (submodel* sm, double dt)
|
||||||
|
|
||||||
//cout << "Creating a submodel." << endl;
|
//cout << "Creating a submodel." << endl;
|
||||||
int rval = ai->createBallistic( sm->model, IC.lat, IC.lon, IC.alt, IC.azimuth,
|
int rval = ai->createBallistic( sm->model, IC.lat, IC.lon, IC.alt, IC.azimuth,
|
||||||
IC.elevation, IC.speed, sm->drag_area );
|
IC.elevation, IC.speed, sm->drag_area, sm->life );
|
||||||
//cout << "Submodel created." << endl;
|
//cout << "Submodel created." << endl;
|
||||||
(sm->count)--;
|
(sm->count)--;
|
||||||
|
|
||||||
|
@ -136,6 +136,7 @@ SubmodelSystem::load ()
|
||||||
sm->yaw_offset = entry_node->getDoubleValue("yaw-offset", 0.0);
|
sm->yaw_offset = entry_node->getDoubleValue("yaw-offset", 0.0);
|
||||||
sm->pitch_offset = entry_node->getDoubleValue("pitch-offset", 0.0);
|
sm->pitch_offset = entry_node->getDoubleValue("pitch-offset", 0.0);
|
||||||
sm->drag_area = entry_node->getDoubleValue("eda", 0.007);
|
sm->drag_area = entry_node->getDoubleValue("eda", 0.007);
|
||||||
|
sm->life = entry_node->getDoubleValue("life", 900.0);
|
||||||
|
|
||||||
sm->trigger->setBoolValue(false);
|
sm->trigger->setBoolValue(false);
|
||||||
sm->timer = sm->delay;
|
sm->timer = sm->delay;
|
||||||
|
|
|
@ -41,6 +41,7 @@ public:
|
||||||
double yaw_offset;
|
double yaw_offset;
|
||||||
double pitch_offset;
|
double pitch_offset;
|
||||||
double drag_area;
|
double drag_area;
|
||||||
|
double life;
|
||||||
} submodel;
|
} submodel;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
Loading…
Reference in a new issue