summaryrefslogtreecommitdiff
path: root/common/map.lua
diff options
context:
space:
mode:
Diffstat (limited to 'common/map.lua')
-rw-r--r--common/map.lua36
1 files changed, 23 insertions, 13 deletions
diff --git a/common/map.lua b/common/map.lua
index 67e2834..0437a12 100644
--- a/common/map.lua
+++ b/common/map.lua
@@ -1,15 +1,23 @@
-- a Map is a 2d array of chunks
-- it handles loading and unloading of chunks
--- each slot in the Map is either a Chunk object (if that chunk is loaded),
--- nil (if not loaded), or false (if 'loading'). on the client 'loading' means
--- the request for the chunk is currently in flight. on the server it might one day
--- mean that terrain generation for that chunk is currently in progress.
--- to test whether a chunk is loaded you can do if map:chunk(cp) then ... end
--- to test whether a chunk needs to be loaded you do if map:chunk(cp) == nil then ... end.
--- it will probably also do things relating to entities and multiblock things
-
--- note that the Map never creates any Chunks itself, which means it should be agnostic
--- to whatever actual Chunk class is being used (ChunkC or ChunkS or whatever)
+-- each slot in the Map is either a Chunk if that chunk is loaded,
+-- nil if not loaded, or false (if 'loading').
+-- on the client 'loading' means the request for the chunk is
+-- currently in flight.
+-- on the server it might one day mean that terrain generation
+-- for that chunk is currently in progress.
+--
+-- to test whether a chunk is loaded you can do
+-- if map:chunk(cp) then ... end
+-- to test whether a chunk needs to be loaded you do
+-- if map:chunk(cp) == nil then ... end
+--
+-- it will probably also do things relating to entities
+-- and multiblock things
+--
+-- note that the Map never creates any Chunks itself, which means
+-- it should be agnostic to whatever actual Chunk class is being used
+-- (ChunkC or ChunkS or whatever)
local class = require"common.class"
local coords = require"common.coords"
@@ -50,10 +58,12 @@ function Map.at(self,hpos)
-- returns tile at world coord hpos
-- if that tile's containing chunk isn't loaded, return nil
- -- not using the methods for doing this, in order to avoid lots of allocations
+ -- not using the methods for doing this, to avoid many allocations
-- inside the main drawing loop
- local cpu,cpv = math.floor(hpos.q/CHUNK_SIZE),math.floor(hpos.r/CHUNK_SIZE)
- local hoffq,hoffr = hpos.q-(cpu*CHUNK_SIZE), hpos.r-(cpv*CHUNK_SIZE)
+ local cpu = math.floor(hpos.q/CHUNK_SIZE)
+ local cpv = math.floor(hpos.r/CHUNK_SIZE)
+ local hoffq = hpos.q - (cpu*CHUNK_SIZE)
+ local hoffr = hpos.r - (cpv*CHUNK_SIZE)
local ch = self:_chunkuv(cpu,cpv)
if not ch then return nil end
return ch:_atqr(hoffq,hoffr)