c1_lua/lua/app/common/resource_manager.lua
2023-04-03 10:59:13 +08:00

115 lines
3.6 KiB
Lua

local ResourceManager = {
sceneAbPath = {}
}
local AB_SUFFIX = ".ab"
local ResMgr = CS.BF.BFMain.Instance.ResMgr
function ResourceManager:getSceneAssetBundlePath(path)
local abPath = self.sceneAbPath[path]
if abPath == nil then
local start_index = string.find(path, '/')
if start_index == nil then
abPath = path .. AB_SUFFIX
else
abPath = string.sub(path, start_index + 1) .. AB_SUFFIX
end
self.sceneAbPath[path] = abPath
end
return abPath
end
function ResourceManager:getSceneLoadPath(scenePath)
if USE_AB then
return ResMgr:GetSceneLoadPath(self:getSceneAssetBundlePath(scenePath))
else
return scenePath:gsub("^%l", string.upper)
end
end
function ResourceManager:loadAsync(path, type, callback)
return self:loadOriginAssetAsync(path, type, function(assetPath, asset)
local obj = CS.UnityEngine.Object.Instantiate(asset)
callback(assetPath, obj)
end)
end
function ResourceManager:loadOriginAssetAsync(path, type, callback)
return ResMgr:LoadAsync(path, type, callback)
end
function ResourceManager:loadSceneAsync(scenePath, callback)
ResMgr:LoadSceneAsync(self:getSceneAssetBundlePath(scenePath), callback)
end
function ResourceManager:unloadScene(path)
ResMgr:UnloadScene(self:getSceneAssetBundlePath(path))
end
function ResourceManager:unload(path, immediately)
if immediately then
ResMgr:Unload(path, true)
else
ResMgr:Unload(path, false)
end
end
function ResourceManager:unloadAllDelayAssets()
ResMgr:UnloadAllDelayAssets()
end
function ResourceManager:clear()
ResMgr:Clear()
end
function ResourceManager:destroyPrefab(prefab)
CS.UnityEngine.Object.Destroy(prefab)
end
function ResourceManager:containsAsset(assetPath)
return ResMgr:ContainsAsset(assetPath)
end
if NOT_PUBLISH then
ResourceManager._ReleaseloadOriginAssetAsync = ResourceManager.loadOriginAssetAsync
function ResourceManager:loadOriginAssetAsync(path, type, callback)
local function checkAsset(assetPath, asset)
if asset == nil then
Logger.logError("[LOAD_ERROR]load error:%s", assetPath)
end
callback(assetPath, asset)
end
self:_ReleaseloadOriginAssetAsync(path, type, checkAsset)
end
ResourceManager._ReleaseloadAsync = ResourceManager.loadAsync
function ResourceManager:loadAsync(...)
if self._debugLoadAsyncFuncMap == nil then
self._debugLoadAsyncFuncMap = {
[UIPrefabManager.loadUIWidgetAsync] = true,
[EffectManager.loadUIEffectAsync] = true,
[EffectManager.loadEffectAsync] = true,
[EffectManager.loadBattleEffectAsync] = true,
[EffectManager.loadHeroShowEffectAsync] = true,
[ModelManager.loadHeroAsync] = true,
[ModelManager.loadWeaponAsync] = true,
[ModelManager.loadModelAsync] = true,
[ModelManager.loadHeroShowAsync] = true,
[ModelManager.loadMonsterAsync] = true,
[SpineManager.loadUISpinePrefabAsync] = true,
[SpineManager.loadMeshSpinePrefabAsync] = true,
[SpineManager.loadHeroAsync] = true,
[SpineManager.loadBattleEffectAsync] = true,
}
end
local currFunc = debug.getinfo(2, "f").func
if self._debugLoadAsyncFuncMap[currFunc] == nil then
Logger.logFatal("you can not call ResourceManager:loadAsync directly")
end
self:_ReleaseloadAsync(...)
end
end
return ResourceManager