local class = require"common.class" local Chunk = require"common.chunk".Chunk local json = require"common.dkjson" local db = require'db' local ChunkS = class.extend(Chunk) function ChunkS.make(cls,...) local self = Chunk.make(cls,...) self.dirty = false return self end function ChunkS.apply_migrations(self) -- if tile format has changed and format in db isn't up to date any more -- then perform updates here for i,t in ipairs(self.tiles) do if t == false then self.tiles[i] = 0 elseif t == true then self.tiles[i] = 9 end end end function ChunkS.load_from_disk(cls,cp) -- tries to load from database. returns nil if not there. local txn,dbi = db.get_db('chunks') local d = dbi[tostring(cp)] txn:commit() if not d then return nil end local j = json.decode(d) local self = cls:from_packet_data(j) self:apply_migrations() return self end function ChunkS.save_if_dirty(self,txn) if self.dirty then print("saving chunk",self.cp) local dbi = txn:open'chunks' dbi[tostring(self.cp)] = self:data_packet() self.dirty = false end end function ChunkS.set_at(self,...) Chunk.set_at(self,...) self.dirty = true end return {ChunkS=ChunkS}