28 lines
924 B
Python
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]
|
|
|