diff options
| author | Samu Laaksonen <laaksonen.sj@gmail.com> | 2012-10-18 23:58:18 +0300 |
|---|---|---|
| committer | Samu Laaksonen <laaksonen.sj@gmail.com> | 2012-10-18 23:58:18 +0300 |
| commit | a0f7ab0f77fa81b77d03de751e4a5f4e07c49d25 (patch) | |
| tree | 92c033e000f6796f3e679ee8ba58bf83844b84c5 /Box2D/Dynamics/b2Island.h | |
| parent | 2049e08432907f645f5a3786ea4f50a6456b77c4 (diff) | |
| download | prism-a0f7ab0f77fa81b77d03de751e4a5f4e07c49d25.tar.gz prism-a0f7ab0f77fa81b77d03de751e4a5f4e07c49d25.zip | |
Box2d precommit
Added
- box2d source codes to be added in project when there is no longer cba
- some base ideas to display classes
Improved
- level loading : layer with property "solid" is now loaded tile by
tile, this allows adding static rigid bodies to these items for
collision detection
Diffstat (limited to 'Box2D/Dynamics/b2Island.h')
| -rw-r--r-- | Box2D/Dynamics/b2Island.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/Box2D/Dynamics/b2Island.h b/Box2D/Dynamics/b2Island.h new file mode 100644 index 0000000..4a814c4 --- /dev/null +++ b/Box2D/Dynamics/b2Island.h @@ -0,0 +1,93 @@ +/* +* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org +* +* 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 <Box2D/Common/b2Math.h> +#include <Box2D/Dynamics/b2Body.h> +#include <Box2D/Dynamics/b2TimeStep.h> + +class b2Contact; +class b2Joint; +class b2StackAllocator; +class b2ContactListener; +struct b2ContactVelocityConstraint; +struct b2Profile; + +/// This is an internal class. +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(b2Profile* profile, const b2TimeStep& step, const b2Vec2& gravity, bool allowSleep); + + void SolveTOI(const b2TimeStep& subStep, int32 toiIndexA, int32 toiIndexB); + + void Add(b2Body* body) + { + b2Assert(m_bodyCount < m_bodyCapacity); + body->m_islandIndex = m_bodyCount; + m_bodies[m_bodyCount] = body; + ++m_bodyCount; + } + + 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(const b2ContactVelocityConstraint* constraints); + + b2StackAllocator* m_allocator; + b2ContactListener* m_listener; + + b2Body** m_bodies; + b2Contact** m_contacts; + b2Joint** m_joints; + + b2Position* m_positions; + b2Velocity* m_velocities; + + int32 m_bodyCount; + int32 m_jointCount; + int32 m_contactCount; + + int32 m_bodyCapacity; + int32 m_contactCapacity; + int32 m_jointCapacity; +}; + +#endif |
