Browse Source

determine where texture was set from

David Rose 24 năm trước cách đây
mục cha
commit
71f8b354bd

+ 15 - 0
panda/src/particlesystem/spriteParticleRenderer.I

@@ -16,6 +16,18 @@
 //
 ////////////////////////////////////////////////////////////////////
 
+////////////////////////////////////////////////////////////////////
+//    Function : SpriteParticleRenderer::get_source_type
+//      Access : public
+// Description : Returns an indication of whether the texture for this
+//               renderer was set via a call to set_texture(), or via
+//               set_from_node().
+////////////////////////////////////////////////////////////////////
+INLINE SpriteParticleRenderer::SourceType SpriteParticleRenderer::
+get_source_type() const {
+  return _source_type;
+}
+
 ////////////////////////////////////////////////////////////////////
 // Function : SpriteParticleRenderer::set_texture
 //   Access : public
@@ -23,6 +35,9 @@
 INLINE void SpriteParticleRenderer::
 set_texture(Texture *tex) {
   _sprite_primitive->set_texture(tex);
+  _sprite_primitive->set_ll_uv(TexCoordf(0.0, 0.0));
+  _sprite_primitive->set_ur_uv(TexCoordf(0.0, 0.0));
+  _source_type = ST_texture;
 }
 
 ////////////////////////////////////////////////////////////////////

+ 1 - 0
panda/src/particlesystem/spriteParticleRenderer.cxx

@@ -192,6 +192,7 @@ set_from_node(const NodePath &node_path) {
   set_texture(tex);
   set_ll_uv(min_uv);
   set_ur_uv(max_uv);
+  _source_type = ST_from_node;
 }
 
 ////////////////////////////////////////////////////////////////////

+ 13 - 0
panda/src/particlesystem/spriteParticleRenderer.h

@@ -38,6 +38,16 @@ class NodePath;
 //               trick sprites.
 ////////////////////////////////////////////////////////////////////
 class EXPCL_PANDAPHYSICS SpriteParticleRenderer : public BaseParticleRenderer {
+
+PUBLISHED:
+  // This enumerated type indicates the source of the sprite texture:
+  // whether it came from an explicit call to set_texture(), or
+  // whether from a call to set_from_node().
+  enum SourceType {
+    ST_texture,
+    ST_from_node,
+  };
+
 private:
   PT(GeomSprite) _sprite_primitive;
   PTA_Vertexf _vertex_array;
@@ -60,6 +70,7 @@ private:
   Vertexf _aabb_min, _aabb_max;
 
   int _pool_size;
+  SourceType _source_type;
 
   virtual void birth_particle(int index);
   virtual void kill_particle(int index);
@@ -75,6 +86,8 @@ PUBLISHED:
 
   virtual BaseParticleRenderer *make_copy(void);
 
+  INLINE SourceType get_source_type() const;
+
   void set_from_node(const NodePath &node_path);
 
   INLINE void set_texture(Texture *tex);