本文整理汇总了C++中SharedObjectTemplate类的典型用法代码示例。如果您正苦于以下问题:C++ SharedObjectTemplate类的具体用法?C++ SharedObjectTemplate怎么用?C++ SharedObjectTemplate使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SharedObjectTemplate类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: findPathFromCellToDifferentCell
Vector<WorldCoordinates>* PathFinderManager::findPathFromCellToCell(const WorldCoordinates& pointA, const WorldCoordinates& pointB) {
CellObject* ourCell = pointA.getCell();
CellObject* targetCell = pointB.getCell();
if (ourCell != targetCell)
return findPathFromCellToDifferentCell(pointA, pointB);
int ourCellID = ourCell->getCellNumber();
ManagedReference<BuildingObject*> building = cast<BuildingObject*>( ourCell->getParent().get().get());
SharedObjectTemplate* templateObject = building->getObjectTemplate();
if (templateObject == NULL)
return NULL;
PortalLayout* portalLayout = templateObject->getPortalLayout();
if (portalLayout == NULL)
return NULL;
FloorMesh* floorMesh1 = portalLayout->getFloorMesh(ourCellID);
PathGraph* pathGraph1 = floorMesh1->getPathGraph();
Vector<WorldCoordinates>* path = new Vector<WorldCoordinates>(5, 1);
path->add(pointA); // adding source
//info("same cell... trying to calculate triangle path", true);
Vector<Triangle*>* trianglePath = NULL;
//info("searching floorMesh for cellID " + String::valueOf(ourCellID), true);
int res = getFloorPath(pointA.getPoint(), pointB.getPoint(), floorMesh1, trianglePath);
if (res == -1) { //points in the same triangle
path->add(pointB);
return path;
}
if (trianglePath == NULL) { // returning NULL, no path found
//error("path NULL");
delete path;
return findPathFromCellToDifferentCell(pointA, pointB);
} else {
//info("path found", true);
addTriangleNodeEdges(pointA.getPoint(), pointB.getPoint(), trianglePath, path, ourCell);
delete trianglePath;
path->add(pointB); //adding destination
return path;
}
return path;
}
示例2: getAABBTree
AABBTree* CollisionManager::getAABBTree(SceneObject* scno, int collisionBlockFlags) {
SharedObjectTemplate* templateObject = scno->getObjectTemplate();
if (templateObject == NULL)
return NULL;
if (!(templateObject->getCollisionActionBlockFlags() & collisionBlockFlags))
return NULL;
PortalLayout* portalLayout = templateObject->getPortalLayout();
MeshAppearanceTemplate* mesh = NULL;
if (portalLayout != NULL) {
mesh = portalLayout->getMeshAppearanceTemplate(0);
} else {
AppearanceTemplate* appTemplate = templateObject->getAppearanceTemplate();
if (appTemplate == NULL)
return NULL;
mesh = dynamic_cast<MeshAppearanceTemplate*>(appTemplate->getFirstMesh());
}
if (mesh == NULL)
return NULL;
return mesh->getAABBTree();
}
示例3: checkMountEligibility
short PetManagerImplementation::checkMountEligibility(PetControlDevice* petControlDevice, float height) {
ManagedReference<TangibleObject*> controlledObject = petControlDevice->getControlledObject();
if (controlledObject == NULL || !controlledObject->isAiAgent())
return PetManager::INVALIDCREATURE;
ManagedReference<AiAgent*> pet = cast<AiAgent*>(controlledObject.get());
if( pet == NULL )
return PetManager::INVALIDCREATURE;
//Check if the pet's species is able to be trained as a mount
if (!pet->hasSlotDescriptor("rider"))
return PetManager::INVALIDCREATURE;
SharedObjectTemplate* objectTemplate = petControlDevice->getObjectTemplate();
if (objectTemplate == NULL)
return PetManager::INVALIDCREATURE;
short result;
if (height == -1)
result = isValidMountScale(objectTemplate->getAppearanceFilename(), 1, pet->getHeight());
else
result = isValidMountScale(objectTemplate->getAppearanceFilename(), 1, height);
return result;
}
示例4: targetPos
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;
}
示例5: checkLineOfSightWorldToCell
bool CollisionManager::checkLineOfSightWorldToCell(const Vector3& rayOrigin, const Vector3& rayEnd, float distance, CellObject* cellObject) {
ManagedReference<SceneObject*> building = cellObject->getParent();
if (building == NULL)
return true;
SharedObjectTemplate* objectTemplate = building->getObjectTemplate();
PortalLayout* portalLayout = objectTemplate->getPortalLayout();
if (portalLayout == NULL)
return true;
Ray ray = convertToModelSpace(rayOrigin, rayEnd, building);
if (cellObject->getCellNumber() >= portalLayout->getAppearanceTemplatesSize())
return true;
MeshAppearanceTemplate* app = portalLayout->getMeshAppearanceTemplate(cellObject->getCellNumber());
AABBTree* aabbTree = app->getAABBTree();
if (aabbTree == NULL)
return true;
float intersectionDistance;
Triangle* triangle = NULL;
if (aabbTree->intersects(ray, distance, intersectionDistance, triangle, true))
return false;
return true;
}
示例6: checkLineOfSightInParentCell
bool CollisionManager::checkLineOfSightInParentCell(SceneObject* object, Vector3& endPoint) {
ManagedReference<SceneObject*> parent = object->getParent();
if (parent == NULL || !parent->isCellObject())
return true;
CellObject* cell = cast<CellObject*>( parent.get());
SharedObjectTemplate* objectTemplate = parent->getRootParent().get()->getObjectTemplate();
PortalLayout* portalLayout = objectTemplate->getPortalLayout();
MeshAppearanceTemplate* appearanceMesh = NULL;
if (portalLayout == NULL)
return true;
try {
appearanceMesh = portalLayout->getMeshAppearanceTemplate(cell->getCellNumber());
} catch (Exception& e) {
return true;
}
if (appearanceMesh == NULL) {
//info("null appearance mesh ");
return true;
}
AABBTree* aabbTree = appearanceMesh->getAABBTree();
if (aabbTree == NULL)
return true;
//switching Y<->Z, adding 0.1 to account floor
Vector3 startPoint = object->getPosition();
startPoint.set(startPoint.getX(), startPoint.getY(), startPoint.getZ() + 0.1f);
endPoint.set(endPoint.getX(), endPoint.getY(), endPoint.getZ() + 0.1f);
Vector3 dir = endPoint - startPoint;
dir.normalize();
float distance = endPoint.distanceTo(startPoint);
float intersectionDistance;
Ray ray(startPoint, dir);
Triangle* triangle = NULL;
//nothing in the middle
if (aabbTree->intersects(ray, distance, intersectionDistance, triangle, true))
return false;
Ray ray2(endPoint, Vector3(0, -1, 0));
//check if we are in the cell with dir (0, -1, 0)
if (!aabbTree->intersects(ray2, 64000.f, intersectionDistance, triangle, true))
return false;
return true;
}
示例7: rayStart
Vector<float>* CollisionManager::getCellFloorCollision(float x, float y, CellObject* cellObject) {
Vector<float>* collisions = NULL;
ManagedReference<SceneObject*> rootObject = cellObject->getRootParent();
if (rootObject == NULL)
return NULL;
SharedObjectTemplate* templateObject = rootObject->getObjectTemplate();
if (templateObject == NULL)
return NULL;
PortalLayout* portalLayout = templateObject->getPortalLayout();
if (portalLayout == NULL)
return NULL;
FloorMesh* mesh = portalLayout->getFloorMesh(cellObject->getCellNumber());
if (mesh == NULL)
return NULL;
AABBTree* tree = mesh->getAABBTree();
if (tree == NULL)
return NULL;
Vector3 rayStart(x, 16384.f, y);
Vector3 rayEnd(x, -16384.f, y);
Vector3 norm = rayEnd - rayStart;
norm.normalize();
Ray ray(rayStart, norm);
SortedVector<IntersectionResult> results(3, 2);
tree->intersects(ray, 16384 * 2, results);
if (results.size() == 0)
return NULL;
collisions = new Vector<float>(results.size(), 1);
for (int i = 0; i < results.size(); ++i) {
float floorHeight = 16384 - results.get(i).getIntersectionDistance();
collisions->add(floorHeight);
}
return collisions;
}
示例8: getTemplateFile
String TemplateManager::getTemplateFile(uint32 key) {
SharedObjectTemplate* templateData = templateCRCMap->get(key);
if (templateData == NULL) {
String ascii = clientTemplateCRCMap->get(key);
if (ascii.isEmpty())
throw Exception("TemplateManager::getTemplateFile exception unknown template key 0x" + String::hexvalueOf((int)key));
else
return ascii;
}
return templateData->getFullTemplateString();
}
示例9: TEST_F
TEST_F(LuaMobileTest, LuaLootGroupsTest) {
// Verify loot group map loaded
ASSERT_EQ(LootGroupMap::ERROR_CODE, 0);
// Test Loot Items
HashTableIterator<String, Reference<LootItemTemplate*> > itemIter = lootGroupMap->itemTemplates.iterator();
while (itemIter.hasNext()) {
LootItemTemplate* lootItemTemplate = itemIter.next();
String itemTemplateName( lootItemTemplate->getTemplateName().toCharArray() );
// Make sure that no loot items have the same name as a loot group
EXPECT_FALSE( lootGroupMap->lootGroupExists(itemTemplateName) ) << "Loot item " << std::string(itemTemplateName.toCharArray()) << " has the same name as a loot group.";
// Verify that directObjectTemplate is valid
String directObjectTemplate = lootItemTemplate->getDirectObjectTemplate();
SharedObjectTemplate* templateObject = templateManager->getTemplate(directObjectTemplate.hashCode());
EXPECT_TRUE( templateObject != NULL && templateObject->isSharedTangibleObjectTemplate() ) << "directObjectTemplate is invalid in loot item " << std::string(itemTemplateName.toCharArray());
}
// Test Loot Groups
HashTableIterator<String, Reference<LootGroupTemplate*> > iter = lootGroupMap->groupTemplates.iterator();
while (iter.hasNext()) {
LootGroupTemplate* lootGroupTemplate = iter.next();
String groupTemplateName( lootGroupTemplate->getTemplateName().toCharArray() );
// Verify that group is not empty
EXPECT_TRUE( lootGroupTemplate->getLootGroupEntryForRoll(-1).length() > 0 ) << "No entries in loot group: " << std::string(groupTemplateName.toCharArray());
// Check loot group to make sure their chances total correctly
EXPECT_GT( lootGroupTemplate->getLootGroupEntryForRoll(10000000).length(), 0 ) << "Item total chance is less than 10000000: " << std::string(groupTemplateName.toCharArray());
EXPECT_EQ( lootGroupTemplate->getLootGroupEntryForRoll(10000001).length(), 0 ) << "Item total chance is greater than 10000000: " << std::string(groupTemplateName.toCharArray());
// Check that all loot group entries are valid
for( int i = 0; i < lootGroupTemplate->size(); i++ ){
Vector<String> parentGroups;
parentGroups.add(groupTemplateName);
String entryName = lootGroupTemplate->getLootGroupEntryAt(i);
checkLootGroupEntryRecursive(entryName, &parentGroups);
}
}
}
示例10: getMountedRunSpeed
float PetManagerImplementation::getMountedRunSpeed(CreatureObject* mount) {
if (!mount->isMount())
return mount->getRunSpeed();
ManagedReference<PetControlDevice*> pcd = mount->getControlDevice().get().castTo<PetControlDevice*>();
if (pcd != NULL) {
SharedObjectTemplate* objectTemplate = pcd->getObjectTemplate();
if (objectTemplate != NULL) {
MountSpeedData* mountSpeedData = getMountSpeedData(objectTemplate->getAppearanceFilename());
if (mountSpeedData != NULL)
return mountSpeedData->getRunSpeed();
}
}
return mount->getRunSpeed();
}
示例11: getFloorMesh
FloorMesh* PathFinderManager::getFloorMesh(CellObject* cell) {
ManagedReference<BuildingObject*> building1 = (cell->getParent().get().castTo<BuildingObject*>());
SharedObjectTemplate* templateObject = building1->getObjectTemplate();
if (templateObject == NULL) {
return NULL;
}
PortalLayout* portalLayout = templateObject->getPortalLayout();
if (portalLayout == NULL) {
return NULL;
}
FloorMesh* floorMesh1 = portalLayout->getFloorMesh(cell->getCellNumber());
return floorMesh1;
}
示例12: _locker
SceneObject* ObjectManager::loadObjectFromTemplate(uint32 objectCRC) {
Locker _locker(this);
SceneObject* object = NULL;
try {
SharedObjectTemplate* templateData = templateManager->getTemplate(objectCRC);
if (templateData == NULL) {
error("trying to create object with unknown objectcrc 0x" + String::hexvalueOf((int)objectCRC));
return NULL;
}
uint32 gameObjectType = templateData->getGameObjectType();
object = objectFactory.createObject(gameObjectType);
if (object == NULL) {
error("creating object unknown gameObjectType " + String::valueOf(gameObjectType));
return NULL;
}
databaseManager->addTemporaryObject(object);
object->setServerObjectCRC(objectCRC);
object->loadTemplateData(templateData);
} catch (Exception& e) {
error("exception caught in SceneObject* ObjectManager::loadObjectFromTemplate(uint32 objectCRC)");
error(e.getMessage());
e.printStackTrace();
} catch (...) {
error("unreported exception caught in SceneObject* ObjectManager::loadObjectFromTemplate(uint32 objectCRC)");
throw;
}
return object;
}
示例13: checkLineOfSightInBuilding
bool CollisionManager::checkLineOfSightInBuilding(SceneObject* object1, SceneObject* object2, SceneObject* building) {
SharedObjectTemplate* objectTemplate = building->getObjectTemplate();
PortalLayout* portalLayout = objectTemplate->getPortalLayout();
if (portalLayout == NULL)
return true;
//we are in model space... in cells
Vector3 rayOrigin = object1->getPosition();
rayOrigin.set(rayOrigin.getX(), rayOrigin.getY(), rayOrigin.getZ() + 1.f);
Vector3 rayEnd = object2->getPosition();
rayEnd.set(rayEnd.getX(), rayEnd.getY(), rayEnd.getZ() + 1.f);
Vector3 direction(Vector3(rayEnd - rayOrigin));
direction.normalize();
float distance = rayEnd.distanceTo(rayOrigin);
float intersectionDistance;
Ray ray(rayOrigin, direction);
Triangle* triangle = NULL;
// we check interior cells
for (int i = 1; i < portalLayout->getAppearanceTemplatesSize(); ++i) {
MeshAppearanceTemplate* app = portalLayout->getMeshAppearanceTemplate(i);
AABBTree* aabbTree = app->getAABBTree();
if (aabbTree == NULL)
continue;
if (aabbTree->intersects(ray, distance, intersectionDistance, triangle, true))
return false;
}
return true;
}
示例14: targetPos
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;
}
示例15: addTemplate
void TemplateManager::addTemplate(uint32 key, const String& fullName, LuaObject* templateData) {
uint32 templateType = templateData->getIntField("templateType");
String clientTemplateFile = templateData->getStringField("clientTemplateFileName");
SharedObjectTemplate* templateObject = templateFactory.createObject(templateType);
if (templateObject == NULL) {
error("error creating template from lua with templateType 0x" + String::hexvalueOf((int)templateType));
return;
}
//info("loading " + fullName, true);
String fileName = fullName.subString(fullName.lastIndexOf('/') + 1, fullName.lastIndexOf('.'));
templateObject->setFullTemplateString(fullName);
templateObject->setTemplateFileName(fileName);
if (!clientTemplateFile.isEmpty()) {
IffStream* iffStream = openIffFile(clientTemplateFile);
if (iffStream != NULL) {
templateObject->readObject(iffStream);
delete iffStream;
}
}
templateObject->readObject(templateData);
if (!clientTemplateFile.isEmpty())
templateObject->addDerivedFile(clientTemplateFile);
info("loaded " + fullName);
if (templateCRCMap->put(key, templateObject) != NULL) {
//error("duplicate template for " + fullName);
}
}