Explorar o código

export particle effects properly

David Rose %!s(int64=24) %!d(string=hai) anos
pai
achega
78bc1e00c3

+ 1 - 1
panda/src/graph/arcChain.h

@@ -120,7 +120,7 @@ protected:
 
 
   // This is a supporting class for iterating through all the arcs via
   // This is a supporting class for iterating through all the arcs via
   // begin() .. end().
   // begin() .. end().
-  class ForwardIterator {
+  class EXPCL_PANDA ForwardIterator {
   public:
   public:
     INLINE_GRAPH ForwardIterator(ArcComponent *comp = NULL);
     INLINE_GRAPH ForwardIterator(ArcComponent *comp = NULL);
     INLINE_GRAPH NodeRelation *operator * () const;
     INLINE_GRAPH NodeRelation *operator * () const;

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

@@ -118,7 +118,9 @@ set_from_node(const NodePath &node_path) {
   // Get the texture off the node.  We use wrt() to determine the net
   // Get the texture off the node.  We use wrt() to determine the net
   // texture that's applied, based on all the arcs from the root; not
   // texture that's applied, based on all the arcs from the root; not
   // just the bottom arc.
   // just the bottom arc.
-  Texture *tex;
+  Texture *tex = (Texture *)NULL;
+
+  /*
   NodeTransitionWrapper ntw(TextureTransition::get_class_type());
   NodeTransitionWrapper ntw(TextureTransition::get_class_type());
   wrt(gnode, geom_node_path.begin(), geom_node_path.end(), 
   wrt(gnode, geom_node_path.begin(), geom_node_path.end(), 
       (Node *)NULL, ntw, RenderRelation::get_class_type());
       (Node *)NULL, ntw, RenderRelation::get_class_type());
@@ -128,6 +130,19 @@ set_from_node(const NodePath &node_path) {
       tex = tt->get_texture();
       tex = tt->get_texture();
     }
     }
   }
   }
+  */
+  // Shoot, wrt() doesn't work across DLL's.  Just walk through the
+  // arcs.
+  NodePath::iterator npi;
+  for (npi = geom_node_path.begin(); npi != geom_node_path.end(); ++npi) {
+    NodeRelation *arc = (*npi);
+    const TextureTransition *tt;
+    if (get_transition_into(tt, arc)) {
+      if (tt->is_on()) {
+        tex = tt->get_texture();
+      }
+    }
+  }
 
 
   if (tex == (Texture *)NULL) {
   if (tex == (Texture *)NULL) {
     particlesystem_cat.error()
     particlesystem_cat.error()