EG/third_party/p3dimgui/utilities/PlaceManager.py

28 lines
924 B
Python

from direct.showbase.DirectObject import DirectObject
from panda3d.core import NodePath
from p3dimgui.utilities.PlacePanel import PlacePanel
from direct.extensions_native.extension_native_helpers import Dtool_funcToMethod
class PlaceManager(DirectObject):
def __init__(self):
DirectObject.__init__(self)
self.nodesToPlacers: dict[NodePath, PlacePanel] = {}
# Replace the place() and rgbPanel() extension methods for NodePath
def place(nodePath):
self.nodesToPlacers[nodePath] = PlacePanel(nodePath)
Dtool_funcToMethod(place, NodePath)
Dtool_funcToMethod(place, NodePath, 'rgbPanel')
self.accept('imgui-new-frame', self.__checkActive)
def __checkActive(self):
for node in list(self.nodesToPlacers.keys()):
placer = self.nodesToPlacers[node]
if not placer.active:
del self.nodesToPlacers[node]