From 8cfa50087aeb4e266fef7d67f145f5106fe63101 Mon Sep 17 00:00:00 2001 From: Xon Date: Wed, 23 Mar 2011 17:22:57 +0800 Subject: [PATCH] Removed filting chunks from render_worldtile since _get_chunks_in_range can do it trivially before constructing the list --- quadtree.py | 19 ++++++------------- world.py | 6 +++--- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/quadtree.py b/quadtree.py index ce2dab1..c32b757 100644 --- a/quadtree.py +++ b/quadtree.py @@ -85,6 +85,9 @@ class QuadtreeGen(object): self.imgformat = imgformat self.optimizeimg = optimizeimg + self.lighting = rendermode in ("lighting", "night", "spawn") + self.night = rendermode in ("night", "spawn") + self.spawn = rendermode in ("spawn",) self.rendermode = rendermode # Make the destination dir @@ -410,8 +413,8 @@ class QuadtreeGen(object): # return (col, row, chunkx, chunky, regionpath) chunkx, chunky = unconvert_coords(col, row) #c = get_region_path(chunkx, chunky) - _, _, c = get_region((chunkx//32, chunky//32),(None,None,None)); - if c is not None: + _, _, c, mcr = get_region((chunkx//32, chunky//32),(None,None,None,None)); + if c is not None and mcr.chunkExists(chunkx,chunky): chunklist.append((col, row, chunkx, chunky, c)) return chunklist @@ -561,16 +564,7 @@ def render_worldtile(quadtree, chunks, colstart, colend, rowstart, rowend, path) # anyways just in case). "chunks" should include up to rowstart-16 imgpath = path + "." + quadtree.imgformat - world = quadtree.world - # first, remove chunks from `chunks` that don't actually exist in - # their region files - def chunk_exists(chunk): - _, _, chunkx, chunky, region = chunk - r = world.load_region(region) - return r.chunkExists(chunkx, chunky) - chunks = filter(chunk_exists, chunks) - #stat the file, we need to know if it exists or it's mtime try: tile_mtime = os.stat(imgpath)[stat.ST_MTIME]; @@ -602,12 +596,11 @@ def render_worldtile(quadtree, chunks, colstart, colend, rowstart, rowend, path) needs_rerender = False for col, row, chunkx, chunky, regionfile in chunks: # check region file mtime first. - regionMtime = world.get_region_mtime(regionfile) + region,regionMtime = world.get_region_mtime(regionfile) if regionMtime <= tile_mtime: continue # checking chunk mtime - region = world.load_region(regionfile) if region.get_chunk_timestamp(chunkx, chunky) > tile_mtime: needs_rerender = True break diff --git a/world.py b/world.py index bd4d9a6..077a17e 100644 --- a/world.py +++ b/world.py @@ -80,7 +80,7 @@ class World(object): mcr = nbt.MCRFileReader(regionfile) mcr.get_chunk_info() regions[regionfile] = (mcr,os.path.getmtime(regionfile)) - regionfiles[(x,y)] = (x,y,regionfile) + regionfiles[(x,y)] = (x,y,regionfile,mcr) self.regionfiles = regionfiles self.regions = regions logging.debug("Done scanning regions") @@ -116,7 +116,7 @@ class World(object): def get_region_path(self, chunkX, chunkY): """Returns the path to the region that contains chunk (chunkX, chunkY) """ - _, _, regionfile = self.regionfiles.get((chunkX//32, chunkY//32),(None,None,None)); + _, _, regionfile,_ = self.regionfiles.get((chunkX//32, chunkY//32),(None,None,None,None)); return regionfile def load_from_region(self,filename, x, y): @@ -135,7 +135,7 @@ class World(object): return self.regions[filename][0] def get_region_mtime(self,filename): - return self.regions[filename][1] + return self.regions[filename] def convert_coords(self, chunkx, chunky): """Takes a coordinate (chunkx, chunky) where chunkx and chunky are