2 * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
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.
19 #ifndef CONTACT_SOLVER_H
20 #define CONTACT_SOLVER_H
22 #include "../../Common/b2Math.h"
23 #include "../../Collision/b2Collision.h"
24 #include "../b2World.h"
29 class b2StackAllocator;
31 struct b2ContactConstraintPoint
37 float32 normalImpulse;
38 float32 tangentImpulse;
39 float32 positionImpulse;
42 float32 equalizedMass;
47 struct b2ContactConstraint
49 b2ContactConstraintPoint points[b2_maxManifoldPoints];
62 b2ContactSolver(const b2TimeStep& step, b2Contact** contacts, int32 contactCount, b2StackAllocator* allocator);
65 void InitVelocityConstraints(const b2TimeStep& step);
66 void SolveVelocityConstraints();
67 void FinalizeVelocityConstraints();
69 bool SolvePositionConstraints(float32 baumgarte);
72 b2StackAllocator* m_allocator;
73 b2ContactConstraint* m_constraints;
74 int m_constraintCount;