import argparse
import simplepbr
import gltf
+from glob import glob
from importlib import import_module
from inspect import isclass
-from sys import platform, argv
+from sys import platform, argv, exit
from logging import info, debug
from os.path import exists
from os import makedirs
class PmachinesApp:
def __init__(self):
- self._configure()
- self.base = ShowBase()
info('platform: %s' % platform)
info('exists main.py: %s' % exists('main.py'))
args = self._parse_args()
+ self._configure(args)
+ self.base = ShowBase()
self._prepare_window(args)
self.updating = args.update
self.version = args.version
'pmachines',
'assets/locale/')
self._fsm = MainFsm(self)
- if self._options['development']['auto_start']:
+ if args.screenshot:
+ scene_classes = []
+ for _file in glob('pmachines/scenes/*.py'):
+ _fn = _file.replace('.py', '').replace('/', '.')
+ for member in import_module(_fn).__dict__.values():
+ if isclass(member) and issubclass(member, Scene) and \
+ member != Scene:
+ scene_classes += [member]
+ cls = [cls for cls in scene_classes if cls.__name__ == args.screenshot][0]
+ scene = cls(BulletWorld(), None, True, False, lambda: None)
+ scene.screenshot()
+ scene.destroy()
+ exit()
+ elif self._options['development']['auto_start']:
mod_name = 'pmachines.scenes.scene_' + self._options['development']['auto_start']
for member in import_module(mod_name).__dict__.values():
if isclass(member) and issubclass(member, Scene) and \
self._scene = cls(
self.world, self.on_home,
self._options['development']['auto_close_instructions'],
- self._options['development']['debug_items'])
+ self._options['development']['debug_items'],
+ self.reload)
def on_scene_exit(self):
self._unset_physics()
self._scene.destroy()
- def _configure(self):
+ def reload(self, cls):
+ self._fsm.demand('Scene', cls)
+
+ def _configure(self, args):
load_prc_file_data('', 'window-title pmachines')
load_prc_file_data('', 'framebuffer-srgb true')
load_prc_file_data('', 'sync-video true')
- load_prc_file_data('', 'threading-model Cull/Draw')
+ # load_prc_file_data('', 'threading-model Cull/Draw')
+ # it freezes when you go to the next scene
+ if args.screenshot:
+ load_prc_file_data('', 'window-type offscreen')
+ load_prc_file_data('', 'audio-library-name null')
def _parse_args(self):
parser = argparse.ArgumentParser()
parser.add_argument('--update', action='store_true')
parser.add_argument('--version', action='store_true')
parser.add_argument('--optfile')
+ parser.add_argument('--screenshot')
cmd_line = [arg for arg in iter(argv[1:]) if not arg.startswith('-psn_')]
args = parser.parse_args(cmd_line)
return args
props.set_size(res)
props.set_fullscreen(self._options['settings']['fullscreen'])
props.set_icon_filename('assets/icon/pmachines.ico')
- base.win.request_properties(props)
+ if not args.screenshot:
+ base.win.request_properties(props)
gltf.patch_loader(base.loader)
if self._options['development']['simplepbr']:
self._pipeline = simplepbr.init(
self.world.set_debug_node(self._debug_np.node())
def update(task):
dt = globalClock.get_dt()
- self.world.do_physics(dt)
+ self.world.do_physics(dt, 10, 1/180)
return task.cont
self._phys_tsk = taskMgr.add(update, 'update')