Browse Source

Updated to better handle failed source loads for the spriteParticleRenderer.

Josh Wilson 20 years ago
parent
commit
479e3d39c5
1 changed files with 37 additions and 45 deletions
  1. 37 45
      direct/src/tkpanels/ParticlePanel.py

+ 37 - 45
direct/src/tkpanels/ParticlePanel.py

@@ -663,26 +663,8 @@ class ParticlePanel(AppShell):
         rendererSpriteScalePage = rendererSpriteNotebook.add('Scale')
         rendererSpriteBlendPage = rendererSpriteNotebook.add('Blend')
         rendererSpriteInterpolationPage = rendererSpriteNotebook.add('Interpolate')
-
-#        p = Frame(rendererSpriteTexturePage)        
-#        p.pack(fill = X)
-#        Label(p, width = 12, text = 'Texture Type:').pack(side = LEFT)
-#        self.rendererSpriteSourceType = IntVar()
-#        self.rendererSpriteSourceType.set(0)
-#        self.rendererSpriteSTTexture = self.createRadiobutton(
-#            p, 'left',
-#            'Sprite Renderer', 'Texture Type',
-#            'Sprite particle renderer created from texture file',
-#            self.rendererSpriteSourceType, 0,
-#            self.setSpriteSourceType)
-#        self.rendererSpriteSTTexture = self.createRadiobutton(
-#            p, 'left',
-#            'Sprite Renderer', 'NodePath Type',
-#            'Sprite particle renderer created from node path',
-#            self.rendererSpriteSourceType, 1,
-#            self.setSpriteSourceType)
-#        self.rendererSpriteSTTexture.pack(side = LEFT, expand = 1, fill = X)
 ##################################################################################
+
         p = Frame(rendererSpriteTexturePage)
         p.pack(fill = BOTH, expand = 1)
 
@@ -1829,13 +1811,13 @@ class ParticlePanel(AppShell):
         parent = self.rendererSpriteAnimationFrame
 
         if ren.addTextureFromFile():
-            animId = len(self.rendererSpriteAnimationWidgetList)
+            animId = len([x for x in self.rendererSpriteAnimationWidgetList if x and x.valid])
             anim = ren.getAnim(animId)
         
             self.rendererSpriteAnimationWidgetList.append(
                 self.createSpriteAnimationTextureWidget(parent,anim,`animId`))
         else:
-            animId = len(self.rendererSpriteAnimationWidgetList)
+            animId = len([x for x in self.rendererSpriteAnimationWidgetList if x and x.valid])
             anim = SpriteAnim.STTexture
             self.rendererSpriteAnimationWidgetList.append(
                 self.createSpriteAnimationTextureWidget(parent,anim,`animId`))
@@ -1845,13 +1827,13 @@ class ParticlePanel(AppShell):
         parent = self.rendererSpriteAnimationFrame
 
         if ren.addTextureFromNode():
-            animId = len(self.rendererSpriteAnimationWidgetList)
+            animId = len([x for x in self.rendererSpriteAnimationWidgetList if x and x.valid])
             anim = ren.getAnim(animId)
             
             self.rendererSpriteAnimationWidgetList.append(
                 self.createSpriteAnimationNodeWidget(parent,anim,`animId`))
         else:
-            animId = len(self.rendererSpriteAnimationWidgetList)
+            animId = len([x for x in self.rendererSpriteAnimationWidgetList if x and x.valid])
             anim = SpriteAnim.STFromNode
             self.rendererSpriteAnimationWidgetList.append(
                 self.createSpriteAnimationNodeWidget(parent,anim,`animId`))
@@ -2202,14 +2184,14 @@ class ParticlePanel(AppShell):
 
         if(anim == SpriteAnim.STTexture or
            anim == SpriteAnim.STFromNode):
-            frame.ready = False
+            frame.valid = False
             frame.animSourceType = anim
             if(anim == SpriteAnim.STTexture):
                 type = 'Texture'
             else:
                 type = 'From Node'
         else:
-            frame.ready = True
+            frame.valid = True
             
             if(anim.getSourceType()==SpriteAnim.STTexture):
                 frame.animSourceType = SpriteAnim.STTexture
@@ -2234,7 +2216,7 @@ class ParticlePanel(AppShell):
         Label(f, text = 'Texture: ', font = ('MSSansSerif',12), width=7).pack(side = LEFT)
         strVar = StringVar()
         entry = Entry(f,textvariable = strVar).pack(padx=3, pady=3,side=LEFT,fill=X,expand=1)
-        if frame.ready:
+        if frame.valid:
             strVar.set(anim.getTexSource())
         else:
             strVar.set('Base model path: ' + `getModelPath().getValue()`)
@@ -2242,7 +2224,9 @@ class ParticlePanel(AppShell):
         def checkForTexture(strVar = strVar):
             tex = loader.loadTexture(strVar.get())
             if tex:
-                frame.ready = True
+                frame.valid = True
+            else:
+                frame.valid = False
             self.writeSpriteRendererAnimations()
 
         Button(f, text = 'Update',
@@ -2263,7 +2247,7 @@ class ParticlePanel(AppShell):
         Label(lf, text = 'Model: ', font = ('MSSansSerif',12), width=7).pack(side = LEFT)
         mStrVar = StringVar()
         entry = Entry(lf,textvariable = mStrVar).pack(padx=3, pady=3,side=LEFT,fill=X,expand=1)
-        if frame.ready:
+        if frame.valid:
             mStrVar.set(anim.getModelSource())
         else:
             mStrVar.set('Base model path: ' + `getModelPath().getValue()`)
@@ -2278,7 +2262,7 @@ class ParticlePanel(AppShell):
         Label(lf, text = 'Node: ', font = ('MSSansSerif',12), width=7).pack(side = LEFT)
         nStrVar = StringVar()
         entry = Entry(lf,textvariable = nStrVar).pack(padx=3, pady=3,side=LEFT,fill=X,expand=1)
-        if frame.ready:
+        if frame.valid:
             nStrVar.set(anim.getNodeSource())
         else:
             nStrVar.set('**/*')
@@ -2292,7 +2276,12 @@ class ParticlePanel(AppShell):
             if mod:
                 node = mod.find(nodeStrVar.get())
                 if node:
-                    frame.ready = True
+                    frame.valid = True
+                else:
+                    frame.valid = False
+            else:
+                frame.valid = False
+                
             self.writeSpriteRendererAnimations()
 
         Button(mlf, text = 'Update',
@@ -2302,6 +2291,7 @@ class ParticlePanel(AppShell):
 
         return frame
 
+    # get animation info from renderer into panel
     def readSpriteRendererAnimations(self):
         ren = self.particles.getRenderer()
 
@@ -2318,28 +2308,30 @@ class ParticlePanel(AppShell):
             else:
                 w = self.createSpriteAnimationNodeWidget(self.rendererSpriteAnimationFrame,anim,`len(self.rendererSpriteAnimationWidgetList)`)
             self.rendererSpriteAnimationWidgetList.append(w)
-        
+            
+    # set animation info from panel into renderer
     def writeSpriteRendererAnimations(self):
         ren = self.particles.getRenderer()
 
         for x in range(ren.getNumAnims()):
             ren.removeAnimation(0)
 
-        widgetList = [x for x in self.rendererSpriteAnimationWidgetList if x and x.ready]
-        for x in range(len(widgetList)):
-            if(self.rendererSpriteAnimationWidgetList[x].animSourceType == SpriteAnim.STTexture):
-                texSource = self.getVariable('Sprite Renderer', `x` + ' Anim Texture').get()
-                if(x == 0):
-                    ren.setTextureFromFile(texSource)
-                else:
-                    ren.addTextureFromFile(texSource)
-            else:
-                modelSource = self.getVariable('Sprite Renderer', `x` + ' Anim Model').get()
-                nodeSource = self.getVariable('Sprite Renderer', `x` + ' Anim Node').get()
-                if(x == 0):
-                    ren.setTextureFromNode(modelSource,nodeSource)
+        for x in range(len(self.rendererSpriteAnimationWidgetList)):
+            widget = self.rendererSpriteAnimationWidgetList[x]
+            if(widget and widget.valid):
+                if(widget.animSourceType == SpriteAnim.STTexture):
+                    texSource = self.getVariable('Sprite Renderer', `x` + ' Anim Texture').get()
+                    if(x == 0):
+                        ren.setTextureFromFile(texSource)
+                    else:
+                        ren.addTextureFromFile(texSource)
                 else:
-                    ren.addTextureFromNode(modelSource,nodeSource)
+                    modelSource = self.getVariable('Sprite Renderer', `x` + ' Anim Model').get()
+                    nodeSource = self.getVariable('Sprite Renderer', `x` + ' Anim Node').get()
+                    if(x == 0):
+                        ren.setTextureFromNode(modelSource,nodeSource)
+                    else:
+                        ren.addTextureFromNode(modelSource,nodeSource)
     
     ## FORCEGROUP COMMANDS ##
     def updateForceWidgets(self):