From 66eb1a1298fa819fb0336215b59e27c35f5eda12 Mon Sep 17 00:00:00 2001 From: David Rose Date: Mon, 8 Oct 2007 21:37:37 +0000 Subject: [PATCH] add postFlatten() --- direct/src/actor/Actor.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/direct/src/actor/Actor.py b/direct/src/actor/Actor.py index 98271fe310..315f499246 100644 --- a/direct/src/actor/Actor.py +++ b/direct/src/actor/Actor.py @@ -1952,7 +1952,31 @@ class Actor(DirectObject, NodePath): self.__animControlDict[lod][partName][animName]= Actor.AnimDef(filename) - + def postFlatten(self): + """Call this after performing an aggressive flatten operation, + such as flattenStrong(), that involves the Actor. This is + especially necessary when mergeLODBundles is true, since this + kind of actor may be broken after a flatten operation; this + method should restore proper Actor functionality. """ + + if self.mergeLODBundles: + # Re-merge all bundles, and restore the common bundle map. + self.__commonBundleHandles = {} + + for lodName, bundleDict in self.__partBundleDict.items(): + for partName, partDef in bundleDict.items(): + loadedBundleHandle = self.__commonBundleHandles.get(partName, None) + node = partDef.partBundleNP.node() + if loadedBundleHandle: + node.mergeBundles(partDef.partBundleHandle, loadedBundleHandle) + partDef.partBundleHandle = loadedBundleHandle + else: + self.__commonBundleHandles[partName] = partDef.partBundleHandle + + # Since we may have merged together some bundles, all of + # our anims are now suspect. Force them to reload. + self.unloadAnims() + def unloadAnims(self, anims=None, partName=None, lodName=None): """unloadAnims(self, string:string{}, string='modelRoot', string='lodRoot')