loader.lua 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. data = {}
  2. data.load = function()
  3. -- Media
  4. local function lookup(ext, fn)
  5. local function halp(s, k)
  6. local base = s._path .. '/' .. k
  7. if love.filesystem.exists(base .. ext) then
  8. s[k] = fn(base .. ext)
  9. elseif love.filesystem.isDirectory(base) then
  10. local t = {}
  11. t._path = base
  12. setmetatable(t, {__index = halp})
  13. s[k] = t
  14. end
  15. return rawget(s, k)
  16. end
  17. return halp
  18. end
  19. data.media = {}
  20. data.media.graphics = setmetatable({_path = 'data/media/graphics'}, {__index = lookup('.png', love.graphics.newImage)})
  21. data.media.shaders = setmetatable({_path = 'data/media/shaders'}, {__index = lookup('.shader', love.graphics.newShader)})
  22. data.media.sounds = setmetatable({_path = 'data/media/sounds'}, {__index = lookup('.ogg', love.audio.newSource)})
  23. -- Data
  24. local function load(dir, type, fn)
  25. data[type] = {}
  26. local id = 1
  27. for _, file in ipairs(love.filesystem.getDirectoryItems(dir)) do
  28. if file:match('%.lua$') and not file:match('^%.') then
  29. local obj = love.filesystem.load(dir .. '/' .. file)()
  30. obj = f.exe(fn, obj) or obj
  31. obj.id = id
  32. data[type][id] = obj
  33. data[type][obj.code] = obj
  34. id = id + 1
  35. end
  36. end
  37. end
  38. load('data/weapon', 'weapon')
  39. load('data/skill', 'skill')
  40. load('data/buff', 'buff')
  41. load('data/spell', 'spell')
  42. load('data/class', 'class')
  43. load('data/particle', 'particle')
  44. load('data/prop', 'prop')
  45. load('data/effect', 'effect')
  46. load('data/weather', 'weather')
  47. end