bool PlanetManagerImplementation::isCampingPermittedAt(float x, float y, float margin) { SortedVector<ManagedReference<ActiveArea* > > activeAreas; Vector3 targetPos(x, y, zone->getHeight(x, y)); zone->getInRangeActiveAreas(x, y, &activeAreas, true); for (int i = 0; i < activeAreas.size(); ++i) { ActiveArea* area = activeAreas.get(i); // Skip areas explicitly marked as camping allowed if (area->isCampingPermitted()) { continue; } // Honor no-build after checking for areas that camping is explicitly allowed if (area->isNoBuildArea()) { return false; } } if (isInWater(x, y)) { return false; } if (isInRangeWithPoi(x, y, 150)) return false; return true; }
bool PlanetManagerImplementation::isSpawningPermittedAt(float x, float y, float margin) { SortedVector<ActiveArea*> activeAreas; Vector3 targetPos(x, y, zone->getHeight(x, y)); if (!zone->isWithinBoundaries(targetPos)) return false; zone->getInRangeActiveAreas(x, y, &activeAreas, true); zone->getInRangeActiveAreas(x, y, margin + 64.f, &activeAreas, true); for (int i = 0; i < activeAreas.size(); ++i) { ActiveArea* area = activeAreas.get(i); if (area->isRegion() || area->isMunicipalZone() || area->isNoSpawnArea()) { return false; } } if (isInObjectsNoBuildZone(x, y, margin)) { return false; } if (isInWater(x, y)) { return false; } if (isInRangeWithPoi(x, y, 150)) return false; if (terrainManager->getHighestHeightDifference(x - 10, y - 10, x + 10, y + 10) > 15.0) return false; return true; }
bool PlanetManagerImplementation::isBuildingPermittedAt(float x, float y, SceneObject* object, float margin) { SortedVector<ActiveArea*> activeAreas; Vector3 targetPos(x, y, 0); if (!zone->isWithinBoundaries(targetPos)) return false; //targetPos.setZ(zone->getHeight(x, y)); not needed zone->getInRangeActiveAreas(x, y, &activeAreas, true); for (int i = 0; i < activeAreas.size(); ++i) { ActiveArea* area = activeAreas.get(i); if (area->isNoBuildArea()) { return false; } } if (isInObjectsNoBuildZone(x, y, margin)) { return false; } if (isInWater(x, y)) { return false; } if (isInRangeWithPoi(x, y, 150)) return false; return true; }
bool PlanetManagerImplementation::isBuildingPermittedAt(float x, float y, SceneObject* object, float margin) { SortedVector<ManagedReference<ActiveArea* > > activeAreas; Vector3 targetPos(x, y, zone->getHeight(x, y)); zone->getInRangeActiveAreas(x, y, &activeAreas, true); for (int i = 0; i < activeAreas.size(); ++i) { ActiveArea* area = activeAreas.get(i); if (area->isNoBuildArea()) { return false; } } if (isInObjectsNoBuildZone(x, y, margin)) { return false; } if (isInWater(targetPos.getX(), targetPos.getY())) { return false; } if (isInRangeWithPoi(targetPos.getX(), targetPos.getY(), 150)) return false; return true; }