Преглед изворни кода

added DestructiveScratchPad

Darren Ranalli пре 17 година
родитељ
комит
b06bf4d776
1 измењених фајлова са 21 додато и 3 уклоњено
  1. 21 3
      direct/src/showbase/PythonUtil.py

+ 21 - 3
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