heroes-of-nerevelon/lib/utils/asset_bundle.lua
Neckrat e65a078fb6 рай эпилептика
Co-authored-by: Ivan Yuriev <ivanyr44@gmail.com>
2025-08-11 02:50:41 +03:00

62 lines
1.7 KiB
Lua

--- @class AssetBundle
--- @field root string Path to the tree root
--- @field files table
local AssetBundle = {
root = "/assets",
files = {}
}
--- Loads assets into the tree.
--- Calls [onFileLoading] whenever a file is loaded.
--- @param onFileLoading? fun(path: string): AssetBundle | nil
function AssetBundle:load(onFileLoading)
local callback = onFileLoading or function(path)
print("[AssetBundle]: loading " .. path)
end
local function enumerate(path)
local tree = {}
local contents = love.filesystem.getDirectoryItems(path)
for _, v in pairs(contents) do
local newPath = path .. "/" .. v
local type = love.filesystem.getInfo(newPath).type
if type == "file" then
callback(newPath)
local data = self.loadFile(newPath)
tree[self.cutExtension(v)] = data
end
if type == "directory" then
tree[v] = enumerate(newPath)
end
end
return tree
end
self.files = enumerate(self.root)
return self
end
function AssetBundle.loadFile(path)
local filedata = love.filesystem.newFileData(path)
local ext = filedata:getExtension()
if (ext == "png") then
local img = love.graphics.newImage(path)
img:setFilter("nearest", "nearest")
return
img
elseif (ext == "glsl") then
return love.graphics.newShader(path);
elseif (ext == "lua") then
return require(string.gsub(path, ".lua", ""))
end
return nil
end
function AssetBundle.cutExtension(filename)
return string.match(filename, '(.+)%.(.+)')
end
return AssetBundle