summaryrefslogtreecommitdiff
path: root/common.lua
diff options
context:
space:
mode:
Diffstat (limited to 'common.lua')
-rw-r--r--common.lua17
1 files changed, 11 insertions, 6 deletions
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,
}