Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- GAME.EZF = {} --easy file loader/saver
- local ezf = GAME.EZF
- if not love.filesystem.exists( "data" ) then
- local a,b = love.filesystem.createDirectory( "data" )
- end
- --[[if not love.filesystem.exists( "save" ) then
- local a,b = love.filesystem.createDirectory( "save" )
- end]]
- local ezf_data = {}
- local changed = {}
- local whitelist = {
- ["number"] = true,
- ["string"] = true,
- ["boolean"] = true,
- }
- --tbl:base tbl2:merge-into
- local function restricted_merge(tbl,tbl2)
- for k,v in pairs(tbl) do
- local tk,tv = type(k), type(v)
- if whitelist[tk] then
- if whitelist[tv] then
- tbl2[k] = v
- elseif tv == "table" then
- if tbl2[k] and type(tbl2[k]) == "table" then
- restricted_merge(tbl,tbl2[k])
- else
- local tbl2_2 = {}
- tbl2[k] = tbl2_2
- restricted_merge(tbl,tbl2_2)
- end
- end
- end
- end
- end
- function ezf:CreateNewData(nm,tbl)
- local newdata = tbl and restricted_merge(tbl,{}) or {}
- ezf_data[nm] = newdata
- changed[nm] = false
- return newdata
- end
- function ezf:ChangeData(nm,tbl)
- if not ezf_data[nm] then return end
- restricted_merge(tbl,ezf_data[nm])
- end
- function ezf:SaveData(nm)
- if not ezf_data[nm] then return end
- print("Saving: data/"..nm..".txt")
- love.filesystem.write( "data/"..nm..".txt", serp.dump(ezf_data[nm]) )
- end
- function ezf:LoadDataInto(nm,itbl,func)
- print("Loading: data/"..nm..".txt")
- if love.filesystem.exists( "data/"..nm..".txt" ) then
- local conts = love.filesystem.read( "data/"..nm..".txt" )
- local ok, ltbl = serp.load(conts)
- restricted_merge(ltbl, itbl)
- end
- ezf_data[nm] = itbl
- changed[nm] = false
- if func then --callback function on table change
- setmetatable(itbl,{__newindex = function(self,k,v) rawset(itbl,k,v) func(itbl,k,v) end})
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement