@@ -449,8 +449,20 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
449
449
// traverse solids
450
450
for (int i = 0 ; i < num_solids; i++) {
451
451
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
+
452
463
if (child->is_of_type (CollisionPolygon::get_class_type ())) {
453
464
egg_group->set_cs_type (EggGroup::CST_polyset);
465
+ egg_group->set_collide_flags (flags);
454
466
455
467
EggPolygon *egg_poly = new EggPolygon;
456
468
egg_group->add_child (egg_poly);
@@ -476,7 +488,6 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
476
488
egg_sphere = egg_group;
477
489
} else {
478
490
egg_sphere = new EggGroup;
479
- egg_sphere->set_collide_flags (EggGroup::CF_descend);
480
491
egg_group->add_child (egg_sphere);
481
492
}
482
493
@@ -485,6 +496,7 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
485
496
} else {
486
497
egg_sphere->set_cs_type (EggGroup::CST_sphere);
487
498
}
499
+ egg_sphere->set_collide_flags (flags);
488
500
489
501
EggVertex ev1, ev2;
490
502
ev1.set_pos (LCAST (double , (center + offset) * net_mat));
@@ -518,10 +530,10 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
518
530
egg_plane = egg_group;
519
531
} else {
520
532
egg_plane = new EggGroup;
521
- egg_plane->set_collide_flags (EggGroup::CF_descend);
522
533
egg_group->add_child (egg_plane);
523
534
}
524
535
egg_plane->set_cs_type (EggGroup::CST_plane);
536
+ egg_plane->set_collide_flags (flags);
525
537
526
538
EggVertex ev0, ev1, ev2;
527
539
ev0.set_pos (LCAST (double , origin * net_mat));
@@ -545,10 +557,10 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
545
557
egg_box = egg_group;
546
558
} else {
547
559
egg_box = new EggGroup;
548
- egg_box->set_collide_flags (EggGroup::CF_descend);
549
560
egg_group->add_child (egg_box);
550
561
}
551
562
egg_box->set_cs_type (EggGroup::CST_box);
563
+ egg_box->set_collide_flags (flags);
552
564
553
565
// Just add the min and max points.
554
566
EggVertex ev0, ev1;
@@ -584,10 +596,10 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
584
596
egg_tube = egg_group;
585
597
} else {
586
598
egg_tube = new EggGroup;
587
- egg_tube->set_collide_flags (EggGroup::CF_descend);
588
599
egg_group->add_child (egg_tube);
589
600
}
590
601
egg_tube->set_cs_type (EggGroup::CST_tube);
602
+ egg_tube->set_collide_flags (flags);
591
603
592
604
// Add two points for the endcaps, and then two points around the
593
605
// centroid to indicate the radius.
0 commit comments