local Map = require"common.map".Map local class = require"common.class" local worldgen = require"worldgen" local json = require"common.dkjson" local MapS = class.extend(Map) function MapS.obtain(self,cp) -- obtain chunk at chunkpos cp by any means necessary -- if already loaded, just return it -- if available on disk, load that then return it -- otherwise, generate a new chunk, load it, then return it. -- false is not used on serverside. yet. local ch = self:chunk(cp) if ch then return ch end local f = io.open(cp:filename(),"r") if f then local j = json.decode(f:read("a")) ch = Chunk:from_packet_data(j) f:close() else ch = worldgen.gen_chunk(cp) end self:add_chunk(ch) return ch end function MapS.save_chunk(self,cp) -- any attempt to save not-loaded chunks is silently ignored local ch = self:chunk(cp) if not ch then return end local f = io.open(cp:filename(),"w") f:write(ch:data_packet()) f:flush() f:close() end function MapS.save_and_unload(self,cp) self:save_chunk(cp) self:remove_chunk(cp) end return {MapS=MapS}