0
This repository has been archived on 2025-04-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Minecraft-Overviewer/gmap.py
Andrew Brown c8c16d5fd3 big commits to a bunch of stuff. See expanded message
Added an option to enter your own zoom level. Use -z to set the map at a
particular zoom level. Zoom levels define the width and height in tiles
of the highest zoom level, each new zoom level is twice as wide and
tall. (z=6 -> 2^6 tiles wide and tall)

Implemented tile re-arrangement on map expansion. Now most tiles will
get re-used if your map needs another zoom level! No longer does it need
to re-generate everything.

No longer creates empty directories for tiles, only creates directories
if needed.

Fixed some minor off-by-one logic (and the code that canceled it out to
make it work)
2010-09-18 00:14:02 -04:00

72 lines
2.5 KiB
Python
Executable File

#!/usr/bin/python
import os
import sys
import os.path
from optparse import OptionParser
import re
import multiprocessing
import world
import quadtree
helptext = """
%prog [-p PROCS] [-d] <Path to World> <tiles dest dir>
"""
def main():
try:
cpus = multiprocessing.cpu_count()
except NotImplementedError:
cpus = 1
parser = OptionParser(usage=helptext)
parser.add_option("-p", "--processes", dest="procs", help="How many chunks to render in parallel. A good number for this is the number of cores in your computer. Default %s" % cpus, default=cpus, action="store", type="int")
parser.add_option("-z", "--zoom", dest="zoom", help="Sets the zoom level manually instead of calculating it. This can be useful if you have outlier chunks that make your world too big. This value will make the highest zoom level contain (2**ZOOM)^2 tiles", action="store", type="int")
parser.add_option("-d", "--delete", dest="delete", help="Clear all caches. Next time you render your world, it will have to start completely over again. This is probably not a good idea for large worlds. Use this if you change texture packs and want to re-render everything.", action="store_true")
options, args = parser.parse_args()
if len(args) < 1:
print "You need to give me your world directory"
parser.print_help()
sys.exit(1)
worlddir = args[0]
if len(args) != 2:
parser.error("Where do you want to save the tiles?")
destdir = args[1]
if options.delete:
return delete_all(worlddir, destdir)
# First generate the world's chunk images
w = world.WorldRenderer(worlddir)
w.go(options.procs)
# Now generate the tiles
q = quadtree.QuadtreeGen(w, destdir, depth=options.zoom)
q.go(options.procs)
def delete_all(worlddir, tiledir):
# First delete all images in the world dir
imgre = r"img\.[^.]+\.[^.]+\.nocave\.\w+\.png$"
matcher = re.compile(imgre)
for dirpath, dirnames, filenames in os.walk(worlddir):
for f in filenames:
if matcher.match(f):
filepath = os.path.join(dirpath, f)
print "Deleting {0}".format(filepath)
os.unlink(filepath)
# Now delete all /hash/ files in the tile dir.
for dirpath, dirnames, filenames in os.walk(tiledir):
for f in filenames:
if f.endswith(".hash"):
filepath = os.path.join(dirpath, f)
print "Deleting {0}".format(filepath)
os.unlink(filepath)
if __name__ == "__main__":
main()