| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- // Filename: collisionNode.I
- // Created by: drose (16Mar02)
- //
- ////////////////////////////////////////////////////////////////////
- //
- // PANDA 3D SOFTWARE
- // Copyright (c) Carnegie Mellon University. All rights reserved.
- //
- // All use of this software is subject to the terms of the revised BSD
- // license. You should have received a copy of this license along
- // with this source code in a file named "LICENSE."
- //
- ////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::set_collide_mask
- // Access: Published
- // Description: Simultaneously sets both the "from" and "into"
- // CollideMask values to the same thing.
- ////////////////////////////////////////////////////////////////////
- INLINE void CollisionNode::
- set_collide_mask(CollideMask mask) {
- set_from_collide_mask(mask);
- set_into_collide_mask(mask);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::set_into_collide_mask
- // Access: Published
- // Description: Sets the "into" CollideMask. In order for a
- // collision to be detected from another object into
- // this object, the intersection of the other object's
- // "from" mask and this object's "into" mask must be
- // nonzero.
- ////////////////////////////////////////////////////////////////////
- INLINE void CollisionNode::
- set_into_collide_mask(CollideMask mask) {
- // This is now inherited from the PandaNode base class.
- PandaNode::set_into_collide_mask(mask);
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::get_from_collide_mask
- // Access: Published
- // Description: Returns the current "from" CollideMask. In order for
- // a collision to be detected from this object into
- // another object, the intersection of this object's
- // "from" mask and the other object's "into" mask must
- // be nonzero.
- ////////////////////////////////////////////////////////////////////
- INLINE CollideMask CollisionNode::
- get_from_collide_mask() const {
- return _from_collide_mask;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::get_into_collide_mask
- // Access: Published
- // Description: Returns the current "into" CollideMask. In order for
- // a collision to be detected from another object into
- // this object, the intersection of the other object's
- // "from" mask and this object's "into" mask must be
- // nonzero.
- ////////////////////////////////////////////////////////////////////
- INLINE CollideMask CollisionNode::
- get_into_collide_mask() const {
- // This is now inherited from the PandaNode base class.
- return PandaNode::get_into_collide_mask();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::clear_solids
- // Access: Published
- // Description: Removes all solids from the node.
- ////////////////////////////////////////////////////////////////////
- INLINE void CollisionNode::
- clear_solids() {
- _solids.clear();
- mark_internal_bounds_stale();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::get_num_solids
- // Access: Published
- // Description:
- ////////////////////////////////////////////////////////////////////
- INLINE int CollisionNode::
- get_num_solids() const {
- return _solids.size();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::get_solid
- // Access: Published
- // Description:
- ////////////////////////////////////////////////////////////////////
- INLINE CPT(CollisionSolid) CollisionNode::
- get_solid(int n) const {
- nassertr(n >= 0 && n < get_num_solids(), NULL);
- return _solids[n].get_read_pointer();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::modify_solid
- // Access: Published
- // Description:
- ////////////////////////////////////////////////////////////////////
- INLINE PT(CollisionSolid) CollisionNode::
- modify_solid(int n) {
- nassertr(n >= 0 && n < get_num_solids(), NULL);
- mark_internal_bounds_stale();
- return _solids[n].get_write_pointer();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::set_solid
- // Access: Published
- // Description: Replaces the solid with the indicated index.
- ////////////////////////////////////////////////////////////////////
- INLINE void CollisionNode::
- set_solid(int n, CollisionSolid *solid) {
- nassertv(n >= 0 && n < get_num_solids());
- _solids[n] = solid;
- mark_internal_bounds_stale();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::remove_solid
- // Access: Published
- // Description: Removes the solid with the indicated index. This
- // will shift all subsequent indices down by one.
- ////////////////////////////////////////////////////////////////////
- INLINE void CollisionNode::
- remove_solid(int n) {
- nassertv(n >= 0 && n < get_num_solids());
- _solids.erase(_solids.begin() + n);
- mark_internal_bounds_stale();
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::add_solid
- // Access: Published
- // Description: Adds the indicated solid to the node. Returns the
- // index of the new solid within the node's list of
- // solids.
- ////////////////////////////////////////////////////////////////////
- INLINE int CollisionNode::
- add_solid(const CollisionSolid *solid) {
- _solids.push_back((CollisionSolid *)solid);
- mark_internal_bounds_stale();
- return _solids.size() - 1;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::get_collider_sort
- // Access: Published
- // Description: Returns the collider_sort value that has been set for
- // this particular node. See set_collider_sort().
- ////////////////////////////////////////////////////////////////////
- INLINE int CollisionNode::
- get_collider_sort() const {
- return _collider_sort;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::set_collider_sort
- // Access: Published
- // Description: Sets a particular collider_sort value on this node.
- // This controls the order in which colliders (that is,
- // "from nodes") are grouped together for the collision
- // traversal.
- //
- // If there are 32 or fewer colliders added to any
- // particular CollisionTraverser, then this value has no
- // meaning. It is only useful if there are many
- // colliders, which may force the CollisionTraverser to
- // make multiple passes through the data; in that case,
- // it may be a useful optimization to group colliders
- // that have similar bounding volumes together (by
- // giving them similar sort values).
- ////////////////////////////////////////////////////////////////////
- INLINE void CollisionNode::
- set_collider_sort(int sort) {
- _collider_sort = sort;
- }
- ////////////////////////////////////////////////////////////////////
- // Function: CollisionNode::get_default_collide_mask
- // Access: Published, Static
- // Description: Returns the default into_collide_mask assigned to new
- // CollisionNodes.
- ////////////////////////////////////////////////////////////////////
- INLINE CollideMask CollisionNode::
- get_default_collide_mask() {
- return default_collision_node_collide_mask;
- }
|