/// VManagedResource overrides just so we can register callbacks
BOOL vHavokAiNavMeshResource::Reload()
{
	const char* pszFilename = GetFilename();
	if (pszFilename == NULL)
	{
		return FALSE;
	}

	IVFileInStream *pIn = GetParentManager()->CreateFileInStream(pszFilename,this);
	if (!pIn)
	{
		return FALSE;
	}

	VASSERT(m_navMesh == HK_NULL && m_mediator == HK_NULL);
	if (!LoadNavMesh(pIn, m_navMesh, m_mediator))
	{
		return FALSE;
	}

	VASSERT(m_navMesh != HK_NULL && m_mediator != HK_NULL);
	VASSERT(m_navMesh->getReferenceCount() == 2 && m_mediator->getReferenceCount() == 1);
	FlagAsLoaded();
	UpdateMemoryFootprint();
	return TRUE;
}
// unload from memory
BOOL vHavokBehaviorResource::Unload()
{
	// hkbProjectAssetManager will handle unloading

	FlagAsUnLoaded();
	UpdateMemoryFootprint();
	return true;
}
vHavokAiNavMeshResource::vHavokAiNavMeshResource(hkaiNavMesh* navMesh, hkaiNavMeshQueryMediator* mediator) 
	: VManagedResource(vHavokAiNavMeshResourceManager::GetInstance()), 
	m_navMesh(navMesh), 
	m_mediator(mediator)
{
	Init();
	FlagAsLoaded();
	UpdateMemoryFootprint();
}
// unload from memory
BOOL vHavokAiNavMeshResource::Unload()
{
	VASSERT(m_mediator->getReferenceCount() == 1);
	m_mediator = HK_NULL;

	VASSERT(m_navMesh->getReferenceCount() == 1);
	m_navMesh = HK_NULL;

	FlagAsUnLoaded();
	UpdateMemoryFootprint();
	return true;
}
BOOL vHavokBehaviorResource::Reload()
{
	// Deserialize the project asset
	vHavokBehaviorResourceManager* manager = static_cast<vHavokBehaviorResourceManager*>( GetParentManager() );
	const char* projectFilename = GetFilename();

	// Load the project
	hkbProjectAssetManager* projectAssetManager = manager->GetProjectAssetManager();
	projectAssetManager->loadProject( projectFilename );

	FlagAsLoaded();
	UpdateMemoryFootprint();
	return TRUE;
}