X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=Box2D%2FSource%2FDynamics%2Fb2Island.h;fp=Box2D%2FSource%2FDynamics%2Fb2Island.h;h=a23e9e923ed69400253b7200babaa1e419aed8de;hb=f4dacbe0a45b6d24b5c0c0f30634988c71bc321d;hp=0000000000000000000000000000000000000000;hpb=1ef80d0d5bf4d1fc254fb1d05ad4e448645d5895;p=blok diff --git a/Box2D/Source/Dynamics/b2Island.h b/Box2D/Source/Dynamics/b2Island.h new file mode 100644 index 0000000..a23e9e9 --- /dev/null +++ b/Box2D/Source/Dynamics/b2Island.h @@ -0,0 +1,88 @@ +/* +* Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages +* arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it +* freely, subject to the following restrictions: +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledgment in the product documentation would be +* appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be +* misrepresented as being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef B2_ISLAND_H +#define B2_ISLAND_H + +#include "../Common/b2Math.h" + +class b2Contact; +class b2Body; +class b2Joint; +class b2StackAllocator; +class b2ContactListener; +struct b2ContactConstraint; +struct b2TimeStep; + +class b2Island +{ +public: + b2Island(int32 bodyCapacity, int32 contactCapacity, int32 jointCapacity, + b2StackAllocator* allocator, b2ContactListener* listener); + ~b2Island(); + + void Clear() + { + m_bodyCount = 0; + m_contactCount = 0; + m_jointCount = 0; + } + + void Solve(const b2TimeStep& step, const b2Vec2& gravity, bool correctPositions, bool allowSleep); + + void SolveTOI(const b2TimeStep& subStep); + + void Add(b2Body* body) + { + b2Assert(m_bodyCount < m_bodyCapacity); + m_bodies[m_bodyCount++] = body; + } + + void Add(b2Contact* contact) + { + b2Assert(m_contactCount < m_contactCapacity); + m_contacts[m_contactCount++] = contact; + } + + void Add(b2Joint* joint) + { + b2Assert(m_jointCount < m_jointCapacity); + m_joints[m_jointCount++] = joint; + } + + void Report(b2ContactConstraint* constraints); + + b2StackAllocator* m_allocator; + b2ContactListener* m_listener; + + b2Body** m_bodies; + b2Contact** m_contacts; + b2Joint** m_joints; + + int32 m_bodyCount; + int32 m_jointCount; + int32 m_contactCount; + + int32 m_bodyCapacity; + int32 m_contactCapacity; + int32 m_jointCapacity; + + int32 m_positionIterationCount; +}; + +#endif