Reference<SceneObject*> PlanetManagerImplementation::findObjectTooCloseToDecoration(float x, float y, float margin) { SortedVector<ManagedReference<QuadTreeEntry* > > closeObjects; Vector3 targetPos(x, y,0); zone->getInRangeObjects(x, y, 256, &closeObjects, true); for (int i = 0; i < closeObjects.size(); ++i) { ManagedReference<SceneObject*> obj = cast<SceneObject*>(closeObjects.get(i).get()); if(obj == NULL || obj->isCreatureObject() || obj->getObjectTemplate() == NULL) continue; Vector3 objVec(obj->getPositionX(), obj->getPositionY(),0); int squaredDistance = (obj->getObjectTemplate()->getNoBuildRadius() + margin) * (obj->getObjectTemplate()->getNoBuildRadius() + margin); if(objVec.squaredDistanceTo(targetPos) < squaredDistance){ return obj; } if(obj->isStructureObject() && StructureManager::instance()->isInStructureFootprint(cast<StructureObject*>(obj.get()), x, y, margin) ){ return obj; } } return NULL; }
// Ce code est implémenté à partir de DEME:Dtlz1.cpp void DTLZ7Eval::operator() (DTLZ & _element) { if (_element.invalidObjectiveVector()) { int nbFun= DTLZ::ObjectiveVector::nObjectives(); int nbVar= _element.size(); int k; double f, g, h; DTLZObjectiveVector objVec(nbVar); k = nbVar - nbFun + 1; g = 0.0; h = 0.0; for (unsigned i = nbVar - k + 1; i <= nbVar; i++) g += _element[i-1]; g= 1 + (9 * g ) / k; for (unsigned i = 1; i <= nbFun -1 ; i++) objVec[i-1]=_element[i-1]; for (unsigned i = 1 ; i< nbFun; i++) h += _element[i-1] / (1 + g) * (1 + sin(3 * M_PI * _element[i-1])); h = nbFun - h; objVec[nbFun -1] = (1 + g) * h; _element.objectiveVector(objVec); } }