0

Create RegionSets via the World object

This commit is contained in:
Andrew Chin
2012-01-21 19:04:21 -05:00
parent c63029a14d
commit 163dd66a38
5 changed files with 23 additions and 11 deletions

View File

@@ -277,16 +277,22 @@ dir but you forgot to put quotes around the directory, since it contains spaces.
if not os.path.exists(destdir): if not os.path.exists(destdir):
os.mkdir(destdir) os.mkdir(destdir)
# saves us from creating the same World object over and over again
worldcache = {}
for render_name in render_things: for render_name in render_things:
render = render_things[render_name] render = render_things[render_name]
logging.debug("Found the following render thing: %r", render) logging.debug("Found the following render thing: %r", render)
# XXX we now construct the regionset directly if (render['worldname'] not in worldcache):
#w = world.World(render['worldpath']) w = world.World(render['worldname'])
worldcache[render['worldname']] = w
else:
w = worldcache[render['worldname']]
# if no dimension has been specified, just use the first one
# TODO support the case where a different dimension is specified # TODO get the correct regionset based on render['dimension']
rset = world.RegionSet(render['worldname']) rset = w.get_regionset(0)
logging.debug("Using RegionSet %r", rset) logging.debug("Using RegionSet %r", rset)
# create our TileSet from this RegionSet # create our TileSet from this RegionSet

View File

@@ -263,10 +263,6 @@ class MultiWorldParser(object):
def validate(self): def validate(self):
# first validate the world dict
for worldname in self.world:
if not os.path.exists(self.world[worldname]):
raise Exception("%r does not exist for %s" % (self.world[worldname], worldname))
origs = dict() origs = dict()

View File

@@ -18,6 +18,7 @@ from settingsValidators import *
render = { render = {
"worldname": dict(required=True, validator=validateWorldPath, save_orig=True), "worldname": dict(required=True, validator=validateWorldPath, save_orig=True),
"dimension": dict(required=False, validator=validateDimension, default="default"),
"title": dict(required=True, validator=validateStr), "title": dict(required=True, validator=validateStr),
"rendermode": dict(required=False, validator=validateRenderMode), "rendermode": dict(required=False, validator=validateRenderMode),
"northdirection": dict(required=False, validator=validateNorthDirection), "northdirection": dict(required=False, validator=validateNorthDirection),

View File

@@ -9,7 +9,10 @@ def validateWorldPath(name, **kwargs):
world = kwargs.get('world', dict()) world = kwargs.get('world', dict())
if name not in world.keys(): if name not in world.keys():
raise ValidationException("bad world name") raise ValidationException("bad world name")
return os.path.abspath(world[name]) abs_path = os.path.abspath(world[name])
if not os.path.exists(os.path.join(abs_path, "level.dat")):
raise ValidationException("No level.dat file in %r. Check the path for world %r" % (abs_path, name))
return abs_path
def validateRenderMode(mode, **kwargs): def validateRenderMode(mode, **kwargs):
@@ -94,3 +97,9 @@ def validateInt(i, **kwargs):
def validateStr(s, **kwargs): def validateStr(s, **kwargs):
return str(s) return str(s)
def validateDimension(d, **kwargs):
if d in ["nether", "overworld", "end", "default"]:
return d
raise ValidationException("%r is not a valid dimension" % d)

View File

@@ -138,7 +138,7 @@ class World(object):
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
rset = RegionSet(self, root) rset = RegionSet(root)
if root == os.path.join(self.worlddir, "region"): if root == os.path.join(self.worlddir, "region"):
self.regionsets.insert(0, rset) self.regionsets.insert(0, rset)
else: else: