diff --git a/bootloader.py b/bootloader.py index 94a7144..4dce86a 100644 --- a/bootloader.py +++ b/bootloader.py @@ -3,19 +3,33 @@ import json import os import sys import uuid +import imp + +def load_dll(dir, module): + name = 'punyverse.' + module + path = os.path.join(dir, 'punyverse', module + '.pyd') + if not os.path.exists(path): + path = os.path.join(dir, 'punyverse.%s.pyd' % module) + if not os.path.exists(path): + raise ImportError('No module named %s' % module) + return imp.load_dynamic(name, path) if __name__ == '__main__': try: dir = os.path.dirname(sys.executable) if sys.frozen == 'windows_exe': - sys.stdout = open(os.path.join(dir, 'punyverse.log'), 'a') + sys.stderr = open(os.path.join(dir, 'punyverse.log'), 'a') except AttributeError: sys.exit('This is only meant to be ran frozen.') sys.path.insert(0, dir) - import punyverse._model - import punyverse._glgeom + # Model indirectly depends on _glgeom to handle textures + load_dll(dir, '_glgeom') + + # Model path needs special handling + _model = load_dll(dir, '_model') + _model.model_base = os.path.join(dir, 'punyverse', 'assets', 'models') with open('punyverse\__main__.py', 'r') as code: exec(code) diff --git a/launcher.py b/launcher.py index 911e7ae..6c23e40 100644 --- a/launcher.py +++ b/launcher.py @@ -5,29 +5,15 @@ import sys import os import shutil -sys.argv.append('py2exe') - -data = [] +if len(sys.argv) < 2: + sys.argv.append('py2exe') parent = os.path.dirname(__file__) join = os.path.join -resources = [(r'punyverse\assets\textures', ['*.*']), - (r'punyverse\assets\textures\moons', ['*.*']), - (r'punyverse\assets\models\asteroids', ['*.obj', '*.mtl']), - (r'punyverse\assets\models\satellites', ['*.jpg', '*.obj', '*.mtl']), - (r'punyverse', ['*.py', '*.json', '*.pyx', '*.pxi', '*.pyd'])] - -for res in resources: - dir, patterns = res - for pattern in patterns: - for file in glob(join(dir, pattern)): - data.append((dir, [join(parent, file)])) - setup( console=[{'dest_base': 'punyverse_debug', 'script': 'bootloader.py'}, 'small_images.py'], windows=[{'dest_base': 'punyverse', 'script': 'bootloader.py'}], - data_files=data, options={'py2exe': { 'unbuffered': True, 'optimize': 2, 'excludes': [ @@ -36,6 +22,7 @@ setup( 'pyglet.media.drivers.alsa', 'win32wnet', 'netbios', 'pgmagick' ], + 'includes': ['punyverse._model', 'punyverse._glgeom'], 'dll_excludes': ['MPR.dll', 'w9xpopen.exe'], } } diff --git a/small_images.py b/small_images.py index a0620cc..aac098d 100644 --- a/small_images.py +++ b/small_images.py @@ -48,6 +48,9 @@ except ImportError: return image.size def scale(image, width, height): + original_width, original_height = image.size + if width * 3 < original_width and height * 3 < original_height: + image = image.resize((width * 2, height * 2)) return image.resize((width, height), Image.ANTIALIAS) def save(image, file):