From: Flavio Calva Date: Wed, 16 Mar 2022 18:16:40 +0000 (+0100) Subject: refactoring for building X-Git-Url: http://git.ya2.it/?p=pmachines.git;a=commitdiff_plain;h=6168d0c2c2691ba892811b60783ec3aec2a38040 refactoring for building --- diff --git a/assets/images/buttons/move.png b/assets/images/buttons/move.png index 4795f1b..9949ac2 100644 Binary files a/assets/images/buttons/move.png and b/assets/images/buttons/move.png differ diff --git a/assets/images/buttons/rotate.png b/assets/images/buttons/rotate.png index 11b093f..a0763b6 100644 Binary files a/assets/images/buttons/rotate.png and b/assets/images/buttons/rotate.png differ diff --git a/game/app.py b/game/app.py index 8b3876f..1437e0c 100755 --- a/game/app.py +++ b/game/app.py @@ -17,6 +17,13 @@ from game.music import MusicMgr 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 @@ -43,6 +50,15 @@ class MainFsm(FSM): 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')) @@ -60,15 +76,8 @@ class PmachinesApp: '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() @@ -86,7 +95,7 @@ class PmachinesApp: 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') @@ -101,7 +110,8 @@ class PmachinesApp: 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() diff --git a/game/menu.py b/game/menu.py index ad6619f..4c64272 100644 --- a/game/menu.py +++ b/game/menu.py @@ -18,12 +18,13 @@ from panda3d.bullet import BulletWorld 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)) @@ -169,14 +170,6 @@ class Menu: **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), @@ -186,9 +179,9 @@ class Menu: '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), diff --git a/game/scene.py b/game/scene.py index b44506a..b12ff04 100644 --- a/game/scene.py +++ b/game/scene.py @@ -19,12 +19,13 @@ from lib.lib.p3d.gfx import P3dGfxMgr 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), @@ -469,17 +470,9 @@ class Scene(DirectObject): 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] diff --git a/game/scenes/scene_basketball.py b/game/scenes/scene_basketball.py index 1118c29..d57adf7 100644 --- a/game/scenes/scene_basketball.py +++ b/game/scenes/scene_basketball.py @@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter class SceneBasketBall(Scene): - sorting = 3 - @staticmethod def name(): return _('Basket ball') diff --git a/game/scenes/scene_box.py b/game/scenes/scene_box.py index 6bd92a1..c0eee15 100644 --- a/game/scenes/scene_box.py +++ b/game/scenes/scene_box.py @@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter class SceneBox(Scene): - sorting = 1 - @staticmethod def name(): return _('Box') diff --git a/game/scenes/scene_domino.py b/game/scenes/scene_domino.py index 3481881..d3edad2 100644 --- a/game/scenes/scene_domino.py +++ b/game/scenes/scene_domino.py @@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter class SceneDomino(Scene): - sorting = 0 - @staticmethod def name(): return _('Domino') diff --git a/game/scenes/scene_domino_box.py b/game/scenes/scene_domino_box.py index db8753d..629047c 100644 --- a/game/scenes/scene_domino_box.py +++ b/game/scenes/scene_domino_box.py @@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter class SceneDominoBox(Scene): - sorting = 2 - @staticmethod def name(): return _('Domino and box') diff --git a/game/scenes/scene_domino_box_basketball.py b/game/scenes/scene_domino_box_basketball.py index 0807029..84b5129 100644 --- a/game/scenes/scene_domino_box_basketball.py +++ b/game/scenes/scene_domino_box_basketball.py @@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter class SceneDominoBoxBasketball(Scene): - sorting = 4 - @staticmethod def name(): return _('Domino, box and basket ball') diff --git a/game/scenes/scene_teeter_domino_box_basketball.py b/game/scenes/scene_teeter_domino_box_basketball.py index 7a799bb..b433106 100644 --- a/game/scenes/scene_teeter_domino_box_basketball.py +++ b/game/scenes/scene_teeter_domino_box_basketball.py @@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter class SceneTeeterDominoBoxBasketball(Scene): - sorting = 6 - @staticmethod def name(): return _('Teeter tooter, domino, box and basket ball') diff --git a/game/scenes/scene_teeter_tooter.py b/game/scenes/scene_teeter_tooter.py index b66cf8e..51c5eb3 100644 --- a/game/scenes/scene_teeter_tooter.py +++ b/game/scenes/scene_teeter_tooter.py @@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter class SceneTeeterTooter(Scene): - sorting = 5 - @staticmethod def name(): return _('Teeter tooter') diff --git a/lib/build/screenshots.py b/lib/build/screenshots.py index bb9921e..0eb1261 100644 --- a/lib/build/screenshots.py +++ b/lib/build/screenshots.py @@ -10,13 +10,6 @@ def do_screenshot(cls): 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) diff --git a/prj.org b/prj.org index 2146fde..2cc2eaa 100644 --- a/prj.org +++ b/prj.org @@ -2,6 +2,14 @@ * 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 diff --git a/setup.py b/setup.py index bde58b6..1e2ecf8 100644 --- a/setup.py +++ b/setup.py @@ -21,6 +21,7 @@ from lib.build.lang import LanguageBuilder 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' @@ -77,7 +78,7 @@ class ImagesCmd(AbsCmd): 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))