*** empty log message ***

This commit is contained in:
David Rose 2000-12-06 02:10:54 +00:00
parent 63c7d213e2
commit 2de90c8caa
2 changed files with 50 additions and 16 deletions

View File

@ -1127,18 +1127,21 @@ make_node(EggGroup *egg_group, NamedNode *parent) {
} else if (cmp_nocase_uh(objecttype, "turnstile") == 0) { } else if (cmp_nocase_uh(objecttype, "turnstile") == 0) {
egg_syntax = "<Collide> { Polyset descend turnstile }"; egg_syntax = "<Collide> { Polyset descend turnstile }";
} else if (cmp_nocase_uh(objecttype, "sphere") == 0) {
egg_syntax = "<Collide> { Sphere descend }";
} else if (cmp_nocase_uh(objecttype, "trigger") == 0) { } else if (cmp_nocase_uh(objecttype, "trigger") == 0) {
egg_syntax = "<Collide> { Polyset descend intangible }"; egg_syntax = "<Collide> { Polyset descend intangible }";
} else if (cmp_nocase_uh(objecttype, "trigger_sphere") == 0) {
egg_syntax = "<Collide> { Sphere descend intangible }";
} else if (cmp_nocase_uh(objecttype, "eye_trigger") == 0) { } else if (cmp_nocase_uh(objecttype, "eye_trigger") == 0) {
egg_syntax = "<Collide> { Polyset descend intangible center }"; egg_syntax = "<Collide> { Polyset descend intangible center }";
} else if (cmp_nocase_uh(objecttype, "bubble") == 0) { } else if (cmp_nocase_uh(objecttype, "bubble") == 0) {
egg_syntax = "<Collide> { Sphere keep descend }"; egg_syntax = "<Collide> { Sphere keep descend }";
} else if (cmp_nocase_uh(objecttype, "missile") == 0) {
egg_syntax = "<Collide> missile { Sphere keep descend event }";
} else if (cmp_nocase_uh(objecttype, "ghost") == 0) { } else if (cmp_nocase_uh(objecttype, "ghost") == 0) {
egg_syntax = "<Scalar> collide-mask { 0 }"; egg_syntax = "<Scalar> collide-mask { 0 }";
@ -1391,19 +1394,19 @@ make_collision_solids(EggGroup *start_group, EggGroup *egg_group,
break; break;
case EggGroup::CST_plane: case EggGroup::CST_plane:
make_collision_plane(egg_group, cnode); make_collision_plane(egg_group, cnode, start_group->get_collide_flags());
break; break;
case EggGroup::CST_polygon: case EggGroup::CST_polygon:
make_collision_polygon(egg_group, cnode); make_collision_polygon(egg_group, cnode, start_group->get_collide_flags());
break; break;
case EggGroup::CST_polyset: case EggGroup::CST_polyset:
make_collision_polyset(egg_group, cnode); make_collision_polyset(egg_group, cnode, start_group->get_collide_flags());
break; break;
case EggGroup::CST_sphere: case EggGroup::CST_sphere:
make_collision_sphere(egg_group, cnode); make_collision_sphere(egg_group, cnode, start_group->get_collide_flags());
break; break;
} }
@ -1425,7 +1428,8 @@ make_collision_solids(EggGroup *start_group, EggGroup *egg_group,
// to the first polygon associated with this group. // to the first polygon associated with this group.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void EggLoader:: 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); EggGroup *geom_group = find_collision_geometry(egg_group);
if (geom_group != (EggGroup *)NULL) { if (geom_group != (EggGroup *)NULL) {
EggGroup::const_iterator ci; EggGroup::const_iterator ci;
@ -1434,6 +1438,7 @@ make_collision_plane(EggGroup *egg_group, CollisionNode *cnode) {
CollisionPlane *csplane = CollisionPlane *csplane =
create_collision_plane(DCAST(EggPolygon, *ci)); create_collision_plane(DCAST(EggPolygon, *ci));
if (csplane != (CollisionPlane *)NULL) { if (csplane != (CollisionPlane *)NULL) {
apply_collision_flags(csplane, flags);
cnode->add_solid(csplane); cnode->add_solid(csplane);
return; return;
} }
@ -1449,7 +1454,9 @@ make_collision_plane(EggGroup *egg_group, CollisionNode *cnode) {
// to the first polygon associated with this group. // to the first polygon associated with this group.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void EggLoader:: 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); EggGroup *geom_group = find_collision_geometry(egg_group);
if (geom_group != (EggGroup *)NULL) { if (geom_group != (EggGroup *)NULL) {
EggGroup::const_iterator ci; EggGroup::const_iterator ci;
@ -1458,6 +1465,7 @@ make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode) {
CollisionPolygon *cspoly = CollisionPolygon *cspoly =
create_collision_polygon(DCAST(EggPolygon, *ci)); create_collision_polygon(DCAST(EggPolygon, *ci));
if (cspoly != (CollisionPolygon *)NULL) { if (cspoly != (CollisionPolygon *)NULL) {
apply_collision_flags(cspoly, flags);
cnode->add_solid(cspoly); cnode->add_solid(cspoly);
return; return;
} }
@ -1473,7 +1481,8 @@ make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode) {
// to the polygons associated with this group. // to the polygons associated with this group.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void EggLoader:: 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); EggGroup *geom_group = find_collision_geometry(egg_group);
if (geom_group != (EggGroup *)NULL) { if (geom_group != (EggGroup *)NULL) {
EggGroup::const_iterator ci; EggGroup::const_iterator ci;
@ -1482,6 +1491,7 @@ make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode) {
CollisionPolygon *cspoly = CollisionPolygon *cspoly =
create_collision_polygon(DCAST(EggPolygon, *ci)); create_collision_polygon(DCAST(EggPolygon, *ci));
if (cspoly != (CollisionPolygon *)NULL) { if (cspoly != (CollisionPolygon *)NULL) {
apply_collision_flags(cspoly, flags);
cnode->add_solid(cspoly); cnode->add_solid(cspoly);
} }
} }
@ -1496,7 +1506,8 @@ make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode) {
// to the polygons associated with this group. // to the polygons associated with this group.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void EggLoader:: 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); EggGroup *geom_group = find_collision_geometry(egg_group);
if (geom_group != (EggGroup *)NULL) { if (geom_group != (EggGroup *)NULL) {
// Collect all of the vertices. // Collect all of the vertices.
@ -1556,11 +1567,27 @@ make_collision_sphere(EggGroup *egg_group, CollisionNode *cnode) {
float radius = sqrtf(radius2); float radius = sqrtf(radius2);
CollisionSphere *cssphere = CollisionSphere *cssphere =
new CollisionSphere(LCAST(float, center), radius); new CollisionSphere(LCAST(float, center), radius);
apply_collision_flags(cssphere, flags);
cnode->add_solid(cssphere); 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 // Function: EggLoader::find_collision_geometry
// Access: Private // Access: Private

View File

@ -12,6 +12,7 @@
#include <eggData.h> #include <eggData.h>
#include <eggTexture.h> #include <eggTexture.h>
#include <eggGroup.h>
#include <texture.h> #include <texture.h>
#include <namedNode.h> #include <namedNode.h>
#include <pt_NamedNode.h> #include <pt_NamedNode.h>
@ -24,12 +25,12 @@
class EggNode; class EggNode;
class EggBin; class EggBin;
class EggGroup;
class EggTable; class EggTable;
class EggPrimitive; class EggPrimitive;
class EggPolygon; class EggPolygon;
class ComputedVerticesMaker; class ComputedVerticesMaker;
class RenderRelation; class RenderRelation;
class CollisionSolid;
class CollisionNode; class CollisionNode;
class CollisionPlane; class CollisionPlane;
class CollisionPolygon; class CollisionPolygon;
@ -86,10 +87,16 @@ private:
void make_collision_solids(EggGroup *start_group, EggGroup *egg_group, void make_collision_solids(EggGroup *start_group, EggGroup *egg_group,
CollisionNode *cnode); CollisionNode *cnode);
void make_collision_plane(EggGroup *egg_group, CollisionNode *cnode); void make_collision_plane(EggGroup *egg_group, CollisionNode *cnode,
void make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode); EggGroup::CollideFlags flags);
void make_collision_polyset(EggGroup *egg_group, CollisionNode *cnode); void make_collision_polygon(EggGroup *egg_group, CollisionNode *cnode,
void make_collision_sphere(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); EggGroup *find_collision_geometry(EggGroup *egg_group);
CollisionPlane *create_collision_plane(EggPolygon *egg_poly); CollisionPlane *create_collision_plane(EggPolygon *egg_poly);
CollisionPolygon *create_collision_polygon(EggPolygon *egg_poly); CollisionPolygon *create_collision_polygon(EggPolygon *egg_poly);