ya2 · news · projects · code · about

housekeeping: ya2 module
[pmachines.git] / pmachines / scene.py
index 480785d9a67b14a8c7f35becc7b5617c18803f67..1a1f3ce215eba1e67bb7c61d420d235377ad2918 100644 (file)
@@ -4,7 +4,7 @@ from logging import info
 from json import loads
 from collections import namedtuple
 from panda3d.core import AmbientLight, Texture, TextPropertiesManager, \
-    TextNode, Spotlight, PerspectiveLens, BitMask32, NodePath
+    TextNode, Spotlight, PerspectiveLens, BitMask32
 from panda3d.bullet import BulletPlaneShape, BulletGhostNode
 from direct.gui.OnscreenImage import OnscreenImage
 from direct.gui.OnscreenText import OnscreenText
@@ -22,8 +22,8 @@ from pmachines.items.shelf import Shelf
 from pmachines.items.teetertooter import TeeterTooter
 from pmachines.editor.scene import SceneEditor
 from ya2.utils.cursor import MouseCursor
-from ya2.p3d.gfx import P3dGfxMgr
-from ya2.p3d.p3d import LibP3d
+from ya2.utils.gfx import GfxTools, DirectGuiMixin
+from ya2.utils.gui import GuiTools
 
 
 class Scene(DirectObject):
@@ -326,8 +326,9 @@ class Scene(DirectObject):
                 frameColor=fcols[0] if binfo[2] == NORMAL else fcols[1],
                 rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
                 clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
+            btn.__class__ = type('DirectButtonMixed', (DirectButton, DirectGuiMixin), {})
             btn.set_transparency(True)
-            self._pos_mgr.register(binfo[0], LibP3d.wdg_pos(btn))
+            self._pos_mgr.register(binfo[0], btn.pos_pixel())
             btns += [btn]
         if self.__editor:
             self.__home_btn, self.__info_btn, self.__editor_btn, self.__right_btn = btns
@@ -356,9 +357,10 @@ class Scene(DirectObject):
 
     def _unset_gui(self):
         btns = [
-            self.__home_btn, self.__info_btn, self.__right_btn,
+            self.__home_btn, self.__info_btn, self.__right_btn
             #self.__next_btn, self.__prev_btn, self.__rewind_btn
         ]
+        if self.__editor: btns += [self.__editor_btn]
         [btn.destroy() for btn in btns]
         if self._dbg_items:
             self._info_txt.destroy()
@@ -420,7 +422,7 @@ class Scene(DirectObject):
 
     def _get_hits(self):
         if not base.mouseWatcherNode.has_mouse(): return []
-        p_from, p_to = P3dGfxMgr.world_from_to(base.mouseWatcherNode.get_mouse())
+        p_from, p_to = GuiTools.get_mouse().from_to_points()
         return self._world.ray_test_all(p_from, p_to).get_hits()
 
     def _update_info(self, item):
@@ -519,9 +521,9 @@ class Scene(DirectObject):
             self._start_evt_time = None
             self._set_win() if self._enforce_res == 'win' else self._set_fail()
         if any(itm._overlapping for itm in self.items):
-            self._cursor.cursor_img.img.set_color(.9, .1, .1, 1)
+            self._cursor.cursor_img.set_color(.9, .1, .1, 1)
         else:
-            self._cursor.cursor_img.img.set_color(.9, .9, .9, 1)
+            self._cursor.cursor_img.set_color(.9, .9, .9, 1)
         return task.cont
 
     def cb_inst(self, item):
@@ -606,8 +608,9 @@ class Scene(DirectObject):
             relief=FLAT, frameColor=(.6, .6, .6, .08),
             rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
             clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
+        btn.__class__ = type('DirectButtonMixed', (DirectButton, DirectGuiMixin), {})
         btn.set_transparency(True)
-        self._pos_mgr.register('close_instructions', LibP3d.wdg_pos(btn))
+        self._pos_mgr.register('close_instructions', btn.pos_pixel())
 
     def _set_win(self):
         self.__persistent.save_scene(self.__json_name, self.version(self.__json_name))
@@ -653,8 +656,9 @@ class Scene(DirectObject):
             relief=FLAT, frameColor=(.6, .6, .6, .08),
             rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
             clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
+        btn.__class__ = type('DirectButtonMixed', (DirectButton, DirectGuiMixin), {})
         btn.set_transparency(True)
-        self._pos_mgr.register('home_win', LibP3d.wdg_pos(btn))
+        self._pos_mgr.register('home_win', btn.pos_pixel())
         imgs = [self.__load_img_btn('rewind', col) for col in colors]
         btn = DirectButton(
             image=imgs, scale=btn_scale,
@@ -663,7 +667,8 @@ class Scene(DirectObject):
             relief=FLAT, frameColor=(.6, .6, .6, .08),
             rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
             clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
-        self._pos_mgr.register('replay', LibP3d.wdg_pos(btn))
+        btn.__class__ = type('DirectButtonMixed', (DirectButton, DirectGuiMixin), {})
+        self._pos_mgr.register('replay', btn.pos_pixel())
         btn.set_transparency(True)
         if self.__json_name:
             enabled = self._scenes.index(self.__json_name) < len(self._scenes) - 1
@@ -683,8 +688,9 @@ class Scene(DirectObject):
             frameColor=(.6, .6, .6, .08),
             rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
             clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
+        btn.__class__ = type('DirectButtonMixed', (DirectButton, DirectGuiMixin), {})
         btn['state'] = NORMAL if enabled else DISABLED
-        self._pos_mgr.register('next', LibP3d.wdg_pos(btn))
+        self._pos_mgr.register('next', btn.pos_pixel())
         btn.set_transparency(True)
 
     def _set_fail(self):
@@ -730,7 +736,8 @@ class Scene(DirectObject):
             relief=FLAT, frameColor=(.6, .6, .6, .08),
             rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
             clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
-        self._pos_mgr.register('home_win', LibP3d.wdg_pos(btn))
+        btn.__class__ = type('DirectButtonMixed', (DirectButton, DirectGuiMixin), {})
+        self._pos_mgr.register('home_win', btn.pos_pixel())
         btn.set_transparency(True)
         imgs = [self.__load_img_btn('rewind', col) for col in colors]
         btn = DirectButton(
@@ -740,7 +747,8 @@ class Scene(DirectObject):
             relief=FLAT, frameColor=(.6, .6, .6, .08),
             rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
             clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
-        self._pos_mgr.register('replay', LibP3d.wdg_pos(btn))
+        btn.__class__ = type('DirectButtonMixed', (DirectButton, DirectGuiMixin), {})
+        self._pos_mgr.register('replay', btn.pos_pixel())
         btn.set_transparency(True)
 
     def _on_restart(self, frm):
@@ -760,6 +768,7 @@ class Scene(DirectObject):
             self.__home_btn, self.__info_btn, self.__right_btn,
             #self.__next_btn, self.__prev_btn, self.__rewind_btn
         ]
+        if self.__editor: btns += [self.__editor_btn]
         self.__btn_state = [btn['state'] for btn in btns]
         for btn in btns:
             btn['state'] = DISABLED
@@ -770,6 +779,7 @@ class Scene(DirectObject):
             self.__home_btn, self.__info_btn, self.__right_btn,
             #self.__next_btn, self.__prev_btn, self.__rewind_btn
         ]
+        if self.__editor: btns += [self.__editor_btn]
         for btn, state in zip(btns, self.__btn_state):
             btn['state'] = state
         [itm.restore_state() for itm in self.__items]
@@ -783,7 +793,7 @@ class Scene(DirectObject):
         def frame_after(task):
             self._define_test_items()
             for itm in self._test_items:
-                self._pos_mgr.register(itm.name, P3dGfxMgr.pos2d_p2d(itm))
+                self._pos_mgr.register(itm.name, itm.pos2d_pixel())
         taskMgr.doMethodLater(1.4, frame_after, 'frame after')  # after the intro sequence
 
     def _define_test_items(self):
@@ -797,7 +807,7 @@ class Scene(DirectObject):
             self._set_test_item(item['id'], tuple(item['position']))
 
     def _set_test_item(self, name, pos):
-        self._test_items += [NodePath(name)]
+        self._test_items += [GfxTools.build_empty_node(name)]
         self._test_items[-1].set_pos(pos[0], 0, pos[1])
 
     def add_item(self, item):