void Game_InitFilesystem() { // mount the sample assets directory MFFileSystemHandle hNative = MFFileSystem_GetInternalFileSystemHandle(MFFSH_NativeFileSystem); MFMountDataNative mountData; mountData.cbSize = sizeof(MFMountDataNative); mountData.priority = MFMP_Normal; mountData.flags = MFMF_FlattenDirectoryStructure | MFMF_Recursive; mountData.pMountpoint = "sample"; #if defined(MF_IPHONE) mountData.pPath = MFFile_SystemPath(); #else mountData.pPath = MFFile_SystemPath("../Sample_Data/"); #endif MFFileSystem_Mount(hNative, &mountData); mountData.pMountpoint = "game"; mountData.pPath = MFFile_SystemPath(); MFFileSystem_Mount(hNative, &mountData); mountData.flags = MFMF_DontCacheTOC; mountData.pMountpoint = "data"; MFFileSystem_Mount(hNative, &mountData); if(pInitFujiFS) pInitFujiFS(); }
void MFFileSystem_RegisterDefaultArchives(void *) { GET_MODULE_DATA(MFFileSystemState); MFFile *&hDataArchive = pModuleData->hDataArchive; MFFile *&hPatchArchive = pModuleData->hPatchArchive; // try and mount the 'standard' archives... // TODO: ponder removing this code and forcing the use of a filesystem init callback? :/ MFOpenDataNative dataArchive; dataArchive.cbSize = sizeof(MFOpenDataNative); dataArchive.openFlags = MFOF_Read|MFOF_Binary; hDataArchive = 0; const char **pArc = gArchiveNames; while(!hDataArchive && *pArc) { dataArchive.pFilename = MFFile_SystemPath(MFStr(*pArc, MFSystem_GetPlatformString(MFSystem_GetCurrentPlatform()))); hDataArchive = MFFile_Open(pModuleData->hNativeFileSystem, &dataArchive); ++pArc; } MFMountDataNative mountData; mountData.cbSize = sizeof(MFMountDataNative); mountData.priority = MFMP_Normal; if(hDataArchive) { // attempt to cache the zip archive MFOpenDataCachedFile cachedOpen; cachedOpen.cbSize = sizeof(MFOpenDataCachedFile); cachedOpen.openFlags = MFOF_Read | MFOF_Binary | MFOF_Cached_CleanupBaseFile; cachedOpen.maxCacheSize = 1*1024*1024; // 1mb cache for zip archives should be heaps!! cachedOpen.pBaseFile = hDataArchive; MFFile *pCachedFile = MFFile_Open(MFFileSystem_GetInternalFileSystemHandle(MFFSH_CachedFileSystem), &cachedOpen); if(pCachedFile) hDataArchive = pCachedFile; // mount the zip archive. MFMountDataZipFile zipMountData; zipMountData.cbSize = sizeof(MFMountDataZipFile); zipMountData.flags = MFMF_Recursive|MFMF_FlattenDirectoryStructure; zipMountData.priority = MFMP_Normal; zipMountData.pMountpoint = "data"; zipMountData.pZipArchive = hDataArchive; MFFileSystem_Mount(pModuleData->hZipFileSystem, &zipMountData); } mountData.flags = MFMF_DontCacheTOC; mountData.pMountpoint = "home"; mountData.pPath = MFFile_HomePath(); MFFileSystem_Mount(pModuleData->hNativeFileSystem, &mountData); // see if we can mount the patch archive.. hPatchArchive = 0; pArc = gPatchArchiveNames; while(!hPatchArchive && *pArc) { dataArchive.pFilename = MFFile_SystemPath(MFStr(*pArc, MFSystem_GetPlatformString(MFSystem_GetCurrentPlatform()))); hDataArchive = MFFile_Open(pModuleData->hNativeFileSystem, &dataArchive); ++pArc; } if(hPatchArchive) { // attempt to cache the zip archive MFOpenDataCachedFile cachedOpen; cachedOpen.cbSize = sizeof(MFOpenDataCachedFile); cachedOpen.openFlags = MFOF_Read | MFOF_Binary | MFOF_Cached_CleanupBaseFile; cachedOpen.maxCacheSize = 1*1024*1024; // 1mb cache for zip archives should be heaps!! cachedOpen.pBaseFile = hPatchArchive; MFFile *pCachedFile = MFFile_Open(MFFileSystem_GetInternalFileSystemHandle(MFFSH_CachedFileSystem), &cachedOpen); if(pCachedFile) hPatchArchive = pCachedFile; // mount the zip archive. MFMountDataZipFile zipMountData; zipMountData.cbSize = sizeof(MFMountDataZipFile); zipMountData.flags = MFMF_Recursive|MFMF_FlattenDirectoryStructure; zipMountData.priority = MFMP_VeryHigh; zipMountData.pMountpoint = "patch"; zipMountData.pZipArchive = hPatchArchive; MFFileSystem_Mount(pModuleData->hZipFileSystem, &zipMountData); } if(pModuleData->hHTTPFileSystem != -1) { // register the network filesystems MFMountDataHTTP mountDataHTTP; mountDataHTTP.cbSize = sizeof(MFMountDataHTTP); mountDataHTTP.pMountpoint = "http"; mountDataHTTP.priority = MFMP_Normal + 1; mountDataHTTP.flags = MFMF_OnlyAllowExclusiveAccess; MFFileSystem_Mount(pModuleData->hHTTPFileSystem, &mountDataHTTP); } }