// Pushes results into m_workingData
	void DoGetPerceived( const TGameObjects& data, const IGameObject* pPerceiver, const AUVec3f& center, float radius ) const
	{
		size_t count = data.size();
		for (size_t j=0; j<count; ++j)
		{
			IGameObject* pObj = data[j];
			float dist = (pObj->GetEntity()->GetPosition() - center).Magnitude();
			if ( pObj->GetEntityId() != pPerceiver->GetEntityId() && dist < radius )
			{
				m_workingData.push_back( pObj );
			}
		}
	}
	void DoDestroyGameObject( ObjectId id )
	{
		IObjectFactorySystem* pFactory = PerModuleInterface::g_pSystemTable->pObjectFactorySystem;
		IObject* pObj = pFactory->GetObject(id);
		if (pObj)
		{
			IGameObject* pGameObject = 0;
			IObjectUtils::GetObject( &pGameObject, pObj->GetObjectId() );

			// Notify any listeners that object is about to be destroyed
			for (size_t i=0; i<m_Listeners.size(); ++i)
			{
				m_Listeners[i]->OnGameObjectAboutToDestroy(pGameObject);
			}

			m_GameObjects[pGameObject->GetGameObjectType()].erase(pGameObject);
			IObjectUtils::DestroyObjectAndEntity( pGameObject->GetEntityId() );
		}
	}
	void DestroyGameObjects()
	{
		for (size_t i=0; i<m_GameObjects.size(); ++i)
		{
			TGameObjects& objects = m_GameObjects[i];
			TGameObjects::iterator it = objects.begin();
			TGameObjects::iterator itEnd = objects.end();
			while (it != itEnd)
			{
				IGameObject* pGameObject = *it;
				if (pGameObject)
				{
					IObjectUtils::DestroyObjectAndEntity( pGameObject->GetEntityId() );
				}

				++it;
			}
			objects.clear();
		}
	}
	void DestroyGameObjects()
	{
		IObjectFactorySystem* pFactory = PerModuleInterface::GetInstance()->GetSystemTable()->pObjectFactorySystem;

		for (size_t i=0; i<m_GameObjects.size(); ++i)
		{
			TGameObjects& objects = m_GameObjects[i];
			TGameObjects::iterator it = objects.begin();
			TGameObjects::iterator itEnd = objects.end();
			while (it != itEnd)
			{
				IGameObject* pGameObject = *it;
				if (pGameObject)
				{
					IObjectUtils::DestroyObjectAndEntity( pGameObject->GetEntityId() );
				}

				++it;
			}
			objects.clear();
		}
	}