diff --git a/config.js b/config.js index 78dfd7d..3ec0a84 100644 --- a/config.js +++ b/config.js @@ -8,7 +8,7 @@ //center: [0,0,0], center: {spawn_coords}, cacheMinutes: 0, // Change this to have browsers automatically request new images every x minutes - bg_color: '#1A1A1A', + bg_color: '{bg_color}', // You can set this in settings.py debug: false }; diff --git a/configParser.py b/configParser.py index 88925d7..5b275f0 100644 --- a/configParser.py +++ b/configParser.py @@ -4,7 +4,8 @@ import os.path import logging class OptionsResults(object): - pass + def get(self, *args): + return self.__dict__.get(*args) class ConfigOptionParser(object): def __init__(self, **kwargs): diff --git a/googlemap.py b/googlemap.py index f6f271e..630101a 100644 --- a/googlemap.py +++ b/googlemap.py @@ -59,14 +59,15 @@ def mirror_dir(src, dst, entities=None): # if this stills throws an error, let it propagate up class MapGen(object): - def __init__(self, quadtrees, skipjs=False, web_assets_hook=None): + def __init__(self, quadtrees, configInfo): """Generates a Google Maps interface for the given list of quadtrees. All of the quadtrees must have the same destdir, image format, and world. Note:tiledir for each quadtree should be unique. By default the tiledir is determined by the rendermode""" - self.skipjs = skipjs - self.web_assets_hook = web_assets_hook + self.skipjs = configInfo.get('skipjs', None) + self.web_assets_hook = configInfo.get('web_assets_hook', None) + self.bg_color = configInfo.get('bg_color') if not len(quadtrees) > 0: raise ValueError("there must be at least one quadtree to work on") @@ -96,6 +97,8 @@ class MapGen(object): config = config.replace("{spawn_coords}", json.dumps(list(self.world.spawn))) + + config = config.replace("{bg_color}", self.bg_color) # create generated map type data, from given quadtrees maptypedata = map(lambda q: {'label' : q.rendermode.capitalize(), @@ -105,9 +108,10 @@ class MapGen(object): with open(os.path.join(self.destdir, "config.js"), 'w') as output: output.write(config) + bgcolor = (int(self.bg_color[1:3],16), int(self.bg_color[3:5],16), int(self.bg_color[5:7],16), 0) + blank = Image.new("RGBA", (1,1), bgcolor) # Write a blank image for quadtree in self.quadtrees: - blank = Image.new("RGBA", (1,1)) tileDir = os.path.join(self.destdir, quadtree.tiledir) if not os.path.exists(tileDir): os.mkdir(tileDir) blank.save(os.path.join(tileDir, "blank."+self.imgformat)) diff --git a/overviewer.py b/overviewer.py index 6e755bd..925d241 100755 --- a/overviewer.py +++ b/overviewer.py @@ -97,6 +97,7 @@ def main(): parser.add_option("--rendermodes", dest="rendermode", help="Specifies the render types, separated by commas. Use --list-rendermodes to list them all.", type="choice", choices=avail_rendermodes, required=True, default=avail_rendermodes[0], listify=True) parser.add_option("--list-rendermodes", dest="list_rendermodes", action="store_true", help="List available render modes and exit.", commandLineOnly=True) parser.add_option("--imgformat", dest="imgformat", help="The image output format to use. Currently supported: png(default), jpg. NOTE: png will always be used as the intermediate image format.", configFileOnly=True ) + parser.add_option("--bg_color", dest="bg_color", help="Configures the background color for the GoogleMap output. Specify in #RRGGBB format", configFileOnly=True, type="string", default="#1A1A1A") parser.add_option("--optimize-img", dest="optimizeimg", help="If using png, perform image file size optimizations on the output. Specify 1 for pngcrush, 2 for pngcrush+optipng+advdef. This may double (or more) render times, but will produce up to 30% smaller images. NOTE: requires corresponding programs in $PATH or %PATH%", configFileOnly=True) parser.add_option("--web-assets-hook", dest="web_assets_hook", help="If provided, run this function after the web assets have been copied, but before actual tile rendering begins. It should accept a QuadtreeGen object as its only argument.", action="store", metavar="SCRIPT", type="function", configFileOnly=True) parser.add_option("-q", "--quiet", dest="quiet", action="count", default=0, help="Print less output. You can specify this option multiple times.") @@ -214,10 +215,12 @@ def main(): logging.info("Rending the following tilesets: %s", ",".join(options.rendermode)) + bgcolor = (int(options.bg_color[1:3],16), int(options.bg_color[3:5],16), int(options.bg_color[5:7],16), 0) + # create the quadtrees # TODO chunklist q = [] - qtree_args = {'depth' : options.zoom, 'imgformat' : imgformat, 'optimizeimg' : optimizeimg} + qtree_args = {'depth' : options.zoom, 'imgformat' : imgformat, 'optimizeimg' : optimizeimg, 'bgcolor':bgcolor} for rendermode in options.rendermode: if rendermode == 'normal': qtree = quadtree.QuadtreeGen(w, destdir, rendermode=rendermode, tiledir='tiles', **qtree_args) @@ -229,7 +232,7 @@ def main(): r = rendernode.RenderNode(q) # write out the map and web assets - m = googlemap.MapGen(q, skipjs=options.skipjs, web_assets_hook=options.web_assets_hook) + m = googlemap.MapGen(q, configInfo=options) m.go(options.procs) # render the tiles! diff --git a/quadtree.py b/quadtree.py index 51cb46e..48d816f 100644 --- a/quadtree.py +++ b/quadtree.py @@ -48,7 +48,7 @@ def iterate_base4(d): return itertools.product(xrange(4), repeat=d) class QuadtreeGen(object): - def __init__(self, worldobj, destdir, depth=None, tiledir=None, imgformat=None, optimizeimg=None, rendermode="normal"): + def __init__(self, worldobj, destdir, bgcolor, depth=None, tiledir=None, imgformat=None, optimizeimg=None, rendermode="normal"): """Generates a quadtree from the world given into the given dest directory @@ -61,6 +61,7 @@ class QuadtreeGen(object): assert(imgformat) self.imgformat = imgformat self.optimizeimg = optimizeimg + self.bgcolor = bgcolor self.lighting = rendermode in ("lighting", "night", "spawn") self.night = rendermode in ("night", "spawn") @@ -320,7 +321,7 @@ class QuadtreeGen(object): #logging.debug("writing out innertile {0}".format(imgpath)) # Create the actual image now - img = Image.new("RGBA", (384, 384), (38,92,255,0)) + img = Image.new("RGBA", (384, 384), self.bgcolor) # we'll use paste (NOT alpha_over) for quadtree generation because # this is just straight image stitching, not alpha blending @@ -442,7 +443,7 @@ class QuadtreeGen(object): #logging.debug("writing out worldtile {0}".format(imgpath)) # Compile this image - tileimg = Image.new("RGBA", (width, height), (38,92,255,0)) + tileimg = Image.new("RGBA", (width, height), self.bgcolor) world = self.world rendermode = self.rendermode