Box2D: b2Fixture.h Source File

Box2D 2.3.0 A 2D Physics Engine for Games

- Main Page
- Classes
- Files

- File List
- File Members

b2Fixture.h
1 /*
2 * Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
3 *
4 * This software is provided 'as-is', without any express or implied
5 * warranty. In no event will the authors be held liable for any damages
6 * arising from the use of this software.
7 * Permission is granted to anyone to use this software for any purpose,
8 * including commercial applications, and to alter it and redistribute it
9 * freely, subject to the following restrictions:
10 * 1. The origin of this software must not be misrepresented; you must not
11 * claim that you wrote the original software. If you use this software
12 * in a product, an acknowledgment in the product documentation would be
13 * appreciated but is not required.
14 * 2. Altered source versions must be plainly marked as such, and must not be
15 * misrepresented as being the original software.
16 * 3. This notice may not be removed or altered from any source distribution.
17 */
18
19 #ifndef B2_FIXTURE_H
20 #define B2_FIXTURE_H
21
22 #include <Box2D/Dynamics/b2Body.h>
23 #include <Box2D/Collision/b2Collision.h>
24 #include <Box2D/Collision/Shapes/b2Shape.h>
25
26 class b2BlockAllocator;
27 class b2Body;
28 class b2BroadPhase;
29 class b2Fixture;
30
32 struct b2Filter
33 {
34 b2Filter()
35 {
36 categoryBits = 0x0001;
37 maskBits = 0xFFFF;
38 groupIndex = 0;
39 }
40
42 uint16 categoryBits;
43
46 uint16 maskBits;
47
51 int16 groupIndex;
52 };
53
56 struct b2FixtureDef
57 {
59 b2FixtureDef()
60 {
61 shape = NULL;
62 userData = NULL;
63 friction = 0.2f;
64 restitution = 0.0f;
65 density = 0.0f;
66 isSensor = false;
67 }
68
71 const b2Shape* shape;
72
74 void* userData;
75
77 float32 friction;
78
80 float32 restitution;
81
83 float32 density;
84
87 bool isSensor;
88
90 b2Filter filter;
91 };
92
94 struct b2FixtureProxy
95 {
96 b2AABB aabb;
97 b2Fixture* fixture;
98 int32 childIndex;
99 int32 proxyId;
100 };
101
107 class b2Fixture
108 {
109 public:
112 b2Shape::Type GetType() const;
113
117 b2Shape* GetShape();
118 const b2Shape* GetShape() const;
119
121 void SetSensor(bool sensor);
122
125 bool IsSensor() const;
126
130 void SetFilterData(const b2Filter& filter);
131
133 const b2Filter& GetFilterData() const;
134
136 void Refilter();
137
140 b2Body* GetBody();
141 const b2Body* GetBody() const;
142
145 b2Fixture* GetNext();
146 const b2Fixture* GetNext() const;
147
150 void* GetUserData() const;
151
153 void SetUserData(void* data);
154
157 bool TestPoint(const b2Vec2& p) const;
158
162 bool RayCast(b2RayCastOutput* output, const b2RayCastInput& input, int32 childIndex) const;
163
167 void GetMassData(b2MassData* massData) const;
168
171 void SetDensity(float32 density);
172
174 float32 GetDensity() const;
175
177 float32 GetFriction() const;
178
181 void SetFriction(float32 friction);
182
184 float32 GetRestitution() const;
185
188 void SetRestitution(float32 restitution);
189
193 const b2AABB& GetAABB(int32 childIndex) const;
194
196 void Dump(int32 bodyIndex);
197
198 protected:
199
200 friend class b2Body;
201 friend class b2World;
202 friend class b2Contact;
203 friend class b2ContactManager;
204
205 b2Fixture();
206
207 // We need separation create/destroy functions from the constructor/destructor because
208 // the destructor cannot access the allocator (no destructor arguments allowed by C++).
209 void Create(b2BlockAllocator* allocator, b2Body* body, const b2FixtureDef* def);
210 void Destroy(b2BlockAllocator* allocator);
211
212 // These support body activation/deactivation.
213 void CreateProxies(b2BroadPhase* broadPhase, const b2Transform& xf);
214 void DestroyProxies(b2BroadPhase* broadPhase);
215
216 void Synchronize(b2BroadPhase* broadPhase, const b2Transform& xf1, const b2Transform& xf2);
217
218 float32 m_density;
219
220 b2Fixture* m_next;
221 b2Body* m_body;
222
223 b2Shape* m_shape;
224
225 float32 m_friction;
226 float32 m_restitution;
227
228 b2FixtureProxy* m_proxies;
229 int32 m_proxyCount;
230
231 b2Filter m_filter;
232
233 bool m_isSensor;
234
235 void* m_userData;
236 };
237
238 inline b2Shape::Type b2Fixture::GetType() const
239 {
240 return m_shape->GetType();
241 }
242
243 inline b2Shape* b2Fixture::GetShape()
244 {
245 return m_shape;
246 }
247
248 inline const b2Shape* b2Fixture::GetShape() const
249 {
250 return m_shape;
251 }
252
253 inline bool b2Fixture::IsSensor() const
254 {
255 return m_isSensor;
256 }
257
258 inline const b2Filter& b2Fixture::GetFilterData() const
259 {
260 return m_filter;
261 }
262
263 inline void* b2Fixture::GetUserData() const
264 {
265 return m_userData;
266 }
267
268 inline void b2Fixture::SetUserData(void* data)
269 {
270 m_userData = data;
271 }
272
273 inline b2Body* b2Fixture::GetBody()
274 {
275 return m_body;
276 }
277
278 inline const b2Body* b2Fixture::GetBody() const
279 {
280 return m_body;
281 }
282
283 inline b2Fixture* b2Fixture::GetNext()
284 {
285 return m_next;
286 }
287
288 inline const b2Fixture* b2Fixture::GetNext() const
289 {
290 return m_next;
291 }
292
293 inline void b2Fixture::SetDensity(float32 density)
294 {
295 b2Assert(b2IsValid(density) && density >= 0.0f);
296 m_density = density;
297 }
298
299 inline float32 b2Fixture::GetDensity() const
300 {
301 return m_density;
302 }
303
304 inline float32 b2Fixture::GetFriction() const
305 {
306 return m_friction;
307 }
308
309 inline void b2Fixture::SetFriction(float32 friction)
310 {
311 m_friction = friction;
312 }
313
314 inline float32 b2Fixture::GetRestitution() const
315 {
316 return m_restitution;
317 }
318
319 inline void b2Fixture::SetRestitution(float32 restitution)
320 {
321 m_restitution = restitution;
322 }
323
324 inline bool b2Fixture::TestPoint(const b2Vec2& p) const
325 {
326 return m_shape->TestPoint(m_body->GetTransform(), p);
327 }
328
329 inline bool b2Fixture::RayCast(b2RayCastOutput* output, const b2RayCastInput& input, int32 childIndex) const
330 {
331 return m_shape->RayCast(output, input, m_body->GetTransform(), childIndex);
332 }
333
334 inline void b2Fixture::GetMassData(b2MassData* massData) const
335 {
336 m_shape->ComputeMass(massData, m_density);
337 }
338
339 inline const b2AABB& b2Fixture::GetAABB(int32 childIndex) const
340 {
341 b2Assert(0 <= childIndex && childIndex < m_proxyCount);
342 return m_proxies[childIndex].aabb;
343 }
344
345 #endif
b2Transform
Definition: b2Math.h:350
b2Fixture::GetAABB
const b2AABB & GetAABB(int32 childIndex) const
Definition: b2Fixture.h:339
b2Shape::GetType
Type GetType() const
Definition: b2Shape.h:96
b2FixtureDef::filter
b2Filter filter
Contact filtering data.
Definition: b2Fixture.h:90
b2Fixture::GetNext
b2Fixture * GetNext()
Definition: b2Fixture.h:283
b2Fixture::SetRestitution
void SetRestitution(float32 restitution)
Definition: b2Fixture.h:319
b2BroadPhase
Definition: b2BroadPhase.h:36
b2Fixture::RayCast
bool RayCast(b2RayCastOutput *output, const b2RayCastInput &input, int32 childIndex) const
Definition: b2Fixture.h:329
b2FixtureDef::userData
void * userData
Use this to store application specific fixture data.
Definition: b2Fixture.h:74
b2FixtureDef::isSensor
bool isSensor
Definition: b2Fixture.h:87
b2Fixture::GetMassData
void GetMassData(b2MassData *massData) const
Definition: b2Fixture.h:334
b2World
Definition: b2World.h:41
b2FixtureProxy
This proxy is used internally to connect fixtures to the broad-phase.
Definition: b2Fixture.h:94
b2Fixture::SetFriction
void SetFriction(float32 friction)
Definition: b2Fixture.h:309
b2Filter::categoryBits
uint16 categoryBits
The collision category bits. Normally you would just set one bit.
Definition: b2Fixture.h:42
b2FixtureDef::restitution
float32 restitution
The restitution (elasticity) usually in the range [0,1].
Definition: b2Fixture.h:80
b2Fixture::GetFriction
float32 GetFriction() const
Get the coefficient of friction.
Definition: b2Fixture.h:304
b2BlockAllocator
Definition: b2BlockAllocator.h:35
b2MassData
This holds the mass data computed for a shape.
Definition: b2Shape.h:27
b2Shape
Definition: b2Shape.h:42
b2Collision.h
b2Fixture::GetDensity
float32 GetDensity() const
Get the density of this fixture.
Definition: b2Fixture.h:299
b2Fixture::GetType
b2Shape::Type GetType() const
Definition: b2Fixture.h:238
b2RayCastOutput
Definition: b2Collision.h:155
b2Fixture::IsSensor
bool IsSensor() const
Definition: b2Fixture.h:253
b2Fixture::GetBody
b2Body * GetBody()
Definition: b2Fixture.h:273
b2Fixture::GetShape
b2Shape * GetShape()
Definition: b2Fixture.h:243
b2FixtureDef
Definition: b2Fixture.h:56
b2Filter::groupIndex
int16 groupIndex
Definition: b2Fixture.h:51
b2AABB
An axis aligned bounding box.
Definition: b2Collision.h:162
b2Fixture::GetFilterData
const b2Filter & GetFilterData() const
Get the contact filtering data.
Definition: b2Fixture.h:258
b2Fixture::SetFilterData
void SetFilterData(const b2Filter &filter)
Definition: b2Fixture.cpp:176
b2RayCastInput
Ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1).
Definition: b2Collision.h:147
b2Fixture::SetSensor
void SetSensor(bool sensor)
Set if this fixture is a sensor.
Definition: b2Fixture.cpp:220
b2Fixture::Refilter
void Refilter()
Call this if you want to establish collision that was previously disabled by b2ContactFilter::ShouldC...
Definition: b2Fixture.cpp:183
b2Filter::maskBits
uint16 maskBits
Definition: b2Fixture.h:46
b2Body
A rigid body. These are created via b2World::CreateBody.
Definition: b2Body.h:126
b2Fixture::GetRestitution
float32 GetRestitution() const
Get the coefficient of restitution.
Definition: b2Fixture.h:314
b2FixtureDef::b2FixtureDef
b2FixtureDef()
The constructor sets the default fixture definition values.
Definition: b2Fixture.h:59
b2Fixture::SetDensity
void SetDensity(float32 density)
Definition: b2Fixture.h:293
b2FixtureDef::shape
const b2Shape * shape
Definition: b2Fixture.h:71
b2Body::GetTransform
const b2Transform & GetTransform() const
Definition: b2Body.h:474
b2Shape::RayCast
virtual bool RayCast(b2RayCastOutput *output, const b2RayCastInput &input, const b2Transform &transform, int32 childIndex) const =0
b2Shape::ComputeMass
virtual void ComputeMass(b2MassData *massData, float32 density) const =0
b2Vec2
A 2D column vector.
Definition: b2Math.h:53
b2Contact
Definition: b2Contact.h:77
b2Fixture::GetUserData
void * GetUserData() const
Definition: b2Fixture.h:263
b2Fixture::SetUserData
void SetUserData(void *data)
Set the user data. Use this to store your application specific data.
Definition: b2Fixture.h:268
b2Filter
This holds contact filtering data.
Definition: b2Fixture.h:32
b2ContactManager
Definition: b2ContactManager.h:30
b2Fixture::TestPoint
bool TestPoint(const b2Vec2 &p) const
Definition: b2Fixture.h:324
b2FixtureDef::density
float32 density
The density, usually in kg/m^2.
Definition: b2Fixture.h:83
b2FixtureDef::friction
float32 friction
The friction coefficient, usually in the range [0,1].
Definition: b2Fixture.h:77
b2Fixture::Dump
void Dump(int32 bodyIndex)
Dump this fixture to the log file.
Definition: b2Fixture.cpp:229
b2Shape::TestPoint
virtual bool TestPoint(const b2Transform &xf, const b2Vec2 &p) const =0
b2Fixture
Definition: b2Fixture.h:107