Panda3D

sparkleParticleRenderer.h

00001 // Filename: sparkleParticleRenderer.h
00002 // Created by:  charles (27Jun00)
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 SPARKLEPARTICLERENDERER_H
00016 #define SPARKLEPARTICLERENDERER_H
00017 
00018 #include "baseParticle.h"
00019 #include "baseParticleRenderer.h"
00020 #include "pointerTo.h"
00021 #include "pointerToArray.h"
00022 #include "geom.h"
00023 #include "geomVertexData.h"
00024 #include "geomLines.h"
00025 #include "pStatCollector.h"
00026 
00027 enum SparkleParticleLifeScale {
00028   SP_NO_SCALE,
00029   SP_SCALE
00030 };
00031 
00032 ////////////////////////////////////////////////////////////////////
00033 //       Class : SparkleParticleRenderer
00034 // Description : pretty sparkly things.
00035 ////////////////////////////////////////////////////////////////////
00036 class EXPCL_PANDAPHYSICS SparkleParticleRenderer : public BaseParticleRenderer {
00037 PUBLISHED:
00038   enum SparkleParticleLifeScale {
00039     SP_NO_SCALE,
00040     SP_SCALE
00041   };
00042 
00043   SparkleParticleRenderer();
00044   SparkleParticleRenderer(const SparkleParticleRenderer& copy);
00045   SparkleParticleRenderer(const LColor& center,
00046                           const LColor& edge,
00047                           PN_stdfloat birth_radius,
00048                           PN_stdfloat death_radius,
00049                           SparkleParticleLifeScale life_scale,
00050                           ParticleRendererAlphaMode alpha_mode);
00051 
00052   virtual ~SparkleParticleRenderer();
00053 
00054 public:
00055   virtual BaseParticleRenderer *make_copy();
00056 
00057 PUBLISHED:
00058   INLINE void set_center_color(const LColor& c);
00059   INLINE void set_edge_color(const LColor& c);
00060   INLINE void set_birth_radius(PN_stdfloat radius);
00061   INLINE void set_death_radius(PN_stdfloat radius);
00062   INLINE void set_life_scale(SparkleParticleLifeScale);
00063 
00064   INLINE const LColor& get_center_color() const;
00065   INLINE const LColor& get_edge_color() const;
00066   INLINE PN_stdfloat get_birth_radius() const;
00067   INLINE PN_stdfloat get_death_radius() const;
00068   INLINE SparkleParticleLifeScale get_life_scale() const;
00069 
00070   virtual void output(ostream &out) const;
00071   virtual void write(ostream &out, int indent_level = 0) const;
00072 
00073 private:
00074   LColor _center_color;
00075   LColor _edge_color;
00076 
00077   PN_stdfloat _birth_radius;
00078   PN_stdfloat _death_radius;
00079 
00080   PT(Geom) _line_primitive;
00081   PT(GeomLines) _lines;
00082   PT(GeomVertexData) _vdata;
00083 
00084   int _max_pool_size;
00085 
00086   SparkleParticleLifeScale _life_scale;
00087   LPoint3 _aabb_min;
00088   LPoint3 _aabb_max;
00089 
00090   INLINE PN_stdfloat get_radius(BaseParticle *bp);
00091 
00092   virtual void birth_particle(int index);
00093   virtual void kill_particle(int index);
00094   virtual void init_geoms();
00095   virtual void render(pvector< PT(PhysicsObject) >& po_vector,
00096                       int ttl_particles);
00097   virtual void resize_pool(int new_size);
00098 
00099   static PStatCollector _render_collector;
00100 };
00101 
00102 #include "sparkleParticleRenderer.I"
00103 
00104 #endif // SPARKLEPARTICLERENDERER_H
 All Classes Functions Variables Enumerations