from game.items.background import Background
from game.menu import Menu
from game.scene import Scene
+from game.scenes.scene_basketball import SceneBasketBall
+from game.scenes.scene_box import SceneBox
+from game.scenes.scene_domino_box_basketball import SceneDominoBoxBasketball
+from game.scenes.scene_domino_box import SceneDominoBox
+from game.scenes.scene_domino import SceneDomino
+from game.scenes.scene_teeter_domino_box_basketball import SceneTeeterDominoBoxBasketball
+from game.scenes.scene_teeter_tooter import SceneTeeterTooter
from lib.dictfile import DctFile
from lib.lib.p3d.p3d import LibP3d
from lib.engine.lang import LangMgr
class PmachinesApp:
+ scenes = [
+ SceneDomino,
+ SceneBox,
+ SceneDominoBox,
+ SceneBasketBall,
+ SceneDominoBoxBasketball,
+ SceneTeeterTooter,
+ SceneTeeterDominoBoxBasketball]
+
def __init__(self):
info('platform: %s' % platform)
info('exists main.py: %s' % exists('main.py'))
'assets/locale/')
self._fsm = MainFsm(self)
if args.screenshot:
- scene_classes = []
- for _file in glob('game/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)
+ cls = [cls for cls in self.scenes if cls.__name__ == args.screenshot][0]
+ scene = cls(BulletWorld(), None, True, False, lambda: None, self.scenes)
scene.screenshot()
scene.destroy()
exit()
self._menu_bg = Background()
self._menu = Menu(
self._fsm, self.lang_mgr, self._options, self._music,
- self._pipeline)
+ self._pipeline, self.scenes)
def on_home(self):
self._fsm.demand('Menu')
self.world, self.on_home,
self._options['development']['auto_close_instructions'],
self._options['development']['debug_items'],
- self.reload)
+ self.reload,
+ self.scenes)
def on_scene_exit(self):
self._unset_physics()
class Menu:
- def __init__(self, fsm, lang_mgr, opt_file, music, pipeline):
+ def __init__(self, fsm, lang_mgr, opt_file, music, pipeline, scenes):
self._fsm = fsm
self._lang_mgr = lang_mgr
self._opt_file = opt_file
self._music = music
self._pipeline = pipeline
+ self._scenes = scenes
self._cursor = MouseCursor(
'assets/images/buttons/arrowUpLeft.dds', (.04, 1, .04), (.5, .5, .5, 1),
(.01, .01))
**self._common_btn)]
def on_play(self):
- scenes = []
- for _file in glob('game/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:
- scenes += [member]
- scenes = sorted(scenes, key=lambda elm: elm.sorting)
self.destroy()
self._cursor = MouseCursor(
'assets/images/buttons/arrowUpLeft.dds', (.04, 1, .04), (.5, .5, .5, 1),
'frameSize': (-2.4, 2.4, -2.4, 2.4),
'frameColor': (1, 1, 1, .8),
'text_scale': .64}
- left = - (dx := .8) * (min(4, len(scenes)) - 1) / 2
- for i, cls in enumerate(scenes):
- top = .1 if len(scenes) < 5 else .6
+ left = - (dx := .8) * (min(4, len(self._scenes)) - 1) / 2
+ for i, cls in enumerate(self._scenes):
+ top = .1 if len(self._scenes) < 5 else .6
row = 0 if i < 4 else 1
self._widgets += [DirectButton(
text=cls.name(), pos=(left + dx * (i % 4), 1, top - dx * row),
class Scene(DirectObject):
- def __init__(self, world, exit_cb, auto_close_instr, dbg_items, reload_cb):
+ def __init__(self, world, exit_cb, auto_close_instr, dbg_items, reload_cb, scenes):
super().__init__()
self._world = world
self._exit_cb = exit_cb
self._dbg_items = dbg_items
self._reload_cb = reload_cb
+ self._scenes = scenes
self._set_camera()
self._cursor = MouseCursor(
'assets/images/buttons/arrowUpLeft.dds', (.04, 1, .04), (.5, .5, .5, 1),
rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
btn.set_transparency(True)
- scenes = []
- for _file in glob('game/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:
- scenes += [member]
- scenes = sorted(scenes, key=lambda elm: elm.sorting)
- enabled = scenes.index(self.__class__) < len(scenes) - 1
+ enabled = self._scenes.index(self.__class__) < len(self._scenes) - 1
if enabled:
- next_scene = scenes[scenes.index(self.__class__) + 1]
+ next_scene = self._scenes[self._scenes.index(self.__class__) + 1]
else:
next_scene = None
imgs = [self.__load_img_btn('right', col) for col in colors]
class SceneBasketBall(Scene):
- sorting = 3
-
@staticmethod
def name():
return _('Basket ball')
class SceneBox(Scene):
- sorting = 1
-
@staticmethod
def name():
return _('Box')
class SceneDomino(Scene):
- sorting = 0
-
@staticmethod
def name():
return _('Domino')
class SceneDominoBox(Scene):
- sorting = 2
-
@staticmethod
def name():
return _('Domino and box')
class SceneDominoBoxBasketball(Scene):
- sorting = 4
-
@staticmethod
def name():
return _('Domino, box and basket ball')
class SceneTeeterDominoBoxBasketball(Scene):
- sorting = 6
-
@staticmethod
def name():
return _('Teeter tooter, domino, box and basket ball')
class SceneTeeterTooter(Scene):
- sorting = 5
-
@staticmethod
def name():
return _('Teeter tooter')
system('python main.py --screenshot ' + cls.__name__)
-def bld_screenshots():
- scene_classes = []
- for _file in glob('game/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]
+def bld_screenshots(scene_classes):
with Pool() as p:
p.map(do_screenshot, scene_classes)
* todo
** refactoring
** build pipeline
+*** build: builder.sh
+**** linux
+**** windows
+**** appimage
+**** flatpak
+*** tests (unit tests and functional tests)
+*** management of error and success (upload builds, itch.io)
+*** crontab
** version 0.0.yymmdd
** do intro video with moviepy
** android build
from p3d_appimage import AppImageBuilder
from p3d_flatpak import FlatpakBuilder
import lib.engine.log # so logging's info/debug are logged
+from game.app import PmachinesApp
appname = longname = 'pmachines'
def run(self):
'''Builds the images.'''
- bld_screenshots()
+ bld_screenshots(PmachinesApp.scenes)
bld_images(
files(['jpg', 'png'], ['models', 'gltf', 'bam'], ['_png.png']), int(AbsCmd.cores))