ya2 · news · projects · code · about

refactoring for building
authorFlavio Calva <f.calva@gmail.com>
Wed, 16 Mar 2022 18:16:40 +0000 (19:16 +0100)
committerFlavio Calva <f.calva@gmail.com>
Wed, 16 Mar 2022 18:16:40 +0000 (19:16 +0100)
15 files changed:
assets/images/buttons/move.png
assets/images/buttons/rotate.png
game/app.py
game/menu.py
game/scene.py
game/scenes/scene_basketball.py
game/scenes/scene_box.py
game/scenes/scene_domino.py
game/scenes/scene_domino_box.py
game/scenes/scene_domino_box_basketball.py
game/scenes/scene_teeter_domino_box_basketball.py
game/scenes/scene_teeter_tooter.py
lib/build/screenshots.py
prj.org
setup.py

index 4795f1bb3f559e68a46284a219b01ea2e4c71348..9949ac21549ae6bc23e522ecd8baa02432bf5b62 100644 (file)
Binary files a/assets/images/buttons/move.png and b/assets/images/buttons/move.png differ
index 11b093f20d8a7fa6d9bc2fcecb4ad12e1c034f68..a0763b6c02da6140e943c8a5acc88712a7342c9a 100644 (file)
Binary files a/assets/images/buttons/rotate.png and b/assets/images/buttons/rotate.png differ
index 8b3876f9fb2662406991c931d348ae25347c31e6..1437e0cc279acbbf6eeb4ed8ec7e6c827f740bdf 100755 (executable)
@@ -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()
index ad6619ff8036432ea41dc7ba815d88259d442396..4c64272bc9dbc855d57c6b7b0d142599f75ca98b 100644 (file)
@@ -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),
index b44506ad9c6cfe981a9f0abaa2db2648cc17cc70..b12ff0405b3f352a8f562b2b00a1d5fdc7c19791 100644 (file)
@@ -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]
index 1118c29adcf46cef478f1632258c0b5fc0f0b561..d57adf7a91442191083366d12fde60cd7846040a 100644 (file)
@@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter
 
 class SceneBasketBall(Scene):
 
-    sorting = 3
-
     @staticmethod
     def name():
         return _('Basket ball')
index 6bd92a1db6e128db14a8239095f0d29c07ddeffe..c0eee154b4a2b7317d3cb9f271d82c16c86f15d2 100644 (file)
@@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter
 
 class SceneBox(Scene):
 
-    sorting = 1
-
     @staticmethod
     def name():
         return _('Box')
index 348188191e67ebd430c037730347cbdd4d5d570e..d3edad2c372461ec193684e8c8fe27afd8d08a23 100644 (file)
@@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter
 
 class SceneDomino(Scene):
 
-    sorting = 0
-
     @staticmethod
     def name():
         return _('Domino')
index db8753dbda0ee949df1abc9e6fc698d813ad46c4..629047cc5a1956c86df1e717bde980697b249516 100644 (file)
@@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter
 
 class SceneDominoBox(Scene):
 
-    sorting = 2
-
     @staticmethod
     def name():
         return _('Domino and box')
index 08070295e6644fbd4024c892a4986ecf2120913c..84b51293794aae3e0f9e372cc06120c6a57bd9c6 100644 (file)
@@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter
 
 class SceneDominoBoxBasketball(Scene):
 
-    sorting = 4
-
     @staticmethod
     def name():
         return _('Domino, box and basket ball')
index 7a799bb4d73788a350b63149f615306973ee1963..b4331064a5f2b4bbd9e2d71e8fa31fa6ae68e00f 100644 (file)
@@ -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')
index b66cf8ea19ca20565cc71c50abba1beb75ee99b5..51c5eb3874bbb67aab77e47ef977c0ea7916afb0 100644 (file)
@@ -8,8 +8,6 @@ from game.items.teetertooter import TeeterTooter
 
 class SceneTeeterTooter(Scene):
 
-    sorting = 5
-
     @staticmethod
     def name():
         return _('Teeter tooter')
index bb9921e819959c3f1a779a3a66ca90adc3af5b95..0eb1261d6f364a7f2b82071f55916b47b6c16b5b 100644 (file)
@@ -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 2146fde5624a3319a407026de8e65acadf89c35f..2cc2eaada07fa727a6405170ede02c70d8ba85b7 100644 (file)
--- 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
index bde58b604d01604d4e8f71925b1e3f2b60dccf81..1e2ecf86dd4c349a2d85621ade0f1a1938e4e240 100644 (file)
--- 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))