Added Box2D
This commit is contained in:
151
external/Box2D-2.3.1/Contributions/Enhancements/Controllers/b2Controller.h
vendored
Normal file
151
external/Box2D-2.3.1/Contributions/Enhancements/Controllers/b2Controller.h
vendored
Normal file
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* 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_CONTROLLER_H
|
||||
#define B2_CONTROLLER_H
|
||||
|
||||
#include "../../Dynamics/b2World.h"
|
||||
#include "../../Dynamics/b2Body.h"
|
||||
|
||||
class b2Body;
|
||||
class b2World;
|
||||
|
||||
class b2Controller;
|
||||
|
||||
/// A controller edge is used to connect bodies and controllers together
|
||||
/// in a bipartite graph.
|
||||
struct b2ControllerEdge
|
||||
{
|
||||
b2Controller* controller; ///< provides quick access to other end of this edge.
|
||||
b2Body* body; ///< the body
|
||||
b2ControllerEdge* prevBody; ///< the previous controller edge in the controllers's joint list
|
||||
b2ControllerEdge* nextBody; ///< the next controller edge in the controllers's joint list
|
||||
b2ControllerEdge* prevController; ///< the previous controller edge in the body's joint list
|
||||
b2ControllerEdge* nextController; ///< the next controller edge in the body's joint list
|
||||
};
|
||||
|
||||
class b2ControllerDef;
|
||||
|
||||
/// Base class for controllers. Controllers are a convience for encapsulating common
|
||||
/// per-step functionality.
|
||||
class b2Controller
|
||||
{
|
||||
public:
|
||||
virtual ~b2Controller();
|
||||
|
||||
/// Controllers override this to implement per-step functionality.
|
||||
virtual void Step(const b2TimeStep& step) = 0;
|
||||
|
||||
/// Controllers override this to provide debug drawing.
|
||||
virtual void Draw(b2DebugDraw *debugDraw) {B2_NOT_USED(debugDraw);};
|
||||
|
||||
/// Adds a body to the controller list.
|
||||
void AddBody(b2Body* body);
|
||||
|
||||
/// Removes a body from the controller list.
|
||||
void RemoveBody(b2Body* body);
|
||||
|
||||
/// Removes all bodies from the controller list.
|
||||
void Clear();
|
||||
|
||||
/// Get the next controller in the world's body list.
|
||||
b2Controller* GetNext();
|
||||
const b2Controller* GetNext() const;
|
||||
|
||||
/// Get the parent world of this body.
|
||||
b2World* GetWorld();
|
||||
const b2World* GetWorld() const;
|
||||
|
||||
/// Get the attached body list
|
||||
b2ControllerEdge* GetBodyList();
|
||||
const b2ControllerEdge* GetBodyList() const;
|
||||
|
||||
|
||||
protected:
|
||||
friend class b2World;
|
||||
|
||||
b2World* m_world;
|
||||
|
||||
b2ControllerEdge* m_bodyList;
|
||||
int32 m_bodyCount;
|
||||
|
||||
b2Controller(const b2ControllerDef* def):
|
||||
m_world(NULL),
|
||||
m_bodyList(NULL),
|
||||
m_bodyCount(0),
|
||||
m_prev(NULL),
|
||||
m_next(NULL)
|
||||
|
||||
{
|
||||
B2_NOT_USED(def);
|
||||
}
|
||||
virtual void Destroy(b2BlockAllocator* allocator) = 0;
|
||||
|
||||
private:
|
||||
b2Controller* m_prev;
|
||||
b2Controller* m_next;
|
||||
|
||||
static void Destroy(b2Controller* controller, b2BlockAllocator* allocator);
|
||||
};
|
||||
|
||||
class b2ControllerDef
|
||||
{
|
||||
public:
|
||||
virtual ~b2ControllerDef() {};
|
||||
|
||||
private:
|
||||
friend class b2World;
|
||||
virtual b2Controller* Create(b2BlockAllocator* allocator) const = 0;
|
||||
};
|
||||
|
||||
inline b2Controller* b2Controller::GetNext()
|
||||
{
|
||||
return m_next;
|
||||
}
|
||||
|
||||
inline const b2Controller* b2Controller::GetNext() const
|
||||
{
|
||||
return m_next;
|
||||
}
|
||||
|
||||
inline b2World* b2Controller::GetWorld()
|
||||
{
|
||||
return m_world;
|
||||
}
|
||||
|
||||
inline const b2World* b2Controller::GetWorld() const
|
||||
{
|
||||
return m_world;
|
||||
}
|
||||
|
||||
inline b2ControllerEdge* b2Controller::GetBodyList()
|
||||
{
|
||||
return m_bodyList;
|
||||
}
|
||||
|
||||
inline const b2ControllerEdge* b2Controller::GetBodyList() const
|
||||
{
|
||||
return m_bodyList;
|
||||
}
|
||||
|
||||
inline void b2Controller::Destroy(b2Controller* controller, b2BlockAllocator* allocator)
|
||||
{
|
||||
controller->Destroy(allocator);
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user