void vHavokAiModule::HandleResourceFile(vHavokResourceCallbackData &data)
{
  // handle the physics side in this function:
  hkRootLevelContainer* root = data.m_pResource->getContents<hkRootLevelContainer>();
  if (root==NULL || data.m_Action==vHavokResourceCallbackData::HRA_NONE)
    return;
	hkaiWorld* aiWorld = GetAiWorld();
  // TODO
}
bool vHavokAiModule::LoadNavMeshDeprecated(const char* filename, VArray<vHavokAiNavMeshInstance*>* navMeshInstancesOut)
{
	if (!Vision::File.Exists(filename))
	{
		return false;
	}

	vHavokStreamReader havokStreamReader(filename);
	if (!havokStreamReader.isOk())
	{
		return false;
	}

	hkBufferedStreamReader bufferedStreamReader(&havokStreamReader);
	if (!bufferedStreamReader.isOk())
	{
		return false;
	}

	VArray<vHavokAiNavMeshResource*> navMeshResources;
	{
		hkArray< hkRefPtr<hkaiNavMesh> > navMeshes;
		hkArray< hkRefPtr<hkaiNavMeshQueryMediator> > mediators;
		hkObjectResource* res = hkSerializeUtil::loadOnHeap(&bufferedStreamReader);
		hkRootLevelContainer* container = res->getContents<hkRootLevelContainer>();
		if (container)
		{
			hkaiNavMesh* navMesh = container->findObject<hkaiNavMesh>();
			hkaiNavMeshQueryMediator* mediator = container->findObject<hkaiStaticTreeNavMeshQueryMediator>();

			while(navMesh)
			{
				navMeshes.pushBack(navMesh);
				mediators.pushBack(mediator);

				navMesh = container->findObject<hkaiNavMesh>(navMesh);
				mediator = container->findObject<hkaiStaticTreeNavMeshQueryMediator>(mediator);
			}
		}
		else
		{
			// dkw.note: loading legacy asset that didn't use a hkRootLevelContainer
			hkaiNavMesh* navMesh = res->getContents<hkaiNavMesh>();

			if (navMesh == HK_NULL)
			{
				return false;
			}

			navMeshes.pushBack(navMesh);
			mediators.pushBack(HK_NULL);
		}

		res->removeReference();
		if (navMeshes.getSize() == 0)
		{
			return false;
		}

		for (int i = 0; i < navMeshes.getSize(); i++)
		{
			if (mediators[i] == HK_NULL)
			{
				VASSERT(navMeshes[i]->getReferenceCount() == 1);
				mediators[i].setAndDontIncrementRefCount(hkaiNavMeshUtils::setupQueryMediator( *navMeshes[i] ));
			}
			else
			{
				VASSERT(navMeshes[i]->getReferenceCount() == 2);
			}

			VASSERT(mediators[i]->getReferenceCount() == 1);
			vHavokAiNavMeshResource* resource = new vHavokAiNavMeshResource(navMeshes[i], mediators[i]);
			VASSERT(navMeshes[i]->getReferenceCount() == 3);
			VASSERT(mediators[i]->getReferenceCount() == 2);
			navMeshResources.Add(resource);
		}
	}

	VArray<vHavokAiNavMeshInstance*> navMeshInstancesLocal;
	VArray<vHavokAiNavMeshInstance*>* navMeshInstancesPtr;
	if (navMeshInstancesOut != HK_NULL)
	{
		navMeshInstancesPtr = navMeshInstancesOut;
	}
	else
	{
		navMeshInstancesPtr = &navMeshInstancesLocal;
	}

	hkaiWorld* aiWorld = GetAiWorld();
	for (int i = 0; i < navMeshResources.GetLength(); i++)
	{
		VASSERT(navMeshResources[i]->GetNavMesh()->getReferenceCount() == 2);
		VASSERT(navMeshResources[i]->GetNavMeshQueryMediator()->getReferenceCount() == 1);
		vHavokAiNavMeshInstance* navMeshInstance = new vHavokAiNavMeshInstance(navMeshResources[i], i);
		VASSERT(navMeshResources[i]->GetNavMesh()->getReferenceCount() == 3);
		VASSERT(navMeshResources[i]->GetNavMeshQueryMediator()->getReferenceCount() == 1);

		navMeshInstance->AddNavMeshToWorld(aiWorld);

		navMeshInstancesPtr->Add(navMeshInstance);
	}

	return true;
}