LiquidFun
Main Page
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
Dynamics
Contacts
b2ContactSolver.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_CONTACT_SOLVER_H
20
#define B2_CONTACT_SOLVER_H
21
22
#include <Box2D/Common/b2Math.h>
23
#include <
Box2D/Collision/b2Collision.h
>
24
#include <Box2D/Dynamics/b2TimeStep.h>
25
26
class
b2Contact
;
27
class
b2Body
;
28
class
b2StackAllocator
;
29
struct
b2ContactPositionConstraint;
30
31
struct
b2VelocityConstraintPoint
32
{
33
b2Vec2
rA;
34
b2Vec2
rB;
35
float32 normalImpulse;
36
float32 tangentImpulse;
37
float32 normalMass;
38
float32 tangentMass;
39
float32 velocityBias;
40
};
41
42
struct
b2ContactVelocityConstraint
43
{
44
b2VelocityConstraintPoint
points[
b2_maxManifoldPoints
];
45
b2Vec2
normal;
46
b2Mat22
normalMass;
47
b2Mat22
K;
48
int32 indexA;
49
int32 indexB;
50
float32 invMassA, invMassB;
51
float32 invIA, invIB;
52
float32 friction;
53
float32 restitution;
54
float32 tangentSpeed;
55
int32 pointCount;
56
int32 contactIndex;
57
};
58
59
struct
b2ContactSolverDef
60
{
61
b2TimeStep
step;
62
b2Contact
** contacts;
63
int32 count;
64
b2Position
* positions;
65
b2Velocity
* velocities;
66
b2StackAllocator
* allocator;
67
};
68
69
class
b2ContactSolver
70
{
71
public
:
72
b2ContactSolver
(
b2ContactSolverDef
* def);
73
~
b2ContactSolver
();
74
75
void
InitializeVelocityConstraints();
76
77
void
WarmStart();
78
void
SolveVelocityConstraints();
79
void
StoreImpulses();
80
81
bool
SolvePositionConstraints();
82
bool
SolveTOIPositionConstraints(int32 toiIndexA, int32 toiIndexB);
83
84
b2TimeStep
m_step;
85
b2Position
* m_positions;
86
b2Velocity
* m_velocities;
87
b2StackAllocator
* m_allocator;
88
b2ContactPositionConstraint* m_positionConstraints;
89
b2ContactVelocityConstraint
* m_velocityConstraints;
90
b2Contact
** m_contacts;
91
int
m_count;
92
};
93
94
#endif
95
b2ContactSolverDef
Definition:
b2ContactSolver.h:59
b2StackAllocator
Definition:
b2StackAllocator.h:37
b2VelocityConstraintPoint
Definition:
b2ContactSolver.h:31
b2Collision.h
b2Position
This is an internal structure.
Definition:
b2TimeStep.h:51
b2TimeStep
This is an internal structure.
Definition:
b2TimeStep.h:39
b2Mat22
A 2-by-2 matrix. Stored in column-major order.
Definition:
b2Math.h:244
b2Body
A rigid body. These are created via b2World::CreateBody.
Definition:
b2Body.h:132
b2ContactVelocityConstraint
Definition:
b2ContactSolver.h:42
b2Velocity
This is an internal structure.
Definition:
b2TimeStep.h:58
b2Vec2
A 2D column vector.
Definition:
b2Math.h:56
b2Contact
Definition:
b2Contact.h:77
b2ContactSolver
Definition:
b2ContactSolver.h:69
b2_maxManifoldPoints
#define b2_maxManifoldPoints
Definition:
b2Settings.h:93