Panda3D
Loading...
Searching...
No Matches
collisionLevelStateBase.I
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file collisionLevelStateBase.I
10 * @author drose
11 * @date 2002-03-16
12 */
13
14/**
15 *
16 */
17INLINE CollisionLevelStateBase::
18CollisionLevelStateBase(const NodePath &node_path) :
19 _node_path(node_path),
20 _colliders(get_class_type()),
21 _include_mask(CollideMask::all_on())
22{
23}
24
25/**
26 * This constructor goes to the next child node in the traversal.
27 */
28INLINE CollisionLevelStateBase::
29CollisionLevelStateBase(const CollisionLevelStateBase &parent, PandaNode *child) :
30 _node_path(parent._node_path, child),
31 _colliders(parent._colliders),
32 _include_mask(parent._include_mask),
33 _local_bounds(parent._local_bounds)
34{
35}
36
37/**
38 *
39 */
40INLINE CollisionLevelStateBase::
41CollisionLevelStateBase(const CollisionLevelStateBase &copy) :
42 _node_path(copy._node_path),
43 _colliders(copy._colliders),
44 _include_mask(copy._include_mask),
45 _local_bounds(copy._local_bounds),
46 _parent_bounds(copy._parent_bounds)
47{
48}
49
50/**
51 *
52 */
53INLINE void CollisionLevelStateBase::
54operator = (const CollisionLevelStateBase &copy) {
55 _node_path = copy._node_path;
56 _colliders = copy._colliders;
57 _include_mask = copy._include_mask;
58 _local_bounds = copy._local_bounds;
59 _parent_bounds = copy._parent_bounds;
60}
61
62/**
63 * Returns the NodePath representing the node instance we have traversed to.
64 */
66get_node_path() const {
67 return _node_path.get_node_path();
68}
69
70/**
71 * Returns the PandaNode pointer of the node we have traversed to.
72 */
74node() const {
75 return _node_path.node();
76}
77
78/**
79 *
80 */
81INLINE int CollisionLevelStateBase::
82get_num_colliders() const {
83 return _colliders.size();
84}
85
86/**
87 *
88 */
89INLINE const CollisionSolid *CollisionLevelStateBase::
90get_collider(int n) const {
91 nassertr(n >= 0 && n < (int)_colliders.size(), nullptr);
92
93 return _colliders[n]._collider;
94}
95
96/**
97 *
98 */
99INLINE CollisionNode *CollisionLevelStateBase::
100get_collider_node(int n) const {
101 nassertr(n >= 0 && n < (int)_colliders.size(), nullptr);
102
103 return _colliders[n]._node;
104}
105
106/**
107 *
108 */
109INLINE NodePath CollisionLevelStateBase::
110get_collider_node_path(int n) const {
111 nassertr(n >= 0 && n < (int)_colliders.size(), NodePath::fail());
112
113 return _colliders[n]._node_path;
114}
115
116/**
117 * Returns the bounding volume of the indicated collider, transformed into the
118 * current node's transform space.
119 */
121get_local_bound(int n) const {
122 nassertr(n >= 0 && n < (int)_colliders.size(), nullptr);
123 nassertr(n >= 0 && n < (int)_local_bounds.size(), nullptr);
124
125 // For whatever reason, the Intel compiler can't figure this line out.
126 // return _local_bounds[n];
127
128 // But it can figure out this equivalent line.
129 return *(_local_bounds + n);
130}
131
132/**
133 * Returns the bounding volume of the indicated collider, transformed into the
134 * previous node's transform space, but not transformed by the current node's
135 * transform. This is appropriate for testing against the bounding volume of
136 * the current node (which does not have its own transform applied to it).
137 */
139get_parent_bound(int n) const {
140 nassertr(n >= 0 && n < (int)_colliders.size(), nullptr);
141 nassertr(n >= 0 && n < (int)_parent_bounds.size(), nullptr);
142
143 // But it can figure out this equivalent line.
144 return *(_parent_bounds + n);
145}
146
147/**
148 * Specifies the mask that is applied to the into CollideMask of nodes in the
149 * scene graph before testing for bits in common with the from CollideMask of
150 * colliders. This is normally all bits on, but you may set it to some other
151 * mask to restrict certain bits from consideration.
152 *
153 * This is used by the CollisionTraverser to restrict collision with geometry
154 * except under the lowest level of LOD.
155 */
157set_include_mask(CollideMask include_mask) {
158 _include_mask = include_mask;
159}
160
161
162/**
163 * Returns the mask that is applied to the into CollideMask of nodes in the
164 * scene graph before testing for bits in common with the from CollideMask of
165 * colliders. See set_include_mask().
166 */
168get_include_mask() const {
169 return _include_mask;
170}
This is the state information the CollisionTraverser retains for each level during traversal.
const GeometricBoundingVolume * get_parent_bound(int n) const
Returns the bounding volume of the indicated collider, transformed into the previous node's transform...
PandaNode * node() const
Returns the PandaNode pointer of the node we have traversed to.
const GeometricBoundingVolume * get_local_bound(int n) const
Returns the bounding volume of the indicated collider, transformed into the current node's transform ...
void set_include_mask(CollideMask include_mask)
Specifies the mask that is applied to the into CollideMask of nodes in the scene graph before testing...
NodePath get_node_path() const
Returns the NodePath representing the node instance we have traversed to.
CollideMask get_include_mask() const
Returns the mask that is applied to the into CollideMask of nodes in the scene graph before testing f...
A node in the scene graph that can hold any number of CollisionSolids.
The abstract base class for all things that can collide with other things in the world,...
This is another abstract class, for a general class of bounding volumes that actually enclose points ...
NodePath is the fundamental system for disambiguating instances, and also provides a higher-level int...
Definition nodePath.h:159
static NodePath fail()
Creates a NodePath with the ET_fail error type set.
Definition nodePath.I:149
A basic node of the scene graph or data graph.
Definition pandaNode.h:65
PandaNode * node() const
Returns the node traversed to so far.
get_node_path
Constructs and returns an actual NodePath that represents the same path we have just traversed.