101 lines
4.0 KiB
Plaintext
101 lines
4.0 KiB
Plaintext
// Filename: collisionHandlerPhysical.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: CollisionHandlerPhysical::set_center
|
|
// Access: Published
|
|
// Description: Specifies an arbitrary NodePath that the handler is
|
|
// always considered to be facing. It does not detect
|
|
// collisions with surfaces that appear to be facing
|
|
// away from this NodePath. This works best when the
|
|
// collision surfaces in question are polygons.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CollisionHandlerPhysical::
|
|
set_center(const NodePath ¢er) {
|
|
_center = center;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CollisionHandlerPhysical::clear_center
|
|
// Access: Published
|
|
// Description: Clears the center NodePath specified with set_center.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CollisionHandlerPhysical::
|
|
clear_center() {
|
|
_center = NodePath();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CollisionHandlerPhysical::get_center
|
|
// Access: Published
|
|
// Description: Returns the NodePath specified with set_center, or
|
|
// the empty NodePath if nothing has been specified.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const NodePath &CollisionHandlerPhysical::
|
|
get_center() const {
|
|
return _center;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CollisionHandlerPhysical::has_center
|
|
// Access: Published
|
|
// Description: Returns true if a NodePath has been specified with
|
|
// set_center(), false otherwise.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE bool CollisionHandlerPhysical::
|
|
has_center() const {
|
|
return !_center.is_empty();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CollisionHandlerPhysical::has_contact
|
|
// Access: Public
|
|
// Description: Did the handler make any contacts with anything
|
|
// on the last collision pass? Depending on how your
|
|
// world is setup, this can be used to tell if the
|
|
// handler is out of the world (i.e. out of bounds).
|
|
// That is the original use of this call.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE bool CollisionHandlerPhysical::
|
|
has_contact() const {
|
|
return _has_contact;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CollisionHandlerPhysical::ColliderDef::set_target
|
|
// Access: Public
|
|
// Description:
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CollisionHandlerPhysical::ColliderDef::
|
|
set_target(const NodePath &target, DriveInterface *drive_interface) {
|
|
_target = target;
|
|
_drive_interface = drive_interface;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CollisionHandlerPhysical::ColliderDef::updated_transform
|
|
// Access: Public
|
|
// Description: Called by the handler when it has changed the
|
|
// transform on the target node, this applies the change
|
|
// to the drive interface if one is specified.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CollisionHandlerPhysical::ColliderDef::
|
|
updated_transform() {
|
|
if (_drive_interface != (DriveInterface *)NULL) {
|
|
_drive_interface->set_mat(_target.get_mat());
|
|
_drive_interface->force_dgraph();
|
|
}
|
|
}
|