"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: pmachines/scene.py:89
+#: pmachines/scene.py:95
msgid "Scene: "
msgstr "Scena: "
-#: pmachines/scene.py:608
+#: pmachines/scene.py:614
msgid "You win!"
msgstr "Hai vinto!"
-#: pmachines/scene.py:681
+#: pmachines/scene.py:687
msgid "You have failed!"
msgstr "Hai perso!"
msgstr "Esci"
#: pmachines/gui/menu.py:121 pmachines/gui/menu.py:124
-#: pmachines/gui/menu.py:309
+#: pmachines/gui/menu.py:310
msgid "English"
msgstr "Inglese"
#: pmachines/gui/menu.py:121 pmachines/gui/menu.py:125
-#: pmachines/gui/menu.py:310
+#: pmachines/gui/menu.py:311
msgid "Italian"
msgstr "Italiano"
msgstr "Ombre"
#: pmachines/gui/menu.py:213 pmachines/gui/menu.py:238
-#: pmachines/gui/menu.py:275
+#: pmachines/gui/menu.py:276
msgid "Back"
msgstr "Indietro"
from pmachines.items.background import Background
from pmachines.gui.menu import Menu
from pmachines.scene import Scene
-from pmachines.scenes.scene_basketball import SceneBasketBall
-from pmachines.scenes.scene_box import SceneBox
-from pmachines.scenes.scene_domino_box_basketball import SceneDominoBoxBasketball
-from pmachines.scenes.scene_domino_box import SceneDominoBox
-from pmachines.scenes.scene_domino import SceneDomino
-from pmachines.scenes.scene_teeter_domino_box_basketball import SceneTeeterDominoBoxBasketball
-from pmachines.scenes.scene_teeter_tooter import SceneTeeterTooter
from pmachines.posmgr import PositionMgr
from pmachines.persistent import Persistent
from ya2.utils.dictfile import DctFile
class Pmachines:
scenes = [
- SceneDomino,
- SceneBox,
- SceneDominoBox,
- SceneBasketBall,
- SceneDominoBoxBasketball,
- SceneTeeterTooter,
- SceneTeeterDominoBoxBasketball]
+ 'domino',
+ 'box',
+ 'domino_box',
+ 'basketball',
+ 'domino_box_basketball',
+ 'teeter_tooter',
+ 'teeter_domino_box_basketball']
def __init__(self):
info('platform: %s' % platform)
def start(self):
if self._args.screenshot:
- cls = [cls for cls in self.scenes if cls.__name__ == self._args.screenshot][0]
- scene = cls(BulletWorld(), None, True, False, lambda: None, self.scenes, self._pos_mgr, None, None)
+ #cls = [cls for cls in self.scenes if cls.__name__ == self._args.screenshot][0]
+ scene = Scene(BulletWorld(), None, True, False, lambda: None, self.scenes, self._pos_mgr, None, None, None, self._args.screenshot)
scene.screenshot()
scene.destroy()
exit()
self._menu_bg.destroy()
self._menu.destroy()
- def on_scene_enter(self, cls):
+ def on_scene_enter(self, scene_name):
self._set_physics()
- self._scene = cls(
+ self._scene = Scene(
self.world, self.on_home,
self._options['development']['auto_close_instructions'],
self._options['development']['debug_items'],
self._pos_mgr,
self._args.functional_test or self._args.functional_ref,
self._options['development']['mouse_coords'],
- self.__persistent)
+ self.__persistent,
+ scene_name)
def on_scene_exit(self):
self._unset_physics()
'frameColor': (1, 1, 1, .8),
'text_scale': .64}
left = - (dx := .8) * (min(4, len(self._scenes)) - 1) / 2
- for i, cls in enumerate(self._scenes):
+ from pmachines.scene import Scene
+ for i, scene_name in enumerate(self._scenes):
top = .1 if len(self._scenes) < 5 else .6
row = 0 if i < 4 else 1
new_cmn = cmn.copy()
- if cls.is_done():
+ if Scene.is_done(scene_name):
new_cmn['frameColor'] = (1, 1, 1, .4)
new_cmn['text_fg'] = (.9, .9, .9, .4)
self._widgets += [DirectButton(
- text=cls.name(), pos=(left + dx * (i % 4), 1, top - dx * row),
- command=self.start, extraArgs=[cls], text_wordwrap=6,
- frameTexture='assets/images/scenes/%s.dds' % cls.__name__,
+ text=Scene.name(scene_name), pos=(left + dx * (i % 4), 1, top - dx * row),
+ command=self.start, extraArgs=[scene_name], text_wordwrap=6,
+ frameTexture='assets/images/scenes/%s.dds' % scene_name,
**new_cmn)]
- name = cls.__name__[5:].lower()
+ name = scene_name.lower()
self._pos_mgr.register(name, LibP3d.wdg_pos(self._widgets[-1]))
for j in range(4):
tnode = self._widgets[-1].component('text%s' % j).textNode
class Scene(DirectObject):
+ json_files = {}
scenes_done = []
- json = {}
- def __init__(self, world, exit_cb, auto_close_instr, dbg_items, reload_cb, scenes, pos_mgr, testing, mouse_coords, persistent):
+ def __init__(self, world, exit_cb, auto_close_instr, dbg_items, reload_cb, scenes, pos_mgr, testing, mouse_coords, persistent, json_name):
super().__init__()
self._world = world
self._exit_cb = exit_cb
self._start_evt_time = None
self._enforce_res = ''
self.__persistent = persistent
+ self.__json_name = json_name
+ self.json = {}
self.accept('enforce_res', self.enforce_res)
self._set_camera()
self._cursor = MouseCursor(
self._scene_tsk = taskMgr.add(self.on_frame, 'on_frame')
@classmethod
- def name(cls):
- if not cls.json:
- with open(cls.filename) as f:
- cls.json = loads(f.read())
- return _(cls.json['name'])
+ def filename(cls, scene_name):
+ return f'assets/scenes/{scene_name}.json'
@classmethod
- def version(cls):
- if not cls.json:
- with open(cls.filename) as f:
- cls.json = loads(f.read())
- return cls.json['version']
+ def name(cls, scene_name):
+ if not scene_name in cls.json_files:
+ with open(cls.filename(scene_name)) as f:
+ cls.json_files[scene_name] = loads(f.read())
+ return _(cls.json_files[scene_name]['name'])
@classmethod
- def is_done(cls):
- return bool([(name, version) for name, version in cls.scenes_done if cls.__name__ == name and cls.version() == version])
+ def version(cls, scene_name):
+ if not scene_name in cls.json_files:
+ with open(cls.filename(scene_name)) as f:
+ cls.json_files[scene_name] = loads(f.read())
+ return cls.json_files[scene_name]['version']
+
+ @classmethod
+ def is_done(cls, scene_name):
+ return bool([(name, version) for name, version in cls.scenes_done if scene_name == name and cls.version(scene_name) == version])
def _instr_txt(self):
- txt = _('Scene: ') + self.name() + '\n\n'
- for instruction_line in self.__class__.json['instructions']:
+ txt = _('Scene: ') + self.name(self.__json_name) + '\n\n'
+ for instruction_line in self.__class__.json_files[self.__json_name]['instructions']:
instruction_line = self.__process_json_escape(instruction_line)
txt += _(instruction_line)
return txt
def _set_items(self):
self.items = []
self._test_items = []
- if not self.__class__.json:
- with open(self.__class__.filename) as f:
- self.__class__.json = loads(f.read())
- for item in self.__class__.json['start_items']:
+ if not self.json:
+ with open(f'assets/scenes/{self.__json_name}.json') as f:
+ self.json = loads(f.read())
+ for item in self.json['start_items']:
args = {
'world': self._world,
'plane_node': self._mouse_plane_node,
if 'friction' in item:
args['friction'] = item['friction']
self.items += [self.__code2class(item['class'])(**args)]
- for item in self.__class__.json['fixed_items']:
+ for item in self.json['fixed_items']:
args = {
'world': self._world,
'plane_node': self._mouse_plane_node,
if 'friction' in item:
args['friction'] = item['friction']
self.items += [self.__code2class(item['class'])(**args)]
- for item in self.__class__.json['scene_items']:
+ for item in self.json['scene_items']:
args = {
'world': self._world,
'plane_node': self._mouse_plane_node,
enable_shadows=True)
base.graphicsEngine.renderFrame()
base.graphicsEngine.renderFrame()
- fname = self.__class__.__name__
+ fname = self.__json_name
if not exists('assets/images/scenes'):
makedirs('assets/images/scenes')
buffer.save_screenshot('assets/images/scenes/%s.png' % fname)
self._pos_mgr.register('close_instructions', LibP3d.wdg_pos(btn))
def _set_win(self):
- self.__persistent.save_scene(self.__class__.__name__, self.version())
+ self.__persistent.save_scene(self.__json_name, self.version(self.__json_name))
loader.load_sfx('assets/audio/sfx/success.ogg').play()
self._paused = True
self.__store_state()
clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
self._pos_mgr.register('replay', LibP3d.wdg_pos(btn))
btn.set_transparency(True)
- enabled = self._scenes.index(self.__class__) < len(self._scenes) - 1
+ enabled = self._scenes.index(self.__json_name) < len(self._scenes) - 1
if enabled:
- next_scene = self._scenes[self._scenes.index(self.__class__) + 1]
+ next_scene = self._scenes[self._scenes.index(self.__json_name) + 1]
else:
next_scene = None
imgs = [self.__load_img_btn('right', col) for col in colors]
taskMgr.doMethodLater(.01, frame_after, 'frame after')
def _define_test_items(self):
- if not self.__class__.json:
- with open(self.__class__.filename) as f:
- self.__class__.json = loads(f.read())
- for item in self.__class__.json['test_items']['pixel_space']:
+ if not self.__json_name in self.__class__.json_files:
+ with open(self.__class__.filename(self.__json_name)) as f:
+ self.__class__.json_files[self.__json_name] = loads(f.read())
+ for item in self.__class__.json_files[self.__json_name]['test_items']['pixel_space']:
self._pos_mgr.register(item['id'], tuple(item['position']))
- for item in self.__class__.json['test_items']['world_space']:
+ for item in self.__class__.json_files[self.__json_name]['test_items']['world_space']:
self._set_test_item(item['id'], tuple(item['position']))
def _set_test_item(self, name, pos):
+++ /dev/null
-from pmachines.scene import Scene
-
-
-class SceneBasketBall(Scene):
-
- filename = 'assets/scenes/basketball.json'
-
- # @staticmethod
- # def name():
- # return _('Basket ball')
-
- # def _set_items(self):
- # super()._set_items()
- #self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=5, count=2)]
- #self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=9)]
- #self.items += [Basketball(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=1)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-.56, 0, .21))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(1.67, 0, .21))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-.56, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(1.67, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-4.45, 0, -3.18), r=27, restitution=1)]
- #self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-5.45, 0, -3.18), restitution=1)]
- #self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(3.78, 0, -1.45))]
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=9)]
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.61, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.06, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(0.91, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(1.73, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(2.57, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 30))
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.61, 0, .73), r=37)]
- #self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.06, 0, .78))]
- #self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(0.91, 0, .78))]
- #self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(1.73, 0, .78))]
- #self.items[-1].set_strategy(UpStrategy(self.items[-1]._np, 30))
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(2.57, 0, .78))]
- #self.items[-1].set_strategy(UpStrategy(self.items[-1]._np, 30))
- #self.items += [Basketball(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- #self.items += [TeeterTooter(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
-
- # def _define_test_items(self):
- # self._pos_mgr.register('drag_start_0', (55, 50))
- # self._set_test_item('drag_stop_0', (-.42, 1.03))
- # self._set_test_item('drag_stop_1', (-4.19, 4.66))
-
- # def _instr_txt(self):
- # txt = _('Scene: ') + self.name() + '\n\n'
- # txt += _('Goal: you must hit every domino piece\n\n')
- # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- # 'keep \5mouse_r\5 pressed to rotate an item')
- # return txt
-
- # def _win_condition(self):
- # return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
+++ /dev/null
-from pmachines.scene import Scene
-
-
-class SceneBox(Scene):
-
- filename = 'assets/scenes/box.json'
-
- # @staticmethod
- # def name():
- # return _('Box')
-
- # def _set_items(self):
- # super()._set_items()
- # self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- #self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(.46, 0, -3.95))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(4.43, 0, -3.95))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-1.29, 0, .26), r=28.45)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(2.15, 0, -1.49), r=28.45)]
- # self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-1.55, 0, 1.23), friction=.4)]
- # self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(4.38, 0, -3.35))]
- # self.items[-1].set_strategy(HitStrategy(self.items[-2], self.items[-1].node, self.items[-1]._world))
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=2)]
- #self.items += [TargetDomino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-1.14, 0, -.04), tgt_degrees=60)]
- #self.items += [TargetDomino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.49, 0, -.04), tgt_degrees=60)]
- #self.items += [TargetDomino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(0.94, 0, -.04), tgt_degrees=60)]
- #self.items += [TargetDomino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(1.55, 0, -.04), tgt_degrees=60)]
- #self.items += [TargetDomino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(2.09, 0, -.04), tgt_degrees=88)]
- #self.items += [Basketball(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- #self.items += [TeeterTooter(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
-
- # def _define_test_items(self):
- # self._pos_mgr.register('drag_start_0', (65, 60))
- # self._set_test_item('drag_stop_0', (.42, -3.29))
- # self._set_test_item('drag_stop_1', (.42, -2.18))
- # self._set_test_item('drag_stop_2', (.35, -1.06))
-
- # def _instr_txt(self):
- # txt = _('Scene: ') + self.name() + '\n\n'
- # txt += _('Goal: the left box must hit the right box\n\n')
- # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- # 'keep \5mouse_r\5 pressed to rotate an item')
- # return txt
-
- # def _win_condition(self):
- # return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
+++ /dev/null
-from pmachines.scene import Scene
-
-
-class SceneDomino(Scene):
-
- filename = 'assets/scenes/domino.json'
-
- # @staticmethod
- # def name():
- # return _('Domino')
-
- # def _set_items(self):
- # super()._set_items()
- #self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- #self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- #self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-1.2, 0, -.6))]
- #self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(1.2, 0, -.6))]
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=2)]
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-1.14, 0, -.04))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 60))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.49, 0, -.04))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 60))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(0.94, 0, -.04))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 60))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(1.55, 0, -.04))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 60))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(2.09, 0, -.04))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 88))
- #self.items += [Basketball(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- #self.items += [TeeterTooter(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
-
- # def _define_test_items(self):
- # self._pos_mgr.register('drag_start_0', (35, 60))
- # self._set_test_item('drag_stop_0', (-1.82, .06))
- # self._set_test_item('drag_stop_1', (.49, .06))
- # self._set_test_item('drag_stop_2', (-1.54, .06))
- # self._set_test_item('drag_start_1', (-1.54, .4))
- # self._set_test_item('drag_stop_3', (-1.05, .4))
-
- # def _instr_txt(self):
- # txt = _('Scene: ') + self.name() + '\n\n'
- # txt += _('Goal: every domino piece must fall\n\n')
- # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- # 'keep \5mouse_r\5 pressed to rotate an item')
- # return txt
-
- # def _win_condition(self):
- # return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
+++ /dev/null
-from pmachines.scene import Scene
-
-
-class SceneDominoBox(Scene):
-
- filename = 'assets/scenes/domino_box.json'
-
- # @staticmethod
- # def name():
- # return _('Domino and box')
-
- # def _set_items(self):
- # super()._set_items()
- #self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=5, count=2)]
- #self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=9)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-.56, 0, .21))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(1.67, 0, .21))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-.56, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(1.67, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(3.78, 0, -1.45))]
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=9)]
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.61, 0, -.94), r=37)]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.06, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(0.91, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(1.73, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(2.57, 0, -.89))]
- # self.items[-1].set_strategy(UpStrategy(self.items[-1]._np, 30))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.61, 0, .73), r=37)]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.06, 0, .78))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(0.91, 0, .78))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(1.73, 0, .78))]
- # self.items[-1].set_strategy(UpStrategy(self.items[-1]._np, 30))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(2.57, 0, .78))]
- # self.items[-1].set_strategy(UpStrategy(self.items[-1]._np, 30))
- #self.items += [Basketball(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- #self.items += [TeeterTooter(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
-
- # def _define_test_items(self):
- # self._pos_mgr.register('drag_start_0', (65, 60))
- # self._set_test_item('drag_stop_0', (3.21, -.78))
- # self._set_test_item('drag_stop_1', (3.21, .33))
- # self._set_test_item('drag_stop_2', (2.16, 1.87))
-
- # def _instr_txt(self):
- # txt = _('Scene: ') + self.name() + '\n\n'
- # txt += _('Goal: only the last piece of each row must be up\n\n')
- # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- # 'keep \5mouse_r\5 pressed to rotate an item')
- # return txt
-
- # def _win_condition(self):
- # return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
+++ /dev/null
-from pmachines.scene import Scene
-
-
-class SceneDominoBoxBasketball(Scene):
-
- filename = 'assets/scenes/domino_box_basketball.json'
-
- # @staticmethod
- # def name():
- # return _('Domino, box and basket ball')
-
- # def _set_items(self):
- # super()._set_items()
- #self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=1, mass=5)]
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=1)]
- # self.items += [Basketball(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-.3, 1, 2.5))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-.56, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(1.67, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(3.78, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(1.48, 0, .38), r=-90)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(2.62, 0, .05))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(4.88, 0, .05))]
- #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=9)]
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(1.68, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(2.35, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(3.08, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(3.78, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(4.53, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- #self.items += [Basketball(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- #self.items += [TeeterTooter(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
-
- # def _define_test_items(self):
- # self._pos_mgr.register('drag_start_0', (65, 60))
- # self._pos_mgr.register('drag_start_1', (30, 60))
- # self._set_test_item('drag_stop_0', (-1.4, -.78))
- # self._set_test_item('drag_stop_1', (-1.26, .2))
- # self._set_test_item('drag_stop_2', (-.28, -.78))
- # self._set_test_item('drag_start_2', (-.28, -.57))
- # self._set_test_item('drag_stop_3', (-.77, -.57))
- # self._set_test_item('drag_start_3', (-.28, -.85))
- # self._set_test_item('drag_stop_4', (-.42, -.85))
-
- # def _instr_txt(self):
- # txt = _('Scene: ') + self.name() + '\n\n'
- # txt += _('Goal: every domino piece must be hit\n\n')
- # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- # 'keep \5mouse_r\5 pressed to rotate an item')
- # return txt
-
- # def _win_condition(self):
- # return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
+++ /dev/null
-from pmachines.scene import Scene
-
-
-class SceneTeeterDominoBoxBasketball(Scene):
-
- filename = 'assets/scenes/teeter_domino_box_basketball.json'
-
- # @staticmethod
- # def name():
- # return _('Teeter tooter, domino, box and basket ball')
-
- # def _set_items(self):
- # super()._set_items()
- #self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=3, count=2, friction=1)]
- # self.items += [Basketball(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(.98, 1, 1.02))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-6.24, 0, -1.45))]
- # self.items += [TeeterTooter(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-6.24, 0, -1.20))]
- #self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=1, r=24.60, friction=1, pos=(-6.15, 0, -.93))]
- # self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=.3, friction=1, model_scale=.5, pos=(-5.38, 0, -.93), r=24.60)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(5.37, 0, -.78))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(7.48, 0, -.78))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(4.74, 0, -1.95))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(6.88, 0, -1.95))]
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=1, pos=(4.83, 0, -1.39))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=1, pos=(5.67, 0, -1.39))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=1, pos=(6.59, 0, -1.39))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(.53, 0, -1.95), restitution=.95)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(2.63, 0, -1.95), restitution=.95)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-3.65, 0, 1.05), r=28, friction=0)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-1.27, 0, 1.72), restitution=.95)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(.88, 0, 1.72), restitution=.95)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-1.67, 0, .55), restitution=.95)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(.52, 0, .55), restitution=.95)]
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=.5, pos=(-1.73, 0, 1.11))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=.5, pos=(-.97, 0, 1.11))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=.5, pos=(-.1, 0, 1.11))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
-
- # def _define_test_items(self):
- # self._pos_mgr.register('drag_start_0', (60, 60))
- # self._set_test_item('drag_stop_0', (-7.33, 4.24))
- # self._set_test_item('drag_stop_1', (-7.12, 4.24))
- # self._set_test_item('drag_start_1', (-6.77, 4.66))
- # self._set_test_item('drag_stop_2', (-6.77, 4.24))
-
- # def _instr_txt(self):
- # txt = _('Scene: ') + self.name() + '\n\n'
- # txt += _('Goal: every domino piece must be hit\n\n')
- # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- # 'keep \5mouse_r\5 pressed to rotate an item')
- # return txt
-
- # def _win_condition(self):
- # return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
+++ /dev/null
-from pmachines.scene import Scene
-
-
-class SceneTeeterTooter(Scene):
-
- filename = 'assets/scenes/teeter_tooter.json'
-
- # @staticmethod
- # def name():
- # return _('Teeter tooter')
-
- # def _set_items(self):
- # super()._set_items()
- #self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=3, count=1, friction=1)]
- #self.items += [TeeterTooter(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=5, count=2)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-2.76, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-.56, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(2.27, 0, -.28))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(4.38, 0, -.28))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(1.67, 0, -1.45))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(3.78, 0, -1.45))]
- # self.items += [TeeterTooter(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-2.74, 0, -1.20))]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=1, r=-25.30, friction=1, pos=(-2.78, 0, -.93))]
- # self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=.2, friction=1, model_scale=.5, pos=(-3.61, 0, -.99), r=-25.30)]
- # self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-.25, 0, -.57), r=52)]
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(1.73, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(2.57, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- # self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(3.50, 0, -.89))]
- # self.items[-1].set_strategy(DownStrategy(self.items[-1]._np, 35))
- #self.items += [Basketball(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
- #self.items += [TeeterTooter(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=3)]
-
- # def _define_test_items(self):
- # self._pos_mgr.register('drag_start_0', (60, 60))
- # self._set_test_item('drag_stop_0', (-2.65, 1.18))
- # self._set_test_item('drag_stop_1', (-2.65, 3.27))
- # self._set_test_item('drag_start_1', (-2.3, 3.75))
- # self._set_test_item('drag_stop_2', (-2.5, 3.66))
-
- # def _instr_txt(self):
- # txt = _('Scene: ') + self.name() + '\n\n'
- # txt += _('Goal: you must hit every domino piece\n\n')
- # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- # 'keep \5mouse_r\5 pressed to rotate an item')
- # return txt
-
- # def _win_condition(self):
- # return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
#+TAGS: bug(b) calendar(c) waiting(w)
* DOING editor
-- [ ] remove scene files (.py)
- [ ] edit level (button)
- [ ] global level editor (title, description)
- [ ] version is the hash of the json file
from multiprocessing import Pool
-def do_screenshot(cls):
- system('python main.py --screenshot ' + cls.__name__)
+def do_screenshot(scene_name):
+ system('python main.py --screenshot ' + scene_name)
def build_screenshots(scene_classes):