Bläddra i källkod

don't duplicate collision solids

David Rose 21 år sedan
förälder
incheckning
0563079eab
2 ändrade filer med 27 tillägg och 25 borttagningar
  1. 23 23
      panda/src/egg2pg/eggLoader.cxx
  2. 4 2
      panda/src/egg2pg/eggLoader.h

+ 23 - 23
panda/src/egg2pg/eggLoader.cxx

@@ -1847,7 +1847,7 @@ make_node(EggGroup *egg_group, PandaNode *parent) {
     Colorf color;
     float radius;
     
-    if(!make_sphere(egg_group,center,radius,color)) {
+    if (!make_sphere(egg_group, EggGroup::CF_none, center, radius, color)) {
       egg2pg_cat.warning()
         << "Polylight " << egg_group->get_name() << " make_sphere failed!\n";
     }
@@ -2099,9 +2099,10 @@ find_first_polygon(EggGroup *egg_group) {
 //               Polylight sphere. It could be used for other spheres.
 ////////////////////////////////////////////////////////////////////
 bool EggLoader::
-make_sphere(EggGroup *egg_group, LPoint3f &center, float &radius, Colorf &color) {
+make_sphere(EggGroup *egg_group, EggGroup::CollideFlags flags, 
+            LPoint3f &center, float &radius, Colorf &color) {
   bool success=false;
-  EggGroup *geom_group = find_collision_geometry(egg_group);
+  EggGroup *geom_group = find_collision_geometry(egg_group, flags);
   if (geom_group != (EggGroup *)NULL) {
     // Collect all of the vertices.
     pset<EggVertex *> vertices;
@@ -2130,7 +2131,7 @@ make_sphere(EggGroup *egg_group, LPoint3f &center, float &radius, Colorf &color)
 
     if (num_vertices > 0) {
       d_center /= (double)num_vertices;
-	  //egg2pg_cat.debug() << "make_sphere d_center: " << d_center << "\n";
+      //egg2pg_cat.debug() << "make_sphere d_center: " << d_center << "\n";
 
       LMatrix4d mat = egg_group->get_vertex_to_node();
       d_center = d_center * mat;
@@ -2146,15 +2147,15 @@ make_sphere(EggGroup *egg_group, LPoint3f &center, float &radius, Colorf &color)
 
       center = LCAST(float,d_center);
       radius = sqrtf(radius2);
-	  //egg2pg_cat.debug() << "make_sphere radius: " << radius << "\n";
-	  vi = vertices.begin();
-	  EggVertex *clr_vtx = (*vi);
-	  if (clr_vtx->has_color()) {
-	    color = clr_vtx->get_color();
-	  }
-	  else {
-	    color = Colorf(1.0,1.0,1.0,1.0);
-	  }
+
+      //egg2pg_cat.debug() << "make_sphere radius: " << radius << "\n";
+      vi = vertices.begin();
+      EggVertex *clr_vtx = (*vi);
+      if (clr_vtx->has_color()) {
+        color = clr_vtx->get_color();
+      } else {
+        color = Colorf(1.0,1.0,1.0,1.0);
+      }
       success = true;
 
     }
@@ -2226,7 +2227,7 @@ make_collision_solids(EggGroup *start_group, EggGroup *egg_group,
 void EggLoader::
 make_collision_plane(EggGroup *egg_group, CollisionNode *cnode,
                      EggGroup::CollideFlags flags) {
-  EggGroup *geom_group = find_collision_geometry(egg_group);
+  EggGroup *geom_group = find_collision_geometry(egg_group, flags);
   if (geom_group != (EggGroup *)NULL) {
     EggGroup::const_iterator ci;
     for (ci = geom_group->begin(); ci != geom_group->end(); ++ci) {
@@ -2253,7 +2254,7 @@ void EggLoader::
 make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode,
                        EggGroup::CollideFlags flags) {
 
-  EggGroup *geom_group = find_collision_geometry(egg_group);
+  EggGroup *geom_group = find_collision_geometry(egg_group, flags);
   if (geom_group != (EggGroup *)NULL) {
     EggGroup::const_iterator ci;
     for (ci = geom_group->begin(); ci != geom_group->end(); ++ci) {
@@ -2274,7 +2275,7 @@ make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode,
 void EggLoader::
 make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode,
                        EggGroup::CollideFlags flags) {
-  EggGroup *geom_group = find_collision_geometry(egg_group);
+  EggGroup *geom_group = find_collision_geometry(egg_group, flags);
   if (geom_group != (EggGroup *)NULL) {
     EggGroup::const_iterator ci;
     for (ci = geom_group->begin(); ci != geom_group->end(); ++ci) {
@@ -2298,7 +2299,7 @@ make_collision_sphere(EggGroup *egg_group, CollisionNode *cnode,
   LPoint3f center;
   float radius;
   Colorf dummycolor;
-  if (make_sphere(egg_group, center, radius, dummycolor)) {
+  if (make_sphere(egg_group, flags, center, radius, dummycolor)) {
     CollisionSphere *cssphere =
       new CollisionSphere(center, radius);
     apply_collision_flags(cssphere, flags);
@@ -2318,7 +2319,7 @@ make_collision_inv_sphere(EggGroup *egg_group, CollisionNode *cnode,
   LPoint3f center;
   float radius;
   Colorf dummycolor;
-  if (make_sphere(egg_group, center, radius, dummycolor)) {
+  if (make_sphere(egg_group, flags, center, radius, dummycolor)) {
     CollisionInvSphere *cssphere =
       new CollisionInvSphere(center, radius);
     apply_collision_flags(cssphere, flags);
@@ -2335,7 +2336,7 @@ make_collision_inv_sphere(EggGroup *egg_group, CollisionNode *cnode,
 void EggLoader::
 make_collision_tube(EggGroup *egg_group, CollisionNode *cnode,
                     EggGroup::CollideFlags flags) {
-  EggGroup *geom_group = find_collision_geometry(egg_group);
+  EggGroup *geom_group = find_collision_geometry(egg_group, flags);
   if (geom_group != (EggGroup *)NULL) {
     // Collect all of the vertices.
     pset<EggVertex *> vertices;
@@ -2536,8 +2537,7 @@ make_collision_tube(EggGroup *egg_group, CollisionNode *cnode,
 //               CollideFlags.
 ////////////////////////////////////////////////////////////////////
 void EggLoader::
-apply_collision_flags(CollisionSolid *solid,
-                      EggGroup::CollideFlags flags) {
+apply_collision_flags(CollisionSolid *solid, EggGroup::CollideFlags flags) {
   if ((flags & EggGroup::CF_intangible) != 0) {
     solid->set_tangible(false);
   }
@@ -2553,8 +2553,8 @@ apply_collision_flags(CollisionSolid *solid,
 //               that contains the associated collision geometry.
 ////////////////////////////////////////////////////////////////////
 EggGroup *EggLoader::
-find_collision_geometry(EggGroup *egg_group) {
-  if ((egg_group->get_collide_flags() & EggGroup::CF_descend) != 0) {
+find_collision_geometry(EggGroup *egg_group, EggGroup::CollideFlags flags) {
+  if ((flags & EggGroup::CF_descend) != 0) {
     // If we have the "descend" instruction, we'll get to it when we
     // get to it.  Don't worry about it now.
     return egg_group;

+ 4 - 2
panda/src/egg2pg/eggLoader.h

@@ -126,7 +126,8 @@ private:
   void set_portal_polygon(EggGroup *egg_group, PortalNode *pnode);
   EggPolygon *find_first_polygon(EggGroup *egg_group);
 
-  bool make_sphere(EggGroup *start_group, LPoint3f &center, float &radius, Colorf &color);
+  bool make_sphere(EggGroup *start_group, EggGroup::CollideFlags flags,
+                   LPoint3f &center, float &radius, Colorf &color);
 
   void make_collision_solids(EggGroup *start_group, EggGroup *egg_group,
                              CollisionNode *cnode);
@@ -144,7 +145,8 @@ private:
                            EggGroup::CollideFlags flags);
   void apply_collision_flags(CollisionSolid *solid,
                              EggGroup::CollideFlags flags);
-  EggGroup *find_collision_geometry(EggGroup *egg_group);
+  EggGroup *find_collision_geometry(EggGroup *egg_group, 
+                                    EggGroup::CollideFlags flags);
   CollisionPlane *create_collision_plane(EggPolygon *egg_poly,
                                          EggGroup *parent_group);
   void create_collision_polygons(CollisionNode *cnode, EggPolygon *egg_poly,