Advertisement
SneakySquid

Images!

Nov 24th, 2018 (edited)
461
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.78 KB | None | 0 0
  1. local default_avatar = Material("vgui/avatar_default.vtf")
  2.  
  3. local cache_path = "assets/%s.png"
  4. local profile_url = "http://steamcommunity.com/profiles/%s/?xml=1"
  5.  
  6. local cached_avatars = {}
  7. local cached_materials = {}
  8.  
  9. local avatar_patterns = setmetatable({
  10.     [32] =  "<avatarIcon><!%[CDATA%[(.*)%]%]></avatarIcon>",
  11.     [64] =  "<avatarMedium><!%[CDATA%[(.*)%]%]></avatarMedium>",
  12.     [184] =  "<avatarFull><!%[CDATA%[(.*)%]%]></avatarFull>",
  13. }, {
  14.     __index = function(self, n)
  15.         n = tonumber(n)
  16.  
  17.         if (not n or n <= 32) then
  18.             return self[32]
  19.         elseif (n <= 64) then
  20.             return self[64]
  21.         else
  22.             return self[184]
  23.         end
  24.     end,
  25. })
  26.  
  27. local FetchImage, FetchAvatar do
  28.     function FetchImage(url, params)
  29.         local url_hash = util.SHA1(url)
  30.  
  31.         if (not cached_materials[url_hash]) then
  32.             local path = string.format(cache_path, url_hash)
  33.  
  34.             cached_materials[url_hash] = Material("data/" .. path, params)
  35.  
  36.             http.Fetch(url, function(data)
  37.                 file.CreateDir("assets")
  38.                 file.Write(path, data)
  39.  
  40.                 local new = Material("data/" .. path, params)
  41.                 cached_materials[url_hash]:SetTexture("$basetexture", new:GetName())
  42.             end)
  43.         end
  44.  
  45.         return cached_materials[url_hash]
  46.     end
  47.  
  48.     function FetchAvatar(id, size, params)
  49.         if (type(id) == "Player") then
  50.             id = id:SteamID64()
  51.         end
  52.  
  53.         if (id == "BOT") then
  54.             return default_avatar
  55.         end
  56.  
  57.         local size_id = string.format("%s_%i", id, size)
  58.  
  59.         if (not cached_avatars[size_id]) then
  60.             cached_avatars[size_id] = Material("Avatar " .. size_id, params)
  61.             cached_avatars[size_id]:SetTexture("$basetexture", default_avatar:GetName())
  62.  
  63.             http.Fetch(string.format(profile_url, id), function(data)
  64.                 local link = string.match(data, avatar_patterns[size])
  65.                 if (not link) then return end
  66.  
  67.                 local new = FetchImage(link, params)
  68.                 cached_avatars[size_id]:SetTexture("$basetexture", new:GetName())
  69.             end)
  70.         end
  71.  
  72.         return cached_avatars[size_id]
  73.     end
  74. end
  75.  
  76. local SetImage, GetImage, SetAvatar, GetAvatar do
  77.     function SetImage(...)
  78.         surface.SetMaterial(FetchImage(...))
  79.     end
  80.  
  81.     function GetImage(...)
  82.         return FetchImage(...)
  83.     end
  84.  
  85.     function SetAvatar(...)
  86.         surface.SetMaterial(FetchAvatar(...))
  87.     end
  88.  
  89.     function GetAvatar(...)
  90.         return FetchAvatar(...)
  91.     end
  92. end
  93.  
  94. local WebImage, AvatarImage do
  95.     function WebImage(url, x, y, w, h, col)
  96.         SetImage(url)
  97.  
  98.         surface.SetDrawColor(col or color_white)
  99.         surface.DrawTexturedRect(x, y, w, h)
  100.     end
  101.  
  102.     function AvatarImage(id, x, y, w, h, col)
  103.         SetAvatar(id)
  104.  
  105.         surface.SetDrawColor(col or color_white)
  106.         surface.DrawTexturedRect(x, y, w, h)
  107.     end
  108. end
  109.  
  110. return {
  111.     FetchImage = FetchImage,
  112.     FetchAvatar = FetchAvatar,
  113.  
  114.     SetImage = SetImage,
  115.     GetImage = GetImage,
  116.     SetAvatar = SetAvatar,
  117.     GetAvatar = GetAvatar,
  118.  
  119.     WebImage = WebImage,
  120.     AvatarImage = AvatarImage,
  121. }
  122.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement