// -------------------------------------------------------------------------- // // 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; }