本文整理汇总了C++中SharedObjectTemplate::getNoBuildRadius方法的典型用法代码示例。如果您正苦于以下问题:C++ SharedObjectTemplate::getNoBuildRadius方法的具体用法?C++ SharedObjectTemplate::getNoBuildRadius怎么用?C++ SharedObjectTemplate::getNoBuildRadius使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SharedObjectTemplate
的用法示例。
在下文中一共展示了SharedObjectTemplate::getNoBuildRadius方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: isInObjectsNoBuildZone
bool PlanetManagerImplementation::isInObjectsNoBuildZone(float x, float y, float extraMargin) {
SortedVector<ManagedReference<QuadTreeEntry* > > closeObjects;
Vector3 targetPos(x, y, zone->getHeight(x, y));
zone->getInRangeObjects(x, y, 512, &closeObjects, true);
for (int i = 0; i < closeObjects.size(); ++i) {
SceneObject* obj = cast<SceneObject*>(closeObjects.get(i).get());
SharedObjectTemplate* objectTemplate = obj->getObjectTemplate();
if (objectTemplate != NULL) {
float radius = objectTemplate->getNoBuildRadius();
// Only check objects with an actual NoBuildRadius
if (radius > 0) {
// Add margin to check
radius += extraMargin;
Vector3 objWorldPos = obj->getWorldPosition();
if (objWorldPos.squaredDistanceTo(targetPos) < radius * radius) {
return true;
}
}
}
}
return false;
}
示例2: isInObjectsNoBuildZone
bool PlanetManagerImplementation::isInObjectsNoBuildZone(float x, float y, float extraMargin) {
SortedVector<QuadTreeEntry*> closeObjects;
Vector3 targetPos(x, y, zone->getHeight(x, y));
zone->getInRangeObjects(x, y, 512, &closeObjects, true);
for (int i = 0; i < closeObjects.size(); ++i) {
SceneObject* obj = static_cast<SceneObject*>(closeObjects.get(i));
SharedObjectTemplate* objectTemplate = obj->getObjectTemplate();
if (objectTemplate != NULL) {
float radius = objectTemplate->getNoBuildRadius();
// Only check objects with an actual NoBuildRadius
if (radius > 0) {
// Add margin to check
radius += extraMargin;
Vector3 objWorldPos = obj->getWorldPosition();
if (objWorldPos.squaredDistanceTo(targetPos) < radius * radius) {
return true;
}
}
// Check if it's within a structure's footprint
if (objectTemplate->isSharedStructureObjectTemplate()) {
if (StructureManager::instance()->isInStructureFootprint(cast<StructureObject*>(obj), x, y, extraMargin)) {
return true;
}
}
}
}
return false;
}
示例3: handleObjectMenuSelect
int EventPerkDeedImplementation::handleObjectMenuSelect(CreatureObject* player, byte selectedID) {
if (selectedID == 20) {
if (generated) {
return 1;
}
Zone* zone = player->getZone();
if (zone == NULL) {
return 1;
}
PlanetManager* planetManager = zone->getPlanetManager();
if (planetManager == NULL) {
return 1;
}
EventPerkDeedTemplate* deedTemplate = cast<EventPerkDeedTemplate*>(getObjectTemplate());
if (deedTemplate == NULL) {
return 1;
}
if (zone->getZoneName().contains("space_")) {
player->sendSystemMessage("@event_perk:not_in_space"); // You may not deploy a Rental in space. Return to the ground first.
return 1;
}
if (!deedTemplate->isAllowedZone(zone->getZoneName())) {
player->sendSystemMessage("@event_perk:not_on_this_planet"); // You cannot deploy this rental on this planet. Examine the deed to determine the intended planet for this rental.
return 1;
}
if (!isASubChildOf(player)) {
player->sendSystemMessage("@event_perk:from_inventory_only"); // This rental must be in your inventory in order to be deployed.
return 1;
}
if (player->getParent() != NULL) {
player->sendSystemMessage("@event_perk:not_inside"); // You cannot deploy a Rental indoors. You must move outside.
return 1;
}
if (player->isInCombat()) {
player->sendSystemMessage("@event_perk:not_in_combat"); // You cannot deploy a Rental while in combat.
return 1;
}
if (player->isSwimming()) {
player->sendSystemMessage("@event_perk:not_while_swimming"); // You cannot deploy a Rental while swimming.
return 1;
}
ManagedReference<CityRegion*> city = player->getCityRegion().get();
if (city != NULL) {
if (city->isClientRegion()) {
player->sendSystemMessage("@event_perk:not_in_municipal_zone"); // You may not place a Rental in a municipal zone.
return 1;
}
if (city->isZoningEnabled() && !city->hasZoningRights(player->getObjectID())) {
player->sendSystemMessage("@event_perk:no_zoning_rights"); // You must have zoning rights to place a Rental in this city.
return 1;
}
}
int x = player->getWorldPositionX();
int y = player->getWorldPositionY();
int nearbyPerks = 0;
TerrainManager* terrainManager = planetManager->getTerrainManager();
if ( terrainManager == NULL || terrainManager->getHighestHeightDifference(x - 10, y - 10, x + 10, y + 10) > 15.0) {
player->sendSystemMessage("@event_perk:bad_area"); // This rental could not be deployed due to the surrounding terrain. Please move to another area and try again.
return 1;
}
SortedVector<ManagedReference<QuadTreeEntry* > >* closeObjects = player->getCloseObjects();
if (closeObjects == NULL) {
error("Player has NULL closeObjectsVector in EventPerkDeedImplementation::handleObjectMenuSelect");
return 1;
}
for (int i = 0; i < closeObjects->size(); ++i) {
SceneObject* obj = cast<SceneObject*>(closeObjects->get(i).get());
if (obj == NULL) {
continue;
}
SharedObjectTemplate* objectTemplate = obj->getObjectTemplate();
if (objectTemplate == NULL) {
continue;
}
float radius = objectTemplate->getNoBuildRadius();
if (obj->isLairObject() && player->isInRange(obj, radius)) {
player->sendSystemMessage("@event_perk:too_close_lair"); // You cannot place a Rental this close to a lair.
//.........这里部分代码省略.........