Skip to content

Commit ea82d9d

Browse files
committed
Preserve "intangible" and "level" collide flags in bam2egg
1 parent e2fe951 commit ea82d9d

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

doc/ReleaseNotes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ This issue fixes several bugs that were still found in 1.9.2.
3232
* Fix RAM caching of 2D texture arrays
3333
* Fix Ctrl+C interrupt propagation to runtime applications
3434
* Support for InvSphere, Box and Tube solids in bam2egg
35+
* Preserve "intangible" and "level" collide flags in bam2egg
3536
* Add normalized() method to vectors
3637
* asyncFlattenStrong with inPlace=True caused node to disappear
3738
* Fix asyncFlattenStrong called on nodes without parent

panda/src/egg2pg/eggSaver.cxx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,20 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
449449
// traverse solids
450450
for (int i = 0; i < num_solids; i++) {
451451
CPT(CollisionSolid) child = node->get_solid(i);
452+
int flags = EggGroup::CF_descend;
453+
454+
if (!child->is_tangible()) {
455+
flags |= EggGroup::CF_intangible;
456+
}
457+
458+
if (child->has_effective_normal() &&
459+
child->get_effective_normal() == LVector3::up()) {
460+
flags |= EggGroup::CF_level;
461+
}
462+
452463
if (child->is_of_type(CollisionPolygon::get_class_type())) {
453464
egg_group->set_cs_type(EggGroup::CST_polyset);
465+
egg_group->set_collide_flags(flags);
454466

455467
EggPolygon *egg_poly = new EggPolygon;
456468
egg_group->add_child(egg_poly);
@@ -476,7 +488,6 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
476488
egg_sphere = egg_group;
477489
} else {
478490
egg_sphere = new EggGroup;
479-
egg_sphere->set_collide_flags(EggGroup::CF_descend);
480491
egg_group->add_child(egg_sphere);
481492
}
482493

@@ -485,6 +496,7 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
485496
} else {
486497
egg_sphere->set_cs_type(EggGroup::CST_sphere);
487498
}
499+
egg_sphere->set_collide_flags(flags);
488500

489501
EggVertex ev1, ev2;
490502
ev1.set_pos(LCAST(double, (center + offset) * net_mat));
@@ -518,10 +530,10 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
518530
egg_plane = egg_group;
519531
} else {
520532
egg_plane = new EggGroup;
521-
egg_plane->set_collide_flags(EggGroup::CF_descend);
522533
egg_group->add_child(egg_plane);
523534
}
524535
egg_plane->set_cs_type(EggGroup::CST_plane);
536+
egg_plane->set_collide_flags(flags);
525537

526538
EggVertex ev0, ev1, ev2;
527539
ev0.set_pos(LCAST(double, origin * net_mat));
@@ -545,10 +557,10 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
545557
egg_box = egg_group;
546558
} else {
547559
egg_box = new EggGroup;
548-
egg_box->set_collide_flags(EggGroup::CF_descend);
549560
egg_group->add_child(egg_box);
550561
}
551562
egg_box->set_cs_type(EggGroup::CST_box);
563+
egg_box->set_collide_flags(flags);
552564

553565
// Just add the min and max points.
554566
EggVertex ev0, ev1;
@@ -584,10 +596,10 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
584596
egg_tube = egg_group;
585597
} else {
586598
egg_tube = new EggGroup;
587-
egg_tube->set_collide_flags(EggGroup::CF_descend);
588599
egg_group->add_child(egg_tube);
589600
}
590601
egg_tube->set_cs_type(EggGroup::CST_tube);
602+
egg_tube->set_collide_flags(flags);
591603

592604
// Add two points for the endcaps, and then two points around the
593605
// centroid to indicate the radius.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy