1
0
Fork 0

Mathias Frhlich:

Fix the AI-Radar code.
This commit is contained in:
ehofman 2006-03-04 12:49:30 +00:00
parent b9752635a9
commit 479d4d7484
4 changed files with 15 additions and 10 deletions

View file

@ -76,7 +76,7 @@ FGAIBase::~FGAIBase() {
if (props) {
SGPropertyNode* parent = props->getParent();
if (parent)
parent->removeChild(props->getName(), props->getIndex());
parent->removeChild(props->getName(), props->getIndex(), false);
}
delete fp;
fp = 0;
@ -121,12 +121,6 @@ void FGAIBase::Transform() {
bool FGAIBase::init() {
SGPropertyNode *root = globals->get_props()->getNode("ai/models", true);
unsigned index = root->getChildren(getTypeString()).size();
props = root->getNode(getTypeString(), index, true);
if (!model_path.empty()) {
try {
model = load3DModel( globals->get_fg_root(), model_path, props,

View file

@ -57,7 +57,7 @@ public:
virtual void bind();
virtual void unbind();
void setManager(FGAIManager* mgr);
void setManager(FGAIManager* mgr, SGPropertyNode* p);
void setPath( const char* model );
void setSpeed( double speed_KTAS );
void setAltitude( double altitude_ft );
@ -182,8 +182,9 @@ public:
static bool _isNight();
};
inline void FGAIBase::setManager(FGAIManager* mgr) {
inline void FGAIBase::setManager(FGAIManager* mgr, SGPropertyNode* p) {
manager = mgr;
props = p;
}
inline void FGAIBase::setPath(const char* model ) {

View file

@ -36,6 +36,8 @@
FGAIManager::FGAIManager() {
_dt = 0.0;
mNumAiModels = 0;
for (unsigned i = 0; i < FGAIBase::MAX_OBJECTS; ++i)
mNumAiTypeModels[i] = 0;
}
FGAIManager::~FGAIManager() {
@ -112,6 +114,7 @@ void FGAIManager::update(double dt) {
if ((*ai_list_itr)->getDie()) {
tmgr->release((*ai_list_itr)->getID());
--mNumAiModels;
--(mNumAiTypeModels[(*ai_list_itr)->getType()]);
(*ai_list_itr)->unbind();
ai_list_itr = ai_list.erase(ai_list_itr);
} else {
@ -131,9 +134,14 @@ void FGAIManager::update(double dt) {
void
FGAIManager::attach(SGSharedPtr<FGAIBase> model)
{
model->setManager(this);
unsigned idx = mNumAiTypeModels[model->getType()];
const char* typeString = model->getTypeString();
SGPropertyNode* root = globals->get_props()->getNode("ai/models", true);
SGPropertyNode* p = root->getNode(typeString, idx, true);
model->setManager(this, p);
ai_list.push_back(model);
++mNumAiModels;
++(mNumAiTypeModels[model->getType()]);
model->init();
model->bind();
}
@ -144,6 +152,7 @@ void FGAIManager::destroyObject( int ID ) {
while(ai_list_itr != ai_list.end()) {
if ((*ai_list_itr)->getID() == ID) {
--mNumAiModels;
--(mNumAiTypeModels[(*ai_list_itr)->getType()]);
(*ai_list_itr)->unbind();
ai_list_itr = ai_list.erase(ai_list_itr);
} else

View file

@ -110,6 +110,7 @@ public:
private:
bool enabled;
int mNumAiTypeModels[FGAIBase::MAX_OBJECTS];
int mNumAiModels;
SGPropertyNode* root;