// create any zone-specific data necessary for all zones for the given node
	void PCZSceneManager::createZoneSpecificNodeData(PCZSceneNode * node)
	{
		ZoneMap::iterator i;
		PCZone * zone;
		for (i = mZones.begin(); i != mZones.end(); i++)
		{
			zone = i->second;
			if (zone->requiresZoneSpecificNodeData())
			{
				zone->createNodeZoneData(node);
			}
		}		
	}
Exemplo n.º 2
0
 // update zone-specific data for any zone that the node is touching
 void PCZSceneNode::updateZoneData(void)
 {
     ZoneData* zoneData;
     PCZone * zone;
     // make sure home zone data is updated
     zone = mHomeZone;
     if (zone->requiresZoneSpecificNodeData())
     {
         zoneData = getZoneData(zone);
         zoneData->update();
     }
     // update zone data for any zones visited
     ZoneMap::iterator it = mVisitingZones.begin();
     while ( it != mVisitingZones.end() )
     {
         zone = it->second;
         if (zone->requiresZoneSpecificNodeData())
         {
             zoneData = getZoneData(zone);
             zoneData->update();
         }
         ++it;
     }
 }
	/* Create a zone with the given name and parent zone */
	PCZone * PCZSceneManager::createZone(const String& zoneType, const String& instanceName)
	{
		if (mZones.find(instanceName) != mZones.end())
		{
			OGRE_EXCEPT(
				Exception::ERR_DUPLICATE_ITEM,
				"A zone with the name " + instanceName + " already exists",
				"PCZSceneManager::createZone" );
		}
		PCZone * newZone = mZoneFactoryManager->createPCZone(this, zoneType, instanceName);
		if (newZone)
		{
			// add to the global list of zones
			mZones[instanceName] = newZone;
		}
		if (newZone->requiresZoneSpecificNodeData())
		{
			createZoneSpecificNodeData(newZone);
		}
		return newZone;
	}