diff --git a/direct/src/tkpanels/ParticlePanel.py b/direct/src/tkpanels/ParticlePanel.py index a28633f398..c04233c2b1 100644 --- a/direct/src/tkpanels/ParticlePanel.py +++ b/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) + 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.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) - 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):