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;

}
示例#2
0
// 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);
    }
}