From 22d767b3e10959cd1545b5b1986bfbc44ff41491 Mon Sep 17 00:00:00 2001 From: ubq323 Date: Sun, 8 Jun 2025 13:21:15 +0100 Subject: lots of various things --- common.lua | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'common.lua') diff --git a/common.lua b/common.lua index 7e67daf..bd86c6e 100644 --- a/common.lua +++ b/common.lua @@ -1,17 +1,22 @@ local class = require 'r.class' +local pprint = require 'pprint' +local Pos = require 'r.pos' local SIZE = 64 local ChunkMap = class() function ChunkMap.make(cls) return setmetatable({d={}},cls) end -local function key(pos) return pos.x .. ':' .. pos.y end -function ChunkMap.add(self,pos,val) self.d[key(pos)] = val end -function ChunkMap.remove(self,pos) self:add(pos,nil) end -function ChunkMap.get(self,pos) return self.d[key(pos)] end +function ChunkMap.add(self,pos,val) self.d[pos:key()] = val end +function ChunkMap.remove(self,pos) self.d[pos:key()] = nil end +function ChunkMap.get(self,pos) return self.d[pos:key()] end local function idx(pos) return 1+pos.x*SIZE+pos.y end function ChunkMap.tile(self,pos) - local cp = (pos/SIZE):floor() local ix = idx(pos-cp*SIZE) - return self:get(cp)[ix] end + local cp,mod = pos:divmod(SIZE) local ch = self:get(cp) + return ch and ch.d[idx(mod)] end +function ChunkMap.set_tile(self,pos,val) + local cp,mod = pos:divmod(SIZE) local ch = self:get(cp) + if ch then ch.d[idx(mod)] = val end end return { ChunkMap = ChunkMap, + SIZE = SIZE, } -- cgit v1.2.3