|
|
@@ -41,7 +41,7 @@ TypeHandle CollisionVisualizer::_type_handle;
|
|
|
*
|
|
|
*/
|
|
|
CollisionVisualizer::
|
|
|
-CollisionVisualizer(const string &name) : PandaNode(name) {
|
|
|
+CollisionVisualizer(const string &name) : PandaNode(name), _lock("CollisionVisualizer") {
|
|
|
set_cull_callback();
|
|
|
|
|
|
// We always want to render the CollisionVisualizer node itself (even if it
|
|
|
@@ -51,6 +51,23 @@ CollisionVisualizer(const string &name) : PandaNode(name) {
|
|
|
_normal_scale = 1.0f;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Copy constructor.
|
|
|
+ */
|
|
|
+CollisionVisualizer::
|
|
|
+CollisionVisualizer(const CollisionVisualizer ©) :
|
|
|
+ PandaNode(copy),
|
|
|
+ _lock("CollisionVisualizer"),
|
|
|
+ _point_scale(copy._point_scale),
|
|
|
+ _normal_scale(copy._normal_scale) {
|
|
|
+
|
|
|
+ set_cull_callback();
|
|
|
+
|
|
|
+ // We always want to render the CollisionVisualizer node itself (even if it
|
|
|
+ // doesn't appear to have any geometry within it).
|
|
|
+ set_internal_bounds(new OmniBoundingVolume());
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
*
|
|
|
*/
|
|
|
@@ -64,6 +81,7 @@ CollisionVisualizer::
|
|
|
*/
|
|
|
void CollisionVisualizer::
|
|
|
clear() {
|
|
|
+ LightMutexHolder holder(_lock);
|
|
|
_data.clear();
|
|
|
}
|
|
|
|
|
|
@@ -99,6 +117,8 @@ bool CollisionVisualizer::
|
|
|
cull_callback(CullTraverser *trav, CullTraverserData &data) {
|
|
|
// Now we go through and actually draw our visualized collision solids.
|
|
|
|
|
|
+ LightMutexHolder holder(_lock);
|
|
|
+
|
|
|
Data::const_iterator di;
|
|
|
for (di = _data.begin(); di != _data.end(); ++di) {
|
|
|
const TransformState *net_transform = (*di).first;
|
|
|
@@ -257,6 +277,7 @@ output(ostream &out) const {
|
|
|
void CollisionVisualizer::
|
|
|
begin_traversal() {
|
|
|
CollisionRecorder::begin_traversal();
|
|
|
+ LightMutexHolder holder(_lock);
|
|
|
_data.clear();
|
|
|
}
|
|
|
|
|
|
@@ -271,12 +292,13 @@ collision_tested(const CollisionEntry &entry, bool detected) {
|
|
|
|
|
|
NodePath node_path = entry.get_into_node_path();
|
|
|
CPT(TransformState) net_transform = node_path.get_net_transform();
|
|
|
- const CollisionSolid *solid = entry.get_into();
|
|
|
- nassertv(solid != (CollisionSolid *)NULL);
|
|
|
+ CPT(CollisionSolid) solid = entry.get_into();
|
|
|
+ nassertv(!solid.is_null());
|
|
|
|
|
|
- VizInfo &viz_info = _data[net_transform];
|
|
|
+ LightMutexHolder holder(_lock);
|
|
|
+ VizInfo &viz_info = _data[move(net_transform)];
|
|
|
if (detected) {
|
|
|
- viz_info._solids[solid]._detected_count++;
|
|
|
+ viz_info._solids[move(solid)]._detected_count++;
|
|
|
|
|
|
if (entry.has_surface_point()) {
|
|
|
CollisionPoint p;
|
|
|
@@ -286,7 +308,7 @@ collision_tested(const CollisionEntry &entry, bool detected) {
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
- viz_info._solids[solid]._missed_count++;
|
|
|
+ viz_info._solids[move(solid)]._missed_count++;
|
|
|
}
|
|
|
}
|
|
|
|