0

Start of the new rewrite code flow. TileSet still needs work

This commit is contained in:
Andrew Chin
2012-01-01 16:12:10 -05:00
parent c17fb351f0
commit c2a1d8487a
6 changed files with 73 additions and 18 deletions

View File

@@ -127,6 +127,7 @@ else:
from optparse import OptionParser from optparse import OptionParser
from overviewer_core import optimizeimages, world, quadtree from overviewer_core import optimizeimages, world, quadtree
from overviewer_core import googlemap, rendernode from overviewer_core import googlemap, rendernode
from overviewer_core import configParser, tileset, assetmanager, dispatcher
# definitions of built-in custom modes # definitions of built-in custom modes
# usually because what used to be a mode became an option # usually because what used to be a mode became an option
@@ -383,6 +384,45 @@ dir but you forgot to put quotes around the directory, since it contains spaces.
logging.error(str(e)) logging.error(str(e))
doExit(code=1, consoleMsg=False) doExit(code=1, consoleMsg=False)
# look at our settings.py file
mw_parser = configParser.MultiWorldParser("settings.py")
mw_parser.parse()
mw_parser.validate()
# create our asset manager... ASSMAN
assetMrg = assetmanager.AssetManager(destdir)
render_things = mw_parser.get_render_things()
tilesets = []
for render_name in render_things:
render = render_things[render_name]
logging.debug("Found the following render thing: %r", render)
w = world.World(render['world_path'])
# if no dimension has been specified, just use the first one
# TODO support the case where a different dimension is specified
rset = w.get_regionset(2)
logging.debug("Using RegionSet %r", rset)
# create our TileSet from this RegionSet
tileset_dir = os.path.abspath(os.path.join(destdir, render_name))
print "tileset_dir: %r" % tileset_dir
if not os.path.exists(tileset_dir):
os.mkdir(tileset_dir)
tset = tileset.TileSet(rset, assetMrg, render, tileset_dir)
tilesets.append(tset)
# non-multiprocessing dispatcher
dispatch = dispatcher.Dispatcher()
def print_status(*args):
logging.info("Status callback: %r", args)
dispatch.render_all(tilesets, print_status)
sys.exit("early abort")
# First do world-level preprocessing. This scans the world hierarchy, reads # First do world-level preprocessing. This scans the world hierarchy, reads
# in the region files and caches chunk modified times, and determines the # in the region files and caches chunk modified times, and determines the
# chunk bounds (max and min in both dimensions) # chunk bounds (max and min in both dimensions)

View File

@@ -247,7 +247,16 @@ class MultiWorldParser(object):
# anything that's not 'render' or 'custom_rendermode' is a default # anything that's not 'render' or 'custom_rendermode' is a default
del glob['render'] del glob['render']
del glob['custom_rendermodes'] del glob['custom_rendermodes']
self.defaults = glob
# seed with the Overviewer defaults, then update with the user defaults
self.defaults = dict()
for key in settingsDefinition.render:
option = settingsDefinition.render[key]
if option.has_key("default"):
self.defaults[key] = option.get("default")
self.defaults.update(glob)
import pprint import pprint
pprint.pprint(glob, indent=2) pprint.pprint(glob, indent=2)

View File

@@ -14,6 +14,8 @@
from settingsValidators import * from settingsValidators import *
# note that all defaults go thought the validator
render = { render = {
"world_path": dict(required=True, validator=validateWorldPath), "world_path": dict(required=True, validator=validateWorldPath),
"rendermode": dict(required=False, validator=validateRenderMode), "rendermode": dict(required=False, validator=validateRenderMode),
@@ -21,11 +23,13 @@ render = {
"render-range": dict(required=False, validator=validateRenderRange), "render-range": dict(required=False, validator=validateRenderRange),
"force-render": dict(required=False, validator=bool), "force-render": dict(required=False, validator=bool),
"stochastic-render": dict(required=False, validator=validateStochastic), "stochastic-render": dict(required=False, validator=validateStochastic),
"imgformat": dict(required=False, validator=validateImgFormat), "imgformat": dict(required=False, validator=validateImgFormat, default="png"),
"imgquality": dict(required=False, validator=validateImgQuality), "imgquality": dict(required=False, validator=validateImgQuality),
"bg-color": dict(required=False, validator=validateBGColor), "bg-color": dict(required=False, validator=validateBGColor),
"optimize-img": dict(required=False, validator=validateOptImg), "optimize-img": dict(required=False, validator=validateOptImg),
"no-markers": dict(required=False, validator=bool), "no-markers": dict(required=False, validator=bool),
"texture-path": dict(required=False, validator=validateTexturePath), "texture-path": dict(required=False, validator=validateTexturePath),
"rendercheck": dict(required=False, validator=int, default=0),
"rerender_prob": dict(required=False, validator=float, default=0),
} }

View File

@@ -11,7 +11,7 @@ def validateWorldPath(path):
raise ValidationException("%r does not exist" % path) raise ValidationException("%r does not exist" % path)
if not os.path.isdir(path): if not os.path.isdir(path):
raise ValidationException("%r is not a directory" % path) raise ValidationException("%r is not a directory" % path)
except ValidationException, e except ValidationException, e:
# TODO assume this is the name of a world and try # TODO assume this is the name of a world and try
# to find it # to find it
raise e raise e
@@ -64,10 +64,8 @@ def validateBGColor(color):
def validateOptImg(opt): def validateOptImg(opt):
return bool(opt) return bool(opt)
def valiateTexturePath(path): def validateTexturePath(path):
# Expand user dir in directories strings # Expand user dir in directories strings
path = os.path.expanduser(path) path = os.path.expanduser(path)
# TODO assert this path exists? # TODO assert this path exists?
if options.web_assets_path:
options.web_assets_path = os.path.expanduser(options.web_assets_path)

View File

@@ -19,11 +19,13 @@ import os
import os.path import os.path
import shutil import shutil
import random import random
import functools
import time
from collections import namedtuple from collections import namedtuple
from PIL import Image from PIL import Image
from .util import iterate_base4, convert_coords from .util import iterate_base4, convert_coords, unconvert_coords
from .optimizeimages import optimize_image from .optimizeimages import optimize_image
""" """
@@ -276,8 +278,8 @@ class TileSet(object):
# Y has 4 times as many chunks as tiles, then halved since this is # Y has 4 times as many chunks as tiles, then halved since this is
# a radius # a radius
yradius = 2*2**p yradius = 2*2**p
if xradius >= bounds.maxcol and -xradius <= bounds.mincol and \ if xradius >= self.bounds.maxcol and -xradius <= self.bounds.mincol and \
yradius >= bounds.maxrow and -yradius <= bounds.minrow: yradius >= self.bounds.maxrow and -yradius <= self.bounds.minrow:
break break
if p >= 15: if p >= 15:
@@ -417,15 +419,15 @@ class TileSet(object):
logging.critical("Could not determine existing tile tree depth. Does it exist?") logging.critical("Could not determine existing tile tree depth. Does it exist?")
raise raise
if self.treedepth != cur_depth: if self.treedepth != curdepth:
if self.treedepth > curdepth: if self.treedepth > curdepth:
logging.warning("Your map seems to have expanded beyond its previous bounds.") logging.warning("Your map seems to have expanded beyond its previous bounds.")
logging.warning( "Doing some tile re-arrangements... just a sec...") logging.warning( "Doing some tile re-arrangements... just a sec...")
for _ in xrange(self.p-curdepth): for _ in xrange(self.treedepth-curdepth):
self._increase_depth() self._increase_depth()
elif self.p < curdepth: elif self.treedepth < curdepth:
logging.warning("Your map seems to have shrunk. Did you delete some chunks? No problem. Re-arranging tiles, just a sec...") logging.warning("Your map seems to have shrunk. Did you delete some chunks? No problem. Re-arranging tiles, just a sec...")
for _ in xrange(curdepth - self.p): for _ in xrange(curdepth - self.treedepth):
self._decrease_depth() self._decrease_depth()
def _increase_depth(self): def _increase_depth(self):
@@ -559,7 +561,7 @@ class TileSet(object):
max_chunk_mtime = chunkmtime max_chunk_mtime = chunkmtime
# Convert to diagonal coordinates # Convert to diagonal coordinates
chunkcol, chunkrow = util.convert_coords(chunkx, chunkz) chunkcol, chunkrow = convert_coords(chunkx, chunkz)
# find tile coordinates. Remember tiles are identified by the # find tile coordinates. Remember tiles are identified by the
# address of the chunk in their upper left corner. # address of the chunk in their upper left corner.
@@ -832,7 +834,6 @@ class TileSet(object):
chunklist = [] chunklist = []
unconvert_coords = util.unconvert_coords
get_region = self.regionobj.regionfiles.get get_region = self.regionobj.regionfiles.get
# Cached region object for consecutive iterations # Cached region object for consecutive iterations

View File

@@ -83,7 +83,6 @@ class World(object):
for root, dirs, files in os.walk(self.worlddir): for root, dirs, files in os.walk(self.worlddir):
# any .mcr files in this directory? # any .mcr files in this directory?
print "looking in", root
mcrs = filter(lambda x: x.endswith(".mcr"), files) mcrs = filter(lambda x: x.endswith(".mcr"), files)
if mcrs: if mcrs:
# construct a regionset object for this # construct a regionset object for this
@@ -123,7 +122,8 @@ class World(object):
def get_regionsets(self): def get_regionsets(self):
return self.regionsets return self.regionsets
def get_regionset(self, index):
return self.regionsets[index]
@@ -217,6 +217,9 @@ but may be several per invocation of the Overviewer in the case of multi-world.
self.empty_chunk = [None,None] self.empty_chunk = [None,None]
logging.debug("Done scanning regions") logging.debug("Done scanning regions")
def __repr__(self):
return "<RegionSet regiondir=%r>" % self.regiondir
def get_region_path(self, chunkX, chunkY): def get_region_path(self, chunkX, chunkY):
"""Returns the path to the region that contains chunk (chunkX, chunkY) """Returns the path to the region that contains chunk (chunkX, chunkY)
""" """