diff --git a/direct/src/showbase/PythonUtil.py b/direct/src/showbase/PythonUtil.py index ecb6f41000..0c1d6c6c0d 100644 --- a/direct/src/showbase/PythonUtil.py +++ b/direct/src/showbase/PythonUtil.py @@ -29,7 +29,7 @@ __all__ = ['enumerate', 'unique', 'indent', 'nonRepeatingRandomList', 'GoldenRectangle', 'pivotScalar', 'rad90', 'rad180', 'rad270', 'rad360', 'nullGen', 'loopGen', 'makeFlywheelGen', 'flywheel', 'choice', 'printStack', 'printReverseStack', 'listToIndex2item', 'listToItem2index', -'pandaBreak','pandaTrace','formatTimeCompact'] +'pandaBreak','pandaTrace','formatTimeCompact','DestructiveScratchPad'] import types import string @@ -2364,13 +2364,30 @@ except: class ScratchPad: """empty class to stick values onto""" def __init__(self, **kArgs): - for key, value in kArgs.items(): + for key, value in kArgs.iteritems(): setattr(self, key, value) - self._keys = kArgs.keys() + self._keys = set(kArgs.keys()) + def add(self, **kArgs): + for key, value in kArgs.iteritems(): + setattr(self, key, value) + self._keys.update(kArgs.keys()) def destroy(self): for key in self._keys: delattr(self, key) +class DestructiveScratchPad(ScratchPad): + # automatically calls destroy() on elements passed to __init__ + def add(self, **kArgs): + for key, value in kArgs.iteritems(): + if hasattr(self, key): + getattr(self, key).destroy() + setattr(self, key, value) + self._keys.update(kArgs.keys()) + def destroy(self): + for key in self._keys: + getattr(self, key).destroy() + ScratchPad.destroy(self) + class Sync: _SeriesGen = SerialNumGen() def __init__(self, name, other=None): @@ -3394,6 +3411,7 @@ __builtin__.Queue = Queue __builtin__.Enum = Enum __builtin__.SerialNumGen = SerialNumGen __builtin__.ScratchPad = ScratchPad +__builtin__.DestructiveScratchPad = DestructiveScratchPad __builtin__.uniqueName = uniqueName __builtin__.serialNum = serialNum __builtin__.profiled = profiled