Web Image
Web-based image downloading, caching, and management system for the Lilia framework.
Overview
lia.webimage.download(n, u, cb, flags)
Purpose
Ensure a remote image is downloaded, validated, and made available as a `Material`.
When Called
During UI setup when an image asset must be cached before drawing panels.
Parameters
string n Logical storage name for the downloaded image.
string u optional Optional override URL; uses registered `stored` entry otherwise.
function cb optional Callback receiving `(material, fromCache, errStr)`.
string flags optional Optional material flags for creation (e.g., `"noclamp smooth"`).
Example Usage
-- Preload multiple HUD icons, then draw them when ready.
local function preloadIcons(list)
if #list == 0 then return end
local entry = table.remove(list, 1)
lia.webimage.download(entry.name, entry.url, function(mat)
if mat then
hook.Run("WebImageReady", entry.name, mat)
end
preloadIcons(list)
end, entry.flags)
end
hook.Add("InitPostEntity", "PreloadHUDImages", function()
preloadIcons({
{name = "hud/armor_icon.png", url = "https://assets.example.com/images/armor_icon.png", flags = "noclamp smooth"},
{name = "hud/health_icon.png", url = "https://assets.example.com/images/health_icon.png", flags = "noclamp smooth"}
})
end)
lia.webimage.register(n, u, cb, flags)
Purpose
Cache metadata for a URL and optionally download it immediately.
When Called
At startup when the gamemode wants to pre-register UI imagery.
Parameters
string n Internal key used to store and retrieve the image.
string u The HTTP/HTTPS source URL.
function cb optional Optional callback forwarded to `download`.
string flags optional Material creation flags stored for future lookups.
Example Usage
hook.Add("GamemodeLoaded", "RegisterIconLibrary", function()
lia.webimage.register("icons/police.png", "https://assets.example.com/ui/icons/police.png", function(mat)
if mat then lia.log.add(nil, "webimageCached", "icons/police.png") end
end, "noclamp smooth")
lia.webimage.register("icons/medic.png", "https://assets.example.com/ui/icons/medic.png", function(mat)
if not mat then return end
hook.Add("HUDPaint", "DrawMedicBadge", function()
surface.SetMaterial(mat)
surface.DrawTexturedRect(24, ScrH() - 96, 64, 64)
end)
end)
end)
lia.webimage.get(n, flags)
Purpose
Retrieve a previously cached `Material` for immediate drawing.
When Called
Within paint hooks or derma code that needs a cached texture without triggering a download.
Parameters
string n The registered name or derived key.
string flags optional Optional material flags used to rebuild the material when missing.
Returns
Material|nil The cached material or `nil` if it isn't downloaded yet.
Example Usage
-- Render cached image if available, otherwise queue download and retry.
local function drawIcon(name, x, y)
local mat = lia.webimage.get(name, "noclamp smooth")
if mat then
surface.SetMaterial(mat)
surface.DrawTexturedRect(x, y, 64, 64)
else
lia.webimage.download(name)
timer.Simple(0.2, function() drawIcon(name, x, y) end)
end
end
hook.Add("HUDPaint", "DrawPoliceIcon", function() drawIcon("icons/police.png", 32, 32) end)
lia.webimage.getStats()
Purpose
Expose download statistics to aid diagnostics or admin tooling.
When Called
When reporting the number of cached images or implementing cache health checks.
Returns
table `{ downloaded = number, stored = number, lastReset = timestamp }`.
Example Usage
hook.Add("PlayerSay", "PrintWebImageStats", function(ply, text)
if text ~= "!imagecache" then return end
local stats = lia.webimage.getStats()
ply:notifyLocalized("webImageStats", stats.downloaded, stats.stored, os.date("%c", stats.lastReset))
end)
lia.webimage.clearCache(skipReRegister)
Purpose
Evict all downloaded web images, resetting the material cache.
When Called
During configuration reloads or when manual cache management is required.
Parameters
boolean skipReRegister When true, previously registered URLs are not re-downloaded.
Example Usage
-- Drop and re-download web images after admins push new branding.
hook.Add("OnConfigReload", "RebuildWebImageCache", function()
lia.webimage.clearCache(false)
for name, data in pairs(lia.webimage.stored) do
lia.webimage.download(name, data.url, nil, data.flags)
end
end)