Panda3D

geomParticleRenderer.h

00001 // Filename: geomParticleRenderer.h
00002 // Created by:  charles (05Jul00)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 #ifndef GEOMPARTICLERENDERER_H
00016 #define GEOMPARTICLERENDERER_H
00017 
00018 #include "baseParticleRenderer.h"
00019 #include "baseParticle.h"
00020 #include "colorInterpolationManager.h"
00021 #include "pandaNode.h"
00022 #include "pointerTo.h"
00023 #include "pointerToArray.h"
00024 #include "pvector.h"
00025 #include "pStatCollector.h"
00026 
00027 class EXPCL_PANDAPHYSICS GeomParticleRenderer : public BaseParticleRenderer {
00028 PUBLISHED:
00029   GeomParticleRenderer(ParticleRendererAlphaMode am = PR_ALPHA_NONE,
00030                        PandaNode *geom_node = (PandaNode *) NULL);
00031   GeomParticleRenderer(const GeomParticleRenderer& copy);
00032   virtual ~GeomParticleRenderer();
00033 
00034   INLINE void set_geom_node(PandaNode *node);
00035   INLINE PandaNode *get_geom_node();
00036   INLINE ColorInterpolationManager* get_color_interpolation_manager() const;  
00037 
00038   INLINE void set_x_scale_flag(bool animate_x_ratio);
00039   INLINE void set_y_scale_flag(bool animate_y_ratio);
00040   INLINE void set_z_scale_flag(bool animate_z_ratio);
00041   INLINE void set_initial_x_scale(PN_stdfloat initial_x_scale);
00042   INLINE void set_final_x_scale(PN_stdfloat final_x_scale);
00043   INLINE void set_initial_y_scale(PN_stdfloat initial_y_scale);
00044   INLINE void set_final_y_scale(PN_stdfloat final_y_scale);
00045   INLINE void set_initial_z_scale(PN_stdfloat initial_z_scale);
00046   INLINE void set_final_z_scale(PN_stdfloat final_z_scale);
00047 
00048   INLINE bool get_x_scale_flag() const;
00049   INLINE bool get_y_scale_flag() const;
00050   INLINE bool get_z_scale_flag() const;
00051   INLINE PN_stdfloat get_initial_x_scale() const;
00052   INLINE PN_stdfloat get_final_x_scale() const;
00053   INLINE PN_stdfloat get_initial_y_scale() const;
00054   INLINE PN_stdfloat get_final_y_scale() const;
00055   INLINE PN_stdfloat get_initial_z_scale() const;
00056   INLINE PN_stdfloat get_final_z_scale() const;
00057 
00058 public:
00059   virtual BaseParticleRenderer *make_copy();
00060 
00061   virtual void output(ostream &out) const;
00062   virtual void write_linear_forces(ostream &out, int indent=0) const;
00063   virtual void write(ostream &out, int indent=0) const;
00064 
00065 private:
00066   PT(PandaNode) _geom_node;
00067   PT(ColorInterpolationManager) _color_interpolation_manager;
00068 
00069   pvector< PT(PandaNode) > _node_vector;
00070 
00071   int _pool_size;
00072   PN_stdfloat _initial_x_scale;
00073   PN_stdfloat _final_x_scale;
00074   PN_stdfloat _initial_y_scale;
00075   PN_stdfloat _final_y_scale;
00076   PN_stdfloat _initial_z_scale;
00077   PN_stdfloat _final_z_scale;
00078 
00079   bool _animate_x_ratio;
00080   bool _animate_y_ratio;
00081   bool _animate_z_ratio;
00082 
00083   // geomparticlerenderer takes advantage of the birth/death functions
00084 
00085   virtual void birth_particle(int index);
00086   virtual void kill_particle(int index);
00087 
00088   virtual void init_geoms();
00089   virtual void render(pvector< PT(PhysicsObject) >& po_vector,
00090                       int ttl_particles);
00091 
00092   virtual void resize_pool(int new_size);
00093   void kill_nodes();
00094 
00095   static PStatCollector _render_collector;
00096 };
00097 
00098 #include "geomParticleRenderer.I"
00099 
00100 #endif // GEOMPARTICLERENDERER_H
 All Classes Functions Variables Enumerations