From 558999a774c7f22469ee3823d2fd37d7ecc52bbf Mon Sep 17 00:00:00 2001 From: "Asad M. Zaman" Date: Fri, 10 Aug 2007 02:41:20 +0000 Subject: [PATCH] from prezmek: --- direct/src/particles/Particles.py | 15 +- direct/src/tkpanels/ParticlePanel.py | 140 +++++++++++++- .../src/particlesystem/geomParticleRenderer.I | 173 +++++++++++++++++- .../particlesystem/geomParticleRenderer.cxx | 59 +++++- .../src/particlesystem/geomParticleRenderer.h | 30 +++ 5 files changed, 401 insertions(+), 16 deletions(-) diff --git a/direct/src/particles/Particles.py b/direct/src/particles/Particles.py index 2850f12da1..10d6a758d2 100644 --- a/direct/src/particles/Particles.py +++ b/direct/src/particles/Particles.py @@ -66,6 +66,7 @@ class Particles(ParticleSystem): # Enable particles by default self.fEnabled = 0 #self.enable() + self.geomReference = "" def cleanup(self): self.disable() @@ -324,13 +325,25 @@ class Particles(ParticleSystem): elif (self.rendererType == "GeomParticleRenderer"): file.write('# Geom parameters\n') node = self.renderer.getGeomNode() - file.write(targ + '.renderer.setGeomNode(' + node.getName() + ')\n') + file.write('geomRef = loader.loadModel("' + self.geomReference + '")\n') + file.write(targ + '.renderer.setGeomNode(geomRef.node())\n') + file.write(targ + '.geomReference = "' + self.geomReference + '"\n'); cbmLut = ('MNone','MAdd','MSubtract','MInvSubtract','MMin','MMax') cboLut = ('OZero','OOne','OIncomingColor','OOneMinusIncomingColor','OFbufferColor', 'OOneMinusFbufferColor','OIncomingAlpha','OOneMinusIncomingAlpha', 'OFbufferAlpha','OOneMinusFbufferAlpha','OConstantColor', 'OOneMinusConstantColor','OConstantAlpha','OOneMinusConstantAlpha', 'OIncomingColorSaturate') + file.write(targ + '.renderer.setXScaleFlag(%d)\n' % self.renderer.getXScaleFlag()) + file.write(targ + '.renderer.setYScaleFlag(%d)\n' % self.renderer.getYScaleFlag()) + file.write(targ + '.renderer.setZScaleFlag(%d)\n' % self.renderer.getZScaleFlag()) + file.write(targ + '.renderer.setInitialXScale(%.4f)\n' % self.renderer.getInitialXScale()) + file.write(targ + '.renderer.setFinalXScale(%.4f)\n' % self.renderer.getFinalXScale()) + file.write(targ + '.renderer.setInitialYScale(%.4f)\n' % self.renderer.getInitialYScale()) + file.write(targ + '.renderer.setFinalYScale(%.4f)\n' % self.renderer.getFinalYScale()) + file.write(targ + '.renderer.setInitialZScale(%.4f)\n' % self.renderer.getInitialZScale()) + file.write(targ + '.renderer.setFinalZScale(%.4f)\n' % self.renderer.getFinalZScale()) + cbAttrib = self.renderer.getRenderNode().getAttrib(ColorBlendAttrib.getClassType()) if(cbAttrib): cbMode = cbAttrib.getMode() diff --git a/direct/src/tkpanels/ParticlePanel.py b/direct/src/tkpanels/ParticlePanel.py index dd261615e0..ed328490c6 100644 --- a/direct/src/tkpanels/ParticlePanel.py +++ b/direct/src/tkpanels/ParticlePanel.py @@ -528,27 +528,36 @@ class ParticlePanel(AppShell): self.createFloater(linePage, 'Line Renderer', 'Line Scale Factor', 'Scale Factor applied to length of line', command = self.setRendererLineScaleFactor) - # Geom page # + + ############################################################################ + # GEOM PARTICLE RENDERER PAGE # + ############################################################################ geomPage = self.rendererNotebook.add('GeomParticleRenderer') f = Frame(geomPage) f.pack(fill = X) + + # Geom Node input field Label(f, width = 12, text = 'Geom Node', pady = 3).pack(side = LEFT) self.rendererGeomNode = StringVar() - self.rendererGeomNodeEntry = Entry( - f, width = 12, - textvariable = self.rendererGeomNode) + self.rendererGeomNodeEntry = Entry(f, width = 12, + textvariable = self.rendererGeomNode) self.rendererGeomNodeEntry.bind('', self.setRendererGeomNode) self.rendererGeomNodeEntry.pack(side = LEFT, expand = 1, fill = X) + # Setup frames f = Frame(geomPage) f.pack(fill = BOTH, expand = 1) rendererGeomNotebook = Pmw.NoteBook(f) rendererGeomNotebook.pack(fill = BOTH, expand = 1) rendererGeomBlendPage = rendererGeomNotebook.add('Blend') + rendererGeomScalePage = rendererGeomNotebook.add('Scale') rendererGeomInterpolationPage = rendererGeomNotebook.add('Interpolate') - + + ############################################################################ + # Blend tab p = Frame(rendererGeomBlendPage) + p.pack(fill = X) self.createOptionMenu(p, 'Geom Renderer', 'Color Blend', 'How to render semi-transparent colors', @@ -574,7 +583,58 @@ class ParticlePanel(AppShell): 'OZero'), self.setRendererGeomColorBlendFbufferOperand) self.getVariable('Geom Renderer','Fbuffer Op.').set('OOneMinusIncomingAlpha') + + ############################################################################ + # Scale tab + p = Frame(rendererGeomScalePage) p.pack(fill = X) + + self.createCheckbutton( + p, 'Geom Renderer', 'X Scale', + ("On: x scale is interpolated over particle's life; " + + "Off: stays as start_X_Scale"), + self.toggleRendererGeomXScale, 0, side = LEFT) + self.createCheckbutton( + p, 'Geom Renderer', 'Y Scale', + ("On: y scale is interpolated over particle's life; " + + "Off: stays as start_Y_Scale"), + self.toggleRendererGeomYScale, 0, side = LEFT) + self.createCheckbutton( + p, 'Geom Renderer', 'Z Scale', + ("On: z scale is interpolated over particle's life; " + + "Off: stays as start_Z_Scale"), + self.toggleRendererGeomZScale, 0, side = LEFT) + + p = Frame(rendererGeomScalePage) + p.pack(fill = X) + + self.createFloater(p, 'Geom Renderer', + 'Initial X Scale', + 'Initial X scaling factor', + command = self.setRendererGeomInitialXScale) + self.createFloater(p, 'Geom Renderer', + 'Final X Scale', + 'Final X scaling factor, if xScale enabled', + command = self.setRendererGeomFinalXScale) + self.createFloater(p, 'Geom Renderer', + 'Initial Y Scale', + 'Initial Y scaling factor', + command = self.setRendererGeomInitialYScale) + self.createFloater(p, 'Geom Renderer', + 'Final Y Scale', + 'Final Y scaling factor, if yScale enabled', + command = self.setRendererGeomFinalYScale) + self.createFloater(p, 'Geom Renderer', + 'Initial Z Scale', + 'Initial Z scaling factor', + command = self.setRendererGeomInitialZScale) + self.createFloater(p, 'Geom Renderer', + 'Final Z Scale', + 'Final Z scaling factor, if zScale enabled', + command = self.setRendererGeomFinalZScale) + + ############################################################################ + # Interpolate tab p = Frame(rendererGeomInterpolationPage) p.pack(fill = X) addSegmentButton = Menubutton(p, text = 'Add Segment', @@ -603,7 +663,9 @@ class ParticlePanel(AppShell): rendererGeomNotebook.setnaturalsize() - # Point # + ############################################################################ + # POINT PARTICLE RENDERER PAGE # + ############################################################################ rendererPointPage = self.rendererNotebook.add('PointParticleRenderer') self.createFloater(rendererPointPage, 'Point Renderer', 'Point Size', 'Width and height of points in pixels', @@ -704,6 +766,7 @@ class ParticlePanel(AppShell): ################################################################################## p = Frame(rendererSpriteScalePage) p.pack(fill = X) + self.createCheckbutton( p, 'Sprite Renderer', 'X Scale', ("On: x scale is interpolated over particle's life; " + @@ -1569,6 +1632,7 @@ class ParticlePanel(AppShell): self.getVariable('Renderer', 'Alpha Mode').set(aMode) userAlpha = renderer.getUserAlpha() self.getWidget('Renderer', 'User Alpha').set(userAlpha) + if isinstance(renderer, LineParticleRenderer): headColor = renderer.getHeadColor() * 255.0 self.getWidget('Line Renderer', 'Head Color').set( @@ -1578,7 +1642,32 @@ class ParticlePanel(AppShell): [tailColor[0], tailColor[1], tailColor[2], tailColor[3]]) self.getWidget('Line Renderer', 'Line Scale Factor').set( renderer.getLineScaleFactor()) + elif isinstance(renderer, GeomParticleRenderer): + self.getVariable('Geom Renderer', 'X Scale').set( + renderer.getXScaleFlag()) + self.getVariable('Geom Renderer', 'Y Scale').set( + renderer.getYScaleFlag()) + self.getVariable('Geom Renderer', 'Z Scale').set( + renderer.getZScaleFlag()) + initialXScale = renderer.getInitialXScale() + self.getWidget('Geom Renderer', 'Initial X Scale').set( + initialXScale) + initialYScale = renderer.getInitialYScale() + self.getWidget('Geom Renderer', 'Initial Y Scale').set( + initialYScale) + initialZScale = renderer.getInitialZScale() + self.getWidget('Geom Renderer', 'Initial Z Scale').set( + initialZScale) + finalXScale = renderer.getFinalXScale() + self.getWidget('Geom Renderer', 'Final X Scale').set( + finalXScale) + finalYScale = renderer.getFinalYScale() + self.getWidget('Geom Renderer', 'Final Y Scale').set( + finalYScale) + finalZScale = renderer.getFinalZScale() + self.getWidget('Geom Renderer', 'Final Z Scale').set( + finalZScale) if(self.getVariable('Geom Renderer','Color Blend').get() in ['MAdd','MSubtract','MInvSubtract']): self.getWidget('Geom Renderer','Incoming Op.').pack(fill = X) self.getWidget('Geom Renderer','Fbuffer Op.').pack(fill = X) @@ -1618,6 +1707,7 @@ class ParticlePanel(AppShell): elif (blendMethod == BaseParticleRenderer.PPBLENDCUBIC): bMethod = "PP_BLEND_CUBIC" self.getVariable('Point Renderer', 'Blend Method').set(bMethod) + elif isinstance(renderer, SparkleParticleRenderer): centerColor = renderer.getCenterColor() * 255.0 self.getWidget('Sparkle Renderer', 'Center Color').set( @@ -1635,6 +1725,7 @@ class ParticlePanel(AppShell): if (lifeScale == SparkleParticleRenderer.SPSCALE): lScale = "SP_SCALE" self.getVariable('Sparkle Renderer', 'Life Scale').set(lScale) + elif isinstance(renderer, SpriteParticleRenderer): self.getWidget('Sprite Renderer','Frame Rate').set(renderer.getAnimateFramesRate(), 0) self.getVariable('Sprite Renderer','Enable Animation').set( @@ -1726,6 +1817,7 @@ class ParticlePanel(AppShell): if nodePath != None: node = nodePath.node() if (node != None): + self.particles.geomReference = self.rendererGeomNode.get() self.particles.renderer.setGeomNode(node) # Point # def setRendererPointSize(self, size): @@ -1903,26 +1995,54 @@ class ParticlePanel(AppShell): blendMethodStr = self.getVariable('Sprite Renderer','Color Blend').get() incomingOperandStr = self.getVariable('Sprite Renderer','Incoming Op.').get() fbufferOperandStr = operand - self.setRendererColorBlendAttrib('Sprite Renderer', blendMethodStr, incomingOperandStr, fbufferOperandStr) + + + # GeomParticleRenderer Functionality + def toggleRendererGeomXScale(self): + self.particles.renderer.setXScaleFlag( + self.getVariable('Geom Renderer', 'X Scale').get()) + def toggleRendererGeomYScale(self): + self.particles.renderer.setYScaleFlag( + self.getVariable('Geom Renderer', 'Y Scale').get()) + def toggleRendererGeomZScale(self): + self.particles.renderer.setZScaleFlag( + self.getVariable('Geom Renderer', 'Z Scale').get()) + + def setRendererGeomInitialXScale(self, xScale): + self.particles.renderer.setInitialXScale(xScale) + def setRendererGeomFinalXScale(self, xScale): + self.particles.renderer.setFinalXScale(xScale) + + def setRendererGeomInitialYScale(self, yScale): + self.particles.renderer.setInitialYScale(yScale) + def setRendererGeomFinalYScale(self, yScale): + self.particles.renderer.setFinalYScale(yScale) + + def setRendererGeomInitialZScale(self, zScale): + self.particles.renderer.setInitialZScale(zScale) + def setRendererGeomFinalZScale(self, zScale): + self.particles.renderer.setFinalZScale(zScale) + def setRendererGeomColorBlendMethod(self, blendMethod): blendMethodStr = blendMethod incomingOperandStr = self.getVariable('Geom Renderer','Incoming Op.').get() fbufferOperandStr = self.getVariable('Geom Renderer','Fbuffer Op.').get() - self.setRendererColorBlendAttrib('Geom Renderer', blendMethodStr, incomingOperandStr, fbufferOperandStr) + def setRendererGeomColorBlendIncomingOperand(self, operand): blendMethodStr = self.getVariable('Geom Renderer','Color Blend').get() incomingOperandStr = operand fbufferOperandStr = self.getVariable('Geom Renderer','Fbuffer Op.').get() - self.setRendererColorBlendAttrib('Geom Renderer', blendMethodStr, incomingOperandStr, fbufferOperandStr) + def setRendererGeomColorBlendFbufferOperand(self, operand): blendMethodStr = self.getVariable('Geom Renderer','Color Blend').get() incomingOperandStr = self.getVariable('Geom Renderer','Incoming Op.').get() fbufferOperandStr = operand self.setRendererColorBlendAttrib('Geom Renderer', blendMethodStr, incomingOperandStr, fbufferOperandStr) + def addConstantInterpolationSegment(self, id = None): ren = self.particles.getRenderer() cim = ren.getColorInterpolationManager() @@ -2652,7 +2772,9 @@ class ParticlePanel(AppShell): # Create demo in root window for testing. if __name__ == '__main__': + root = Pmw.initialise() pp = ParticlePanel() + base.pp=pp #ve = VectorEntry(Toplevel(), relief = GROOVE) #ve.pack() diff --git a/panda/src/particlesystem/geomParticleRenderer.I b/panda/src/particlesystem/geomParticleRenderer.I index 39bb25ef48..81aebe38bf 100644 --- a/panda/src/particlesystem/geomParticleRenderer.I +++ b/panda/src/particlesystem/geomParticleRenderer.I @@ -33,11 +33,100 @@ set_geom_node(PandaNode *node) { resize_pool(_pool_size); } +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::set_x_scale_flag +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE void GeomParticleRenderer:: +set_x_scale_flag(bool animate_x_ratio) { + _animate_x_ratio = animate_x_ratio; + init_geoms(); +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::set_y_scale_flag +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE void GeomParticleRenderer:: +set_y_scale_flag(bool animate_y_ratio) { + _animate_y_ratio = animate_y_ratio; + init_geoms(); +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::set_z_scale_flag +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE void GeomParticleRenderer:: +set_z_scale_flag(bool animate_z_ratio) { + _animate_z_ratio = animate_z_ratio; + init_geoms(); +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::set_initial_x_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE void GeomParticleRenderer:: +set_initial_x_scale(float initial_x_scale) { + _initial_x_scale = initial_x_scale; + init_geoms(); +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::set_final_x_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE void GeomParticleRenderer:: +set_final_x_scale(float final_x_scale) { + _final_x_scale = final_x_scale; + init_geoms(); +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::set_initial_y_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE void GeomParticleRenderer:: +set_initial_y_scale(float initial_y_scale) { + _initial_y_scale = initial_y_scale; + init_geoms(); +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::set_final_y_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE void GeomParticleRenderer:: +set_final_y_scale(float final_y_scale) { + _final_y_scale = final_y_scale; + init_geoms(); +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::set_initial_z_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE void GeomParticleRenderer:: +set_initial_z_scale(float initial_z_scale) { + _initial_z_scale = initial_z_scale; + init_geoms(); +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::set_final_z_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE void GeomParticleRenderer:: +set_final_z_scale(float final_z_scale) { + _final_z_scale = final_z_scale; + init_geoms(); +} + //////////////////////////////////////////////////////////////////// // Function : get_geom_node // Access : public //////////////////////////////////////////////////////////////////// - INLINE PandaNode *GeomParticleRenderer:: get_geom_node() { return _geom_node; @@ -47,8 +136,88 @@ get_geom_node() { // Function : get_color_interpolation_manager // Access : public //////////////////////////////////////////////////////////////////// - INLINE ColorInterpolationManager* GeomParticleRenderer:: get_color_interpolation_manager() const { return _color_interpolation_manager; } + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::get_x_scale_flag +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE bool GeomParticleRenderer:: +get_x_scale_flag() const { + return _animate_x_ratio; +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::get_y_scale_flag +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE bool GeomParticleRenderer:: +get_y_scale_flag() const { + return _animate_y_ratio; +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::get_z_scale_flag +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE bool GeomParticleRenderer:: +get_z_scale_flag() const { + return _animate_z_ratio; +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::get_initial_x_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE float GeomParticleRenderer:: +get_initial_x_scale() const { + return _initial_x_scale; +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::get_final_x_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE float GeomParticleRenderer:: +get_final_x_scale() const { + return _final_x_scale; +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::get_initial_y_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE float GeomParticleRenderer:: +get_initial_y_scale() const { + return _initial_y_scale; +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::get_final_y_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE float GeomParticleRenderer:: +get_final_y_scale() const { + return _final_y_scale; +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::get_initial_z_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE float GeomParticleRenderer:: +get_initial_z_scale() const { + return _initial_z_scale; +} + +//////////////////////////////////////////////////////////////////// +// Function : GeomParticleRenderer::get_final_z_scale +// Access : public +//////////////////////////////////////////////////////////////////// +INLINE float GeomParticleRenderer:: +get_final_z_scale() const { + return _final_z_scale; +} diff --git a/panda/src/particlesystem/geomParticleRenderer.cxx b/panda/src/particlesystem/geomParticleRenderer.cxx index 77a5524bf8..37b05008d8 100644 --- a/panda/src/particlesystem/geomParticleRenderer.cxx +++ b/panda/src/particlesystem/geomParticleRenderer.cxx @@ -37,7 +37,16 @@ GeomParticleRenderer(ParticleRendererAlphaMode am, PandaNode *geom_node) : BaseParticleRenderer(am), _geom_node(geom_node), _color_interpolation_manager(new ColorInterpolationManager(Colorf(1.0f,1.0f,1.0f,1.0f))), - _pool_size(0) + _pool_size(0), + _initial_x_scale(1.0f), + _final_x_scale(1.0f), + _initial_y_scale(1.0f), + _final_y_scale(1.0f), + _initial_z_scale(1.0f), + _final_z_scale(1.0f), + _animate_x_ratio(false), + _animate_y_ratio(false), + _animate_z_ratio(false) { if (_geom_node.is_null()) _geom_node = new PandaNode("empty"); @@ -51,7 +60,18 @@ GeomParticleRenderer(ParticleRendererAlphaMode am, PandaNode *geom_node) : GeomParticleRenderer:: GeomParticleRenderer(const GeomParticleRenderer& copy) : - BaseParticleRenderer(copy), _pool_size(0) { + BaseParticleRenderer(copy), + _pool_size(0), + _initial_x_scale(copy._initial_x_scale), + _final_x_scale(copy._final_x_scale), + _initial_y_scale(copy._initial_y_scale), + _final_y_scale(copy._final_y_scale), + _initial_z_scale(copy._initial_z_scale), + _final_z_scale(copy._final_z_scale), + _animate_x_ratio(copy._animate_x_ratio), + _animate_y_ratio(copy._animate_y_ratio), + _animate_z_ratio(copy._animate_z_ratio) +{ _geom_node = copy._geom_node; } @@ -82,9 +102,9 @@ make_copy() { // Access : private // Description : links the child nodes to the parent stuff //////////////////////////////////////////////////////////////////// - void GeomParticleRenderer:: init_geoms() { + } //////////////////////////////////////////////////////////////////// @@ -215,10 +235,30 @@ render(pvector< PT(PhysicsObject) >& po_vector, int ttl_particles) { cur_node->set_attrib(ColorAttrib::make_flat(c), 0); + // animate scale + float current_x_scale = _initial_x_scale; + float current_y_scale = _initial_y_scale; + float current_z_scale = _initial_z_scale; + + if (_animate_x_ratio || _animate_y_ratio || _animate_z_ratio) { + if (_animate_x_ratio) { + current_x_scale = (_initial_x_scale + + (t * (_final_x_scale - _initial_x_scale))); + } + if (_animate_y_ratio) { + current_y_scale = (_initial_y_scale + + (t * (_final_y_scale - _initial_y_scale))); + } + if (_animate_z_ratio) { + current_z_scale = (_initial_z_scale + + (t * (_final_z_scale - _initial_z_scale))); + } + } + cur_node->set_transform(TransformState::make_pos_quat_scale (cur_particle->get_position(), cur_particle->get_orientation(), - LVecBase3f(1.0f, 1.0f, 1.0f))); + LVecBase3f(current_x_scale, current_y_scale, current_z_scale))); // maybe get out early if possible. @@ -276,6 +316,17 @@ write(ostream &out, int indent) const { out.width(indent); out<<""; out<<"GeomParticleRenderer:\n"; out.width(indent+2); out<<""; out<<"_geom_node "<<_geom_node<<"\n"; out.width(indent+2); out<<""; out<<"_pool_size "<<_pool_size<<"\n"; + + out.width(indent+2); out<<""; out<<"_initial_x_scale "<<_initial_x_scale<<"\n"; + out.width(indent+2); out<<""; out<<"_final_x_scale "<<_final_x_scale<<"\n"; + out.width(indent+2); out<<""; out<<"_initial_y_scale "<<_initial_y_scale<<"\n"; + out.width(indent+2); out<<""; out<<"_final_y_scale "<<_final_y_scale<<"\n"; + out.width(indent+2); out<<""; out<<"_initial_z_scale "<<_initial_z_scale<<"\n"; + out.width(indent+2); out<<""; out<<"_final_z_scale "<<_final_z_scale<<"\n"; + out.width(indent+2); out<<""; out<<"_animate_x_ratio "<<_animate_x_ratio<<"\n"; + out.width(indent+2); out<<""; out<<"_animate_y_ratio "<<_animate_y_ratio<<"\n"; + out.width(indent+2); out<<""; out<<"_animate_z_ratio "<<_animate_z_ratio<<"\n"; + write_linear_forces(out, indent+2); BaseParticleRenderer::write(out, indent+2); #endif //] NDEBUG diff --git a/panda/src/particlesystem/geomParticleRenderer.h b/panda/src/particlesystem/geomParticleRenderer.h index 67b33b1306..8dee60ff35 100644 --- a/panda/src/particlesystem/geomParticleRenderer.h +++ b/panda/src/particlesystem/geomParticleRenderer.h @@ -39,6 +39,26 @@ PUBLISHED: INLINE PandaNode *get_geom_node(); INLINE ColorInterpolationManager* get_color_interpolation_manager() const; + INLINE void set_x_scale_flag(bool animate_x_ratio); + INLINE void set_y_scale_flag(bool animate_y_ratio); + INLINE void set_z_scale_flag(bool animate_z_ratio); + INLINE void set_initial_x_scale(float initial_x_scale); + INLINE void set_final_x_scale(float final_x_scale); + INLINE void set_initial_y_scale(float initial_y_scale); + INLINE void set_final_y_scale(float final_y_scale); + INLINE void set_initial_z_scale(float initial_z_scale); + INLINE void set_final_z_scale(float final_z_scale); + + INLINE bool get_x_scale_flag() const; + INLINE bool get_y_scale_flag() const; + INLINE bool get_z_scale_flag() const; + INLINE float get_initial_x_scale() const; + INLINE float get_final_x_scale() const; + INLINE float get_initial_y_scale() const; + INLINE float get_final_y_scale() const; + INLINE float get_initial_z_scale() const; + INLINE float get_final_z_scale() const; + virtual BaseParticleRenderer *make_copy(); virtual void output(ostream &out) const; @@ -52,6 +72,16 @@ private: pvector< PT(PandaNode) > _node_vector; int _pool_size; + float _initial_x_scale; + float _final_x_scale; + float _initial_y_scale; + float _final_y_scale; + float _initial_z_scale; + float _final_z_scale; + + bool _animate_x_ratio; + bool _animate_y_ratio; + bool _animate_z_ratio; // geomparticlerenderer takes advantage of the birth/death functions