Example #1
0
// -------------------------------------------------------------------------- //
// Resources                                                
// -------------------------------------------------------------------------- //
VFmodSoundResource* VFmodManager::LoadSoundResource(const char *szFilename, int iUsageFlags)
{
  VASSERT(szFilename!=NULL);

  VFmodSoundResource *pRes = NULL;
  bool bStream = (iUsageFlags & VFMOD_RESOURCEFLAG_STREAM)>0;
  if (!bStream) // streaming creates unique resources
  {
    if (szFilename[0]=='\\' || szFilename[0]=='/') szFilename++; // make absolute filenames comparable
    int iCount = m_pSoundResourceManager->GetResourceCount();
    const unsigned int iFilenameHash = VPathHelper::GetHash(szFilename);
    for (int i=0;i<iCount;i++) 
    {
      pRes = (VFmodSoundResource*)m_pSoundResourceManager->GetResourceByIndex(i);
      if (!pRes || !pRes->GetFilename() || !pRes->GetFilename()[0])
        continue;
      if (!pRes->CompareFileName(szFilename, iFilenameHash)) 
        continue;

      // additionally see whether flags match...
      if (iUsageFlags==pRes->m_iSoundFlags)
        return pRes;
    }
  }

  if (Vision::File.Exists(szFilename))
  {
    // create a new resource (unique for streaming resources)
    pRes = new VFmodSoundResource(m_pSoundResourceManager, iUsageFlags);
    pRes->SetFilename(szFilename);
    pRes->EnsureLoaded();
    return pRes;
  }

  return NULL;
}