|
@@ -1,4 +1,4 @@
|
|
|
-// Filename: qpcollisionTraverser.cxx
|
|
|
|
|
|
|
+// Filename: collisionTraverser.cxx
|
|
|
// Created by: drose (16Mar02)
|
|
// Created by: drose (16Mar02)
|
|
|
//
|
|
//
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
@@ -16,67 +16,67 @@
|
|
|
//
|
|
//
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
-#include "qpcollisionTraverser.h"
|
|
|
|
|
-#include "qpcollisionNode.h"
|
|
|
|
|
-#include "qpcollisionEntry.h"
|
|
|
|
|
|
|
+#include "collisionTraverser.h"
|
|
|
|
|
+#include "collisionNode.h"
|
|
|
|
|
+#include "collisionEntry.h"
|
|
|
#include "collisionPolygon.h"
|
|
#include "collisionPolygon.h"
|
|
|
#include "config_collide.h"
|
|
#include "config_collide.h"
|
|
|
|
|
|
|
|
#include "transformState.h"
|
|
#include "transformState.h"
|
|
|
-#include "qpgeomNode.h"
|
|
|
|
|
|
|
+#include "geomNode.h"
|
|
|
#include "geom.h"
|
|
#include "geom.h"
|
|
|
-#include "qpnodePath.h"
|
|
|
|
|
|
|
+#include "nodePath.h"
|
|
|
#include "pStatTimer.h"
|
|
#include "pStatTimer.h"
|
|
|
#include "indent.h"
|
|
#include "indent.h"
|
|
|
|
|
|
|
|
#ifndef CPPPARSER
|
|
#ifndef CPPPARSER
|
|
|
-PStatCollector qpCollisionTraverser::_collisions_pcollector("App:Collisions");
|
|
|
|
|
|
|
+PStatCollector CollisionTraverser::_collisions_pcollector("App:Collisions");
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::Constructor
|
|
|
|
|
|
|
+// Function: CollisionTraverser::Constructor
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-qpCollisionTraverser::
|
|
|
|
|
-qpCollisionTraverser() {
|
|
|
|
|
|
|
+CollisionTraverser::
|
|
|
|
|
+CollisionTraverser() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::Destructor
|
|
|
|
|
|
|
+// Function: CollisionTraverser::Destructor
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-qpCollisionTraverser::
|
|
|
|
|
-~qpCollisionTraverser() {
|
|
|
|
|
|
|
+CollisionTraverser::
|
|
|
|
|
+~CollisionTraverser() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::add_collider
|
|
|
|
|
|
|
+// Function: CollisionTraverser::add_collider
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
-// Description: Adds a new qpCollisionNode, representing an object that
|
|
|
|
|
|
|
+// Description: Adds a new CollisionNode, representing an object that
|
|
|
// will be tested for collisions into other objects,
|
|
// will be tested for collisions into other objects,
|
|
|
// along with the handler that will serve each detected
|
|
// along with the handler that will serve each detected
|
|
|
-// collision. Each qpCollisionNode may be served by only
|
|
|
|
|
|
|
+// collision. Each CollisionNode may be served by only
|
|
|
// one handler at a time, but a given handler may serve
|
|
// one handler at a time, but a given handler may serve
|
|
|
-// many qpCollisionNodes.
|
|
|
|
|
|
|
+// many CollisionNodes.
|
|
|
//
|
|
//
|
|
|
// The handler that serves a particular node may be
|
|
// The handler that serves a particular node may be
|
|
|
// changed from time to time by calling add_collider()
|
|
// changed from time to time by calling add_collider()
|
|
|
// again on the same node.
|
|
// again on the same node.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
-add_collider(qpCollisionNode *node, qpCollisionHandler *handler) {
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
|
|
+add_collider(CollisionNode *node, CollisionHandler *handler) {
|
|
|
nassertv(_ordered_colliders.size() == _colliders.size());
|
|
nassertv(_ordered_colliders.size() == _colliders.size());
|
|
|
- nassertv(node != (qpCollisionNode *)NULL);
|
|
|
|
|
- nassertv(handler != (qpCollisionHandler *)NULL);
|
|
|
|
|
|
|
+ nassertv(node != (CollisionNode *)NULL);
|
|
|
|
|
+ nassertv(handler != (CollisionHandler *)NULL);
|
|
|
|
|
|
|
|
Colliders::iterator ci = _colliders.find(node);
|
|
Colliders::iterator ci = _colliders.find(node);
|
|
|
if (ci != _colliders.end()) {
|
|
if (ci != _colliders.end()) {
|
|
|
// We already knew about this collider.
|
|
// We already knew about this collider.
|
|
|
if ((*ci).second != handler) {
|
|
if ((*ci).second != handler) {
|
|
|
// Change the handler.
|
|
// Change the handler.
|
|
|
- PT(qpCollisionHandler) old_handler = (*ci).second;
|
|
|
|
|
|
|
+ PT(CollisionHandler) old_handler = (*ci).second;
|
|
|
(*ci).second = handler;
|
|
(*ci).second = handler;
|
|
|
|
|
|
|
|
// Now update our own reference counts within our handler set.
|
|
// Now update our own reference counts within our handler set.
|
|
@@ -113,16 +113,16 @@ add_collider(qpCollisionNode *node, qpCollisionHandler *handler) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::remove_collider
|
|
|
|
|
|
|
+// Function: CollisionTraverser::remove_collider
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
// Description: Removes the collider (and its associated handler)
|
|
// Description: Removes the collider (and its associated handler)
|
|
|
-// from the set of qpCollisionNodes that will be tested
|
|
|
|
|
|
|
+// from the set of CollisionNodes that will be tested
|
|
|
// each frame for collisions into other objects.
|
|
// each frame for collisions into other objects.
|
|
|
// Returns true if the definition was found and removed,
|
|
// Returns true if the definition was found and removed,
|
|
|
// false if it wasn't present to begin with.
|
|
// false if it wasn't present to begin with.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-bool qpCollisionTraverser::
|
|
|
|
|
-remove_collider(qpCollisionNode *node) {
|
|
|
|
|
|
|
+bool CollisionTraverser::
|
|
|
|
|
+remove_collider(CollisionNode *node) {
|
|
|
nassertr(_ordered_colliders.size() == _colliders.size(), false);
|
|
nassertr(_ordered_colliders.size() == _colliders.size(), false);
|
|
|
|
|
|
|
|
Colliders::iterator ci = _colliders.find(node);
|
|
Colliders::iterator ci = _colliders.find(node);
|
|
@@ -131,7 +131,7 @@ remove_collider(qpCollisionNode *node) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- qpCollisionHandler *handler = (*ci).second;
|
|
|
|
|
|
|
+ CollisionHandler *handler = (*ci).second;
|
|
|
|
|
|
|
|
// Update the set of handlers.
|
|
// Update the set of handlers.
|
|
|
Handlers::iterator hi = _handlers.find(handler);
|
|
Handlers::iterator hi = _handlers.find(handler);
|
|
@@ -154,37 +154,37 @@ remove_collider(qpCollisionNode *node) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::has_collider
|
|
|
|
|
|
|
+// Function: CollisionTraverser::has_collider
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
// Description: Returns true if the indicated node is current in the
|
|
// Description: Returns true if the indicated node is current in the
|
|
|
// set of nodes that will be tested each frame for
|
|
// set of nodes that will be tested each frame for
|
|
|
// collisions into other objects.
|
|
// collisions into other objects.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-bool qpCollisionTraverser::
|
|
|
|
|
-has_collider(qpCollisionNode *node) const {
|
|
|
|
|
|
|
+bool CollisionTraverser::
|
|
|
|
|
+has_collider(CollisionNode *node) const {
|
|
|
Colliders::const_iterator ci = _colliders.find(node);
|
|
Colliders::const_iterator ci = _colliders.find(node);
|
|
|
return (ci != _colliders.end());
|
|
return (ci != _colliders.end());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::get_num_colliders
|
|
|
|
|
|
|
+// Function: CollisionTraverser::get_num_colliders
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
-// Description: Returns the number of qpCollisionNodes that have been
|
|
|
|
|
|
|
+// Description: Returns the number of CollisionNodes that have been
|
|
|
// added to the traverser via add_collider().
|
|
// added to the traverser via add_collider().
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-int qpCollisionTraverser::
|
|
|
|
|
|
|
+int CollisionTraverser::
|
|
|
get_num_colliders() const {
|
|
get_num_colliders() const {
|
|
|
nassertr(_ordered_colliders.size() == _colliders.size(), 0);
|
|
nassertr(_ordered_colliders.size() == _colliders.size(), 0);
|
|
|
return _ordered_colliders.size();
|
|
return _ordered_colliders.size();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::get_collider
|
|
|
|
|
|
|
+// Function: CollisionTraverser::get_collider
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
-// Description: Returns the nth qpCollisionNode that has been
|
|
|
|
|
|
|
+// Description: Returns the nth CollisionNode that has been
|
|
|
// added to the traverser via add_collider().
|
|
// added to the traverser via add_collider().
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-qpCollisionNode *qpCollisionTraverser::
|
|
|
|
|
|
|
+CollisionNode *CollisionTraverser::
|
|
|
get_collider(int n) const {
|
|
get_collider(int n) const {
|
|
|
nassertr(_ordered_colliders.size() == _colliders.size(), NULL);
|
|
nassertr(_ordered_colliders.size() == _colliders.size(), NULL);
|
|
|
nassertr(n >= 0 && n < (int)_ordered_colliders.size(), NULL);
|
|
nassertr(n >= 0 && n < (int)_ordered_colliders.size(), NULL);
|
|
@@ -192,14 +192,14 @@ get_collider(int n) const {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::get_handler
|
|
|
|
|
|
|
+// Function: CollisionTraverser::get_handler
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
// Description: Returns the handler that is currently assigned to
|
|
// Description: Returns the handler that is currently assigned to
|
|
|
// serve the indicated collision node, or NULL if the
|
|
// serve the indicated collision node, or NULL if the
|
|
|
// node is not on the traverser's set of active nodes.
|
|
// node is not on the traverser's set of active nodes.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-qpCollisionHandler *qpCollisionTraverser::
|
|
|
|
|
-get_handler(qpCollisionNode *node) const {
|
|
|
|
|
|
|
+CollisionHandler *CollisionTraverser::
|
|
|
|
|
+get_handler(CollisionNode *node) const {
|
|
|
Colliders::const_iterator ci = _colliders.find(node);
|
|
Colliders::const_iterator ci = _colliders.find(node);
|
|
|
if (ci != _colliders.end()) {
|
|
if (ci != _colliders.end()) {
|
|
|
return (*ci).second;
|
|
return (*ci).second;
|
|
@@ -208,12 +208,12 @@ get_handler(qpCollisionNode *node) const {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::clear_colliders
|
|
|
|
|
|
|
+// Function: CollisionTraverser::clear_colliders
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
// Description: Completely empties the set of collision nodes and
|
|
// Description: Completely empties the set of collision nodes and
|
|
|
// their associated handlers.
|
|
// their associated handlers.
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
clear_colliders() {
|
|
clear_colliders() {
|
|
|
_colliders.clear();
|
|
_colliders.clear();
|
|
|
_ordered_colliders.clear();
|
|
_ordered_colliders.clear();
|
|
@@ -221,15 +221,15 @@ clear_colliders() {
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::traverse
|
|
|
|
|
|
|
+// Function: CollisionTraverser::traverse
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
-traverse(const qpNodePath &root) {
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
|
|
+traverse(const NodePath &root) {
|
|
|
PStatTimer timer(_collisions_pcollector);
|
|
PStatTimer timer(_collisions_pcollector);
|
|
|
|
|
|
|
|
- qpCollisionLevelState level_state(root);
|
|
|
|
|
|
|
+ CollisionLevelState level_state(root);
|
|
|
prepare_colliders(level_state);
|
|
prepare_colliders(level_state);
|
|
|
|
|
|
|
|
Handlers::iterator hi;
|
|
Handlers::iterator hi;
|
|
@@ -254,32 +254,32 @@ traverse(const qpNodePath &root) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::output
|
|
|
|
|
|
|
+// Function: CollisionTraverser::output
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
output(ostream &out) const {
|
|
output(ostream &out) const {
|
|
|
- out << "qpCollisionTraverser, " << _colliders.size()
|
|
|
|
|
|
|
+ out << "CollisionTraverser, " << _colliders.size()
|
|
|
<< " colliders and " << _handlers.size() << " handlers.\n";
|
|
<< " colliders and " << _handlers.size() << " handlers.\n";
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::write
|
|
|
|
|
|
|
+// Function: CollisionTraverser::write
|
|
|
// Access: Public
|
|
// Access: Public
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
write(ostream &out, int indent_level) const {
|
|
write(ostream &out, int indent_level) const {
|
|
|
indent(out, indent_level)
|
|
indent(out, indent_level)
|
|
|
- << "qpCollisionTraverser, " << _colliders.size()
|
|
|
|
|
|
|
+ << "CollisionTraverser, " << _colliders.size()
|
|
|
<< " colliders and " << _handlers.size() << " handlers:\n";
|
|
<< " colliders and " << _handlers.size() << " handlers:\n";
|
|
|
Colliders::const_iterator ci;
|
|
Colliders::const_iterator ci;
|
|
|
for (ci = _colliders.begin(); ci != _colliders.end(); ++ci) {
|
|
for (ci = _colliders.begin(); ci != _colliders.end(); ++ci) {
|
|
|
- qpCollisionNode *cnode = (*ci).first;
|
|
|
|
|
- qpCollisionHandler *handler = (*ci).second;
|
|
|
|
|
- nassertv(cnode != (qpCollisionNode *)NULL);
|
|
|
|
|
- nassertv(handler != (qpCollisionHandler *)NULL);
|
|
|
|
|
|
|
+ CollisionNode *cnode = (*ci).first;
|
|
|
|
|
+ CollisionHandler *handler = (*ci).second;
|
|
|
|
|
+ nassertv(cnode != (CollisionNode *)NULL);
|
|
|
|
|
+ nassertv(handler != (CollisionHandler *)NULL);
|
|
|
|
|
|
|
|
indent(out, indent_level + 2)
|
|
indent(out, indent_level + 2)
|
|
|
<< *cnode << " handled by " << handler->get_type() << "\n";
|
|
<< *cnode << " handled by " << handler->get_type() << "\n";
|
|
@@ -292,23 +292,23 @@ write(ostream &out, int indent_level) const {
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::prepare_colliders
|
|
|
|
|
|
|
+// Function: CollisionTraverser::prepare_colliders
|
|
|
// Access: Private
|
|
// Access: Private
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
-prepare_colliders(qpCollisionLevelState &level_state) {
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
|
|
+prepare_colliders(CollisionLevelState &level_state) {
|
|
|
level_state.clear();
|
|
level_state.clear();
|
|
|
level_state.reserve(_colliders.size());
|
|
level_state.reserve(_colliders.size());
|
|
|
|
|
|
|
|
int i = 0;
|
|
int i = 0;
|
|
|
while (i < (int)_ordered_colliders.size()) {
|
|
while (i < (int)_ordered_colliders.size()) {
|
|
|
- qpCollisionNode *cnode = _ordered_colliders[i];
|
|
|
|
|
|
|
+ CollisionNode *cnode = _ordered_colliders[i];
|
|
|
|
|
|
|
|
- qpCollisionLevelState::ColliderDef def;
|
|
|
|
|
|
|
+ CollisionLevelState::ColliderDef def;
|
|
|
def._node = cnode;
|
|
def._node = cnode;
|
|
|
- qpNodePath root;
|
|
|
|
|
- qpNodePath cnode_path(cnode);
|
|
|
|
|
|
|
+ NodePath root;
|
|
|
|
|
+ NodePath cnode_path(cnode);
|
|
|
def._space = cnode_path.get_mat(root);
|
|
def._space = cnode_path.get_mat(root);
|
|
|
def._inv_space = root.get_mat(cnode_path);
|
|
def._inv_space = root.get_mat(cnode_path);
|
|
|
|
|
|
|
@@ -335,22 +335,22 @@ prepare_colliders(qpCollisionLevelState &level_state) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::r_traverse
|
|
|
|
|
|
|
+// Function: CollisionTraverser::r_traverse
|
|
|
// Access: Private
|
|
// Access: Private
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
-r_traverse(qpCollisionLevelState &level_state) {
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
|
|
+r_traverse(CollisionLevelState &level_state) {
|
|
|
if (!level_state.any_in_bounds()) {
|
|
if (!level_state.any_in_bounds()) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
level_state.apply_transform();
|
|
level_state.apply_transform();
|
|
|
|
|
|
|
|
PandaNode *node = level_state.node();
|
|
PandaNode *node = level_state.node();
|
|
|
- if (node->is_exact_type(qpCollisionNode::get_class_type())) {
|
|
|
|
|
|
|
+ if (node->is_exact_type(CollisionNode::get_class_type())) {
|
|
|
level_state.reached_collision_node();
|
|
level_state.reached_collision_node();
|
|
|
|
|
|
|
|
- qpCollisionNode *cnode;
|
|
|
|
|
|
|
+ CollisionNode *cnode;
|
|
|
DCAST_INTO_V(cnode, node);
|
|
DCAST_INTO_V(cnode, node);
|
|
|
const BoundingVolume &node_bv = cnode->get_bound();
|
|
const BoundingVolume &node_bv = cnode->get_bound();
|
|
|
const GeometricBoundingVolume *node_gbv = NULL;
|
|
const GeometricBoundingVolume *node_gbv = NULL;
|
|
@@ -358,10 +358,10 @@ r_traverse(qpCollisionLevelState &level_state) {
|
|
|
DCAST_INTO_V(node_gbv, &node_bv);
|
|
DCAST_INTO_V(node_gbv, &node_bv);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- qpCollisionEntry entry;
|
|
|
|
|
|
|
+ CollisionEntry entry;
|
|
|
entry._into_node = cnode;
|
|
entry._into_node = cnode;
|
|
|
entry._into_node_path = level_state.get_node_path();
|
|
entry._into_node_path = level_state.get_node_path();
|
|
|
- entry._into_space = entry._into_node_path.get_mat(qpNodePath());
|
|
|
|
|
|
|
+ entry._into_space = entry._into_node_path.get_mat(NodePath());
|
|
|
|
|
|
|
|
int num_colliders = level_state.get_num_colliders();
|
|
int num_colliders = level_state.get_num_colliders();
|
|
|
for (int c = 0; c < num_colliders; c++) {
|
|
for (int c = 0; c < num_colliders; c++) {
|
|
@@ -373,7 +373,7 @@ r_traverse(qpCollisionLevelState &level_state) {
|
|
|
entry._from = level_state.get_collider(c);
|
|
entry._from = level_state.get_collider(c);
|
|
|
entry._from_space = level_state.get_space(c);
|
|
entry._from_space = level_state.get_space(c);
|
|
|
|
|
|
|
|
- qpNodePath root;
|
|
|
|
|
|
|
+ NodePath root;
|
|
|
const LMatrix4f &into_space_inv =
|
|
const LMatrix4f &into_space_inv =
|
|
|
root.get_mat(entry._into_node_path);
|
|
root.get_mat(entry._into_node_path);
|
|
|
entry._wrt_space = entry._from_space * into_space_inv;
|
|
entry._wrt_space = entry._from_space * into_space_inv;
|
|
@@ -396,7 +396,7 @@ r_traverse(qpCollisionLevelState &level_state) {
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
- qpGeomNode *gnode;
|
|
|
|
|
|
|
+ GeomNode *gnode;
|
|
|
DCAST_INTO_V(gnode, node);
|
|
DCAST_INTO_V(gnode, node);
|
|
|
const BoundingVolume &node_bv = gnode->get_bound();
|
|
const BoundingVolume &node_bv = gnode->get_bound();
|
|
|
const GeometricBoundingVolume *node_gbv = NULL;
|
|
const GeometricBoundingVolume *node_gbv = NULL;
|
|
@@ -404,10 +404,10 @@ r_traverse(qpCollisionLevelState &level_state) {
|
|
|
DCAST_INTO_V(node_gbv, &node_bv);
|
|
DCAST_INTO_V(node_gbv, &node_bv);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- qpCollisionEntry entry;
|
|
|
|
|
|
|
+ CollisionEntry entry;
|
|
|
entry._into_node = gnode;
|
|
entry._into_node = gnode;
|
|
|
entry._into_node_path = level_state.get_node_path();
|
|
entry._into_node_path = level_state.get_node_path();
|
|
|
- entry._into_space = entry._into_node_path.get_mat(qpNodePath());
|
|
|
|
|
|
|
+ entry._into_space = entry._into_node_path.get_mat(NodePath());
|
|
|
|
|
|
|
|
int num_colliders = level_state.get_num_colliders();
|
|
int num_colliders = level_state.get_num_colliders();
|
|
|
for (int c = 0; c < num_colliders; c++) {
|
|
for (int c = 0; c < num_colliders; c++) {
|
|
@@ -417,7 +417,7 @@ r_traverse(qpCollisionLevelState &level_state) {
|
|
|
entry._from = level_state.get_collider(c);
|
|
entry._from = level_state.get_collider(c);
|
|
|
entry._from_space = level_state.get_space(c);
|
|
entry._from_space = level_state.get_space(c);
|
|
|
|
|
|
|
|
- qpNodePath root;
|
|
|
|
|
|
|
+ NodePath root;
|
|
|
const LMatrix4f &into_space_inv =
|
|
const LMatrix4f &into_space_inv =
|
|
|
root.get_mat(entry._into_node_path);
|
|
root.get_mat(entry._into_node_path);
|
|
|
entry._wrt_space = entry._from_space * into_space_inv;
|
|
entry._wrt_space = entry._from_space * into_space_inv;
|
|
@@ -434,18 +434,18 @@ r_traverse(qpCollisionLevelState &level_state) {
|
|
|
|
|
|
|
|
int num_children = node->get_num_children();
|
|
int num_children = node->get_num_children();
|
|
|
for (int i = 0; i < num_children; i++) {
|
|
for (int i = 0; i < num_children; i++) {
|
|
|
- qpCollisionLevelState next_state(level_state, node->get_child(i));
|
|
|
|
|
|
|
+ CollisionLevelState next_state(level_state, node->get_child(i));
|
|
|
r_traverse(next_state);
|
|
r_traverse(next_state);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::compare_collider_to_node
|
|
|
|
|
|
|
+// Function: CollisionTraverser::compare_collider_to_node
|
|
|
// Access: Private
|
|
// Access: Private
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
-compare_collider_to_node(qpCollisionEntry &entry,
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
|
|
+compare_collider_to_node(CollisionEntry &entry,
|
|
|
const GeometricBoundingVolume *from_parent_gbv,
|
|
const GeometricBoundingVolume *from_parent_gbv,
|
|
|
const GeometricBoundingVolume *from_node_gbv,
|
|
const GeometricBoundingVolume *from_node_gbv,
|
|
|
const GeometricBoundingVolume *into_node_gbv) {
|
|
const GeometricBoundingVolume *into_node_gbv) {
|
|
@@ -456,7 +456,7 @@ compare_collider_to_node(qpCollisionEntry &entry,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (within_node_bounds) {
|
|
if (within_node_bounds) {
|
|
|
- qpCollisionNode *cnode;
|
|
|
|
|
|
|
+ CollisionNode *cnode;
|
|
|
DCAST_INTO_V(cnode, entry._into_node);
|
|
DCAST_INTO_V(cnode, entry._into_node);
|
|
|
int num_solids = cnode->get_num_solids();
|
|
int num_solids = cnode->get_num_solids();
|
|
|
for (int s = 0; s < num_solids; s++) {
|
|
for (int s = 0; s < num_solids; s++) {
|
|
@@ -481,12 +481,12 @@ compare_collider_to_node(qpCollisionEntry &entry,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::compare_collider_to_geom_node
|
|
|
|
|
|
|
+// Function: CollisionTraverser::compare_collider_to_geom_node
|
|
|
// Access: Private
|
|
// Access: Private
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
-compare_collider_to_geom_node(qpCollisionEntry &entry,
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
|
|
+compare_collider_to_geom_node(CollisionEntry &entry,
|
|
|
const GeometricBoundingVolume *from_parent_gbv,
|
|
const GeometricBoundingVolume *from_parent_gbv,
|
|
|
const GeometricBoundingVolume *from_node_gbv,
|
|
const GeometricBoundingVolume *from_node_gbv,
|
|
|
const GeometricBoundingVolume *into_node_gbv) {
|
|
const GeometricBoundingVolume *into_node_gbv) {
|
|
@@ -497,7 +497,7 @@ compare_collider_to_geom_node(qpCollisionEntry &entry,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (within_node_bounds) {
|
|
if (within_node_bounds) {
|
|
|
- qpGeomNode *gnode;
|
|
|
|
|
|
|
+ GeomNode *gnode;
|
|
|
DCAST_INTO_V(gnode, entry._into_node);
|
|
DCAST_INTO_V(gnode, entry._into_node);
|
|
|
int num_geoms = gnode->get_num_geoms();
|
|
int num_geoms = gnode->get_num_geoms();
|
|
|
for (int s = 0; s < num_geoms; s++) {
|
|
for (int s = 0; s < num_geoms; s++) {
|
|
@@ -523,12 +523,12 @@ compare_collider_to_geom_node(qpCollisionEntry &entry,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::compare_collider_to_solid
|
|
|
|
|
|
|
+// Function: CollisionTraverser::compare_collider_to_solid
|
|
|
// Access: Private
|
|
// Access: Private
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
-compare_collider_to_solid(qpCollisionEntry &entry,
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
|
|
+compare_collider_to_solid(CollisionEntry &entry,
|
|
|
const GeometricBoundingVolume *from_node_gbv,
|
|
const GeometricBoundingVolume *from_node_gbv,
|
|
|
const GeometricBoundingVolume *solid_gbv) {
|
|
const GeometricBoundingVolume *solid_gbv) {
|
|
|
bool within_solid_bounds = true;
|
|
bool within_solid_bounds = true;
|
|
@@ -545,12 +545,12 @@ compare_collider_to_solid(qpCollisionEntry &entry,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-// Function: qpCollisionTraverser::compare_collider_to_geom
|
|
|
|
|
|
|
+// Function: CollisionTraverser::compare_collider_to_geom
|
|
|
// Access: Private
|
|
// Access: Private
|
|
|
// Description:
|
|
// Description:
|
|
|
////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////
|
|
|
-void qpCollisionTraverser::
|
|
|
|
|
-compare_collider_to_geom(qpCollisionEntry &entry, Geom *geom,
|
|
|
|
|
|
|
+void CollisionTraverser::
|
|
|
|
|
+compare_collider_to_geom(CollisionEntry &entry, Geom *geom,
|
|
|
const GeometricBoundingVolume *from_node_gbv,
|
|
const GeometricBoundingVolume *from_node_gbv,
|
|
|
const GeometricBoundingVolume *geom_gbv) {
|
|
const GeometricBoundingVolume *geom_gbv) {
|
|
|
bool within_geom_bounds = true;
|
|
bool within_geom_bounds = true;
|