-
-
Notifications
You must be signed in to change notification settings - Fork 780
/
bulletDebugNode.h
153 lines (122 loc) · 4 KB
/
bulletDebugNode.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/**
* 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."
*
* @file bulletDebugNode.h
* @author enn0x
* @date 2010-01-23
*/
#ifndef BULLETDEBUGNODE_H
#define BULLETDEBUGNODE_H
#include "pandabase.h"
#include "pandaNode.h"
#include "bullet_includes.h"
class CullTraverser;
class CullTraverserData;
/**
*
*/
class EXPCL_PANDABULLET BulletDebugNode : public PandaNode {
PUBLISHED:
explicit BulletDebugNode(const char *name="debug");
INLINE ~BulletDebugNode();
virtual void draw_mask_changed();
INLINE void show_wireframe(bool show);
INLINE void show_constraints(bool show);
INLINE void show_bounding_boxes(bool show);
INLINE void show_normals(bool show);
INLINE bool get_show_wireframe() const;
INLINE bool get_show_constraints() const;
INLINE bool get_show_bounding_boxes() const;
INLINE bool get_show_normals() const;
MAKE_PROPERTY(wireframe, get_show_wireframe, show_wireframe);
MAKE_PROPERTY(constraints, get_show_constraints, show_constraints);
MAKE_PROPERTY(bounding_boxes, get_show_bounding_boxes, show_bounding_boxes);
MAKE_PROPERTY(normals, get_show_normals, show_normals);
public:
virtual bool safe_to_flatten() const;
virtual bool safe_to_transform() const;
virtual bool safe_to_modify_transform() const;
virtual bool safe_to_combine() const;
virtual bool safe_to_combine_children() const;
virtual bool safe_to_flatten_below() const;
virtual void add_for_draw(CullTraverser *trav, CullTraverserData &data);
private:
void do_sync_b2p(btDynamicsWorld *world);
struct Line {
LVecBase3 _p0;
LVecBase3 _p1;
UnalignedLVecBase4 _color;
};
struct Triangle {
LVecBase3 _p0;
LVecBase3 _p1;
LVecBase3 _p2;
UnalignedLVecBase4 _color;
};
class EXPCL_PANDABULLET DebugDraw : public btIDebugDraw {
public:
DebugDraw() {};
virtual void setDebugMode(int mode);
virtual int getDebugMode() const;
virtual void reportErrorWarning(const char *warning);
virtual void drawLine(const btVector3 &from, const btVector3 &to,
const btVector3 &color);
virtual void drawContactPoint(const btVector3 &point,
const btVector3 &normal, btScalar distance, int lifetime,
const btVector3 &color);
virtual void draw3dText(const btVector3 &location, const char *text);
virtual void drawTriangle(const btVector3 &v0, const btVector3 &v1,
const btVector3 &v2, const btVector3 &color, btScalar);
virtual void drawTriangle(const btVector3 &v0, const btVector3 &v1,
const btVector3 &v2, const btVector3 &n0, const btVector3 &n1,
const btVector3 &n2, const btVector3 &color, btScalar alpha);
virtual void drawSphere(btScalar radius, const btTransform &transform,
const btVector3 &color);
public:
pvector<Line> _lines;
pvector<Triangle> _triangles;
bool _normals;
int _mode;
};
DebugDraw _drawer;
bool _debug_stale;
btDynamicsWorld *_debug_world;
PT(Geom) _debug_lines;
PT(Geom) _debug_triangles;
bool _wireframe;
bool _constraints;
bool _bounds;
friend class BulletWorld;
static PStatCollector _pstat_debug;
public:
static void register_with_read_factory();
virtual void write_datagram(BamWriter *manager, Datagram &dg);
protected:
static TypedWritable *make_from_bam(const FactoryParams ¶ms);
void fillin(DatagramIterator &scan, BamReader *manager);
public:
static TypeHandle get_class_type() {
return _type_handle;
}
static void init_type() {
PandaNode::init_type();
register_type(_type_handle, "BulletDebugNode",
PandaNode::get_class_type());
}
virtual TypeHandle get_type() const {
return get_class_type();
}
virtual TypeHandle force_init_type() {
init_type();
return get_class_type();
}
private:
static TypeHandle _type_handle;
};
#include "bulletDebugNode.I"
#endif // BULLETDEBUGNODE_H