From 2de90c8caa87c21fdea427c844e03121108b8ff6 Mon Sep 17 00:00:00 2001 From: David Rose Date: Wed, 6 Dec 2000 02:10:54 +0000 Subject: [PATCH] *** empty log message *** --- panda/src/egg2sg/eggLoader.cxx | 49 ++++++++++++++++++++++++++-------- panda/src/egg2sg/eggLoader.h | 17 ++++++++---- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/panda/src/egg2sg/eggLoader.cxx b/panda/src/egg2sg/eggLoader.cxx index 94bf0f4ccd..3d562cb02a 100644 --- a/panda/src/egg2sg/eggLoader.cxx +++ b/panda/src/egg2sg/eggLoader.cxx @@ -1127,18 +1127,21 @@ make_node(EggGroup *egg_group, NamedNode *parent) { } else if (cmp_nocase_uh(objecttype, "turnstile") == 0) { egg_syntax = " { Polyset descend turnstile }"; + } else if (cmp_nocase_uh(objecttype, "sphere") == 0) { + egg_syntax = " { Sphere descend }"; + } else if (cmp_nocase_uh(objecttype, "trigger") == 0) { egg_syntax = " { Polyset descend intangible }"; + } else if (cmp_nocase_uh(objecttype, "trigger_sphere") == 0) { + egg_syntax = " { Sphere descend intangible }"; + } else if (cmp_nocase_uh(objecttype, "eye_trigger") == 0) { egg_syntax = " { Polyset descend intangible center }"; } else if (cmp_nocase_uh(objecttype, "bubble") == 0) { egg_syntax = " { Sphere keep descend }"; - } else if (cmp_nocase_uh(objecttype, "missile") == 0) { - egg_syntax = " missile { Sphere keep descend event }"; - } else if (cmp_nocase_uh(objecttype, "ghost") == 0) { egg_syntax = " collide-mask { 0 }"; @@ -1391,19 +1394,19 @@ make_collision_solids(EggGroup *start_group, EggGroup *egg_group, break; case EggGroup::CST_plane: - make_collision_plane(egg_group, cnode); + make_collision_plane(egg_group, cnode, start_group->get_collide_flags()); break; case EggGroup::CST_polygon: - make_collision_polygon(egg_group, cnode); + make_collision_polygon(egg_group, cnode, start_group->get_collide_flags()); break; case EggGroup::CST_polyset: - make_collision_polyset(egg_group, cnode); + make_collision_polyset(egg_group, cnode, start_group->get_collide_flags()); break; case EggGroup::CST_sphere: - make_collision_sphere(egg_group, cnode); + make_collision_sphere(egg_group, cnode, start_group->get_collide_flags()); break; } @@ -1425,7 +1428,8 @@ make_collision_solids(EggGroup *start_group, EggGroup *egg_group, // to the first polygon associated with this group. //////////////////////////////////////////////////////////////////// void EggLoader:: -make_collision_plane(EggGroup *egg_group, CollisionNode *cnode) { +make_collision_plane(EggGroup *egg_group, CollisionNode *cnode, + EggGroup::CollideFlags flags) { EggGroup *geom_group = find_collision_geometry(egg_group); if (geom_group != (EggGroup *)NULL) { EggGroup::const_iterator ci; @@ -1434,6 +1438,7 @@ make_collision_plane(EggGroup *egg_group, CollisionNode *cnode) { CollisionPlane *csplane = create_collision_plane(DCAST(EggPolygon, *ci)); if (csplane != (CollisionPlane *)NULL) { + apply_collision_flags(csplane, flags); cnode->add_solid(csplane); return; } @@ -1449,7 +1454,9 @@ make_collision_plane(EggGroup *egg_group, CollisionNode *cnode) { // to the first polygon associated with this group. //////////////////////////////////////////////////////////////////// void EggLoader:: -make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode) { +make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode, + EggGroup::CollideFlags flags) { + EggGroup *geom_group = find_collision_geometry(egg_group); if (geom_group != (EggGroup *)NULL) { EggGroup::const_iterator ci; @@ -1458,6 +1465,7 @@ make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode) { CollisionPolygon *cspoly = create_collision_polygon(DCAST(EggPolygon, *ci)); if (cspoly != (CollisionPolygon *)NULL) { + apply_collision_flags(cspoly, flags); cnode->add_solid(cspoly); return; } @@ -1473,7 +1481,8 @@ make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode) { // to the polygons associated with this group. //////////////////////////////////////////////////////////////////// void EggLoader:: -make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode) { +make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode, + EggGroup::CollideFlags flags) { EggGroup *geom_group = find_collision_geometry(egg_group); if (geom_group != (EggGroup *)NULL) { EggGroup::const_iterator ci; @@ -1482,6 +1491,7 @@ make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode) { CollisionPolygon *cspoly = create_collision_polygon(DCAST(EggPolygon, *ci)); if (cspoly != (CollisionPolygon *)NULL) { + apply_collision_flags(cspoly, flags); cnode->add_solid(cspoly); } } @@ -1496,7 +1506,8 @@ make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode) { // to the polygons associated with this group. //////////////////////////////////////////////////////////////////// void EggLoader:: -make_collision_sphere(EggGroup *egg_group, CollisionNode *cnode) { +make_collision_sphere(EggGroup *egg_group, CollisionNode *cnode, + EggGroup::CollideFlags flags) { EggGroup *geom_group = find_collision_geometry(egg_group); if (geom_group != (EggGroup *)NULL) { // Collect all of the vertices. @@ -1556,11 +1567,27 @@ make_collision_sphere(EggGroup *egg_group, CollisionNode *cnode) { float radius = sqrtf(radius2); CollisionSphere *cssphere = new CollisionSphere(LCAST(float, center), radius); + apply_collision_flags(cssphere, flags); cnode->add_solid(cssphere); } } } +//////////////////////////////////////////////////////////////////// +// Function: EggLoader::apply_collision_flags +// Access: Private +// Description: Does funny stuff to the CollisionSolid as +// appropriate, based on the settings of the given +// CollideFlags. +//////////////////////////////////////////////////////////////////// +void EggLoader:: +apply_collision_flags(CollisionSolid *solid, + EggGroup::CollideFlags flags) { + if ((flags & EggGroup::CF_intangible) != 0) { + solid->set_tangible(false); + } +} + //////////////////////////////////////////////////////////////////// // Function: EggLoader::find_collision_geometry // Access: Private diff --git a/panda/src/egg2sg/eggLoader.h b/panda/src/egg2sg/eggLoader.h index 94c864abbb..6ba545cf69 100644 --- a/panda/src/egg2sg/eggLoader.h +++ b/panda/src/egg2sg/eggLoader.h @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -24,12 +25,12 @@ class EggNode; class EggBin; -class EggGroup; class EggTable; class EggPrimitive; class EggPolygon; class ComputedVerticesMaker; class RenderRelation; +class CollisionSolid; class CollisionNode; class CollisionPlane; class CollisionPolygon; @@ -86,10 +87,16 @@ private: void make_collision_solids(EggGroup *start_group, EggGroup *egg_group, CollisionNode *cnode); - void make_collision_plane(EggGroup *egg_group, CollisionNode *cnode); - void make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode); - void make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode); - void make_collision_sphere(EggGroup *egg_group, CollisionNode *cnode); + void make_collision_plane(EggGroup *egg_group, CollisionNode *cnode, + EggGroup::CollideFlags flags); + void make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode, + EggGroup::CollideFlags flags); + void make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode, + EggGroup::CollideFlags flags); + void make_collision_sphere(EggGroup *egg_group, CollisionNode *cnode, + EggGroup::CollideFlags flags); + void apply_collision_flags(CollisionSolid *solid, + EggGroup::CollideFlags flags); EggGroup *find_collision_geometry(EggGroup *egg_group); CollisionPlane *create_collision_plane(EggPolygon *egg_poly); CollisionPolygon *create_collision_polygon(EggPolygon *egg_poly);