| 
							- /*
 - * 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_WORLD_CALLBACKS_H
 - #define B2_WORLD_CALLBACKS_H
 - 
 - #include "../Common/b2Settings.h"
 - 
 - struct b2Vec2;
 - struct b2Transform;
 - class b2Fixture;
 - class b2Body;
 - class b2Joint;
 - class b2Contact;
 - struct b2ContactResult;
 - struct b2Manifold;
 - 
 - /// Joints and fixtures are destroyed when their associated
 - /// body is destroyed. Implement this listener so that you
 - /// may nullify references to these joints and shapes.
 - class b2DestructionListener
 - {
 - public:
 - 	virtual ~b2DestructionListener() {}
 - 
 - 	/// Called when any joint is about to be destroyed due
 - 	/// to the destruction of one of its attached bodies.
 - 	virtual void SayGoodbye(b2Joint* joint) = 0;
 - 
 - 	/// Called when any fixture is about to be destroyed due
 - 	/// to the destruction of its parent body.
 - 	virtual void SayGoodbye(b2Fixture* fixture) = 0;
 - };
 - 
 - /// Implement this class to provide collision filtering. In other words, you can implement
 - /// this class if you want finer control over contact creation.
 - class b2ContactFilter
 - {
 - public:
 - 	virtual ~b2ContactFilter() {}
 - 
 - 	/// Return true if contact calculations should be performed between these two shapes.
 - 	/// @warning for performance reasons this is only called when the AABBs begin to overlap.
 - 	virtual bool ShouldCollide(b2Fixture* fixtureA, b2Fixture* fixtureB);
 - };
 - 
 - /// Contact impulses for reporting. Impulses are used instead of forces because
 - /// sub-step forces may approach infinity for rigid body collisions. These
 - /// match up one-to-one with the contact points in b2Manifold.
 - struct b2ContactImpulse
 - {
 - 	float32 normalImpulses[b2_maxManifoldPoints];
 - 	float32 tangentImpulses[b2_maxManifoldPoints];
 - 	juce::int32 count;
 - };
 - 
 - /// Implement this class to get contact information. You can use these results for
 - /// things like sounds and game logic. You can also get contact results by
 - /// traversing the contact lists after the time step. However, you might miss
 - /// some contacts because continuous physics leads to sub-stepping.
 - /// Additionally you may receive multiple callbacks for the same contact in a
 - /// single time step.
 - /// You should strive to make your callbacks efficient because there may be
 - /// many callbacks per time step.
 - /// @warning You cannot create/destroy Box2D entities inside these callbacks.
 - class b2ContactListener
 - {
 - public:
 - 	virtual ~b2ContactListener() {}
 - 
 - 	/// Called when two fixtures begin to touch.
 - 	virtual void BeginContact(b2Contact* contact) { B2_NOT_USED(contact); }
 - 
 - 	/// Called when two fixtures cease to touch.
 - 	virtual void EndContact(b2Contact* contact) { B2_NOT_USED(contact); }
 - 
 - 	/// This is called after a contact is updated. This allows you to inspect a
 - 	/// contact before it goes to the solver. If you are careful, you can modify the
 - 	/// contact manifold (e.g. disable contact).
 - 	/// A copy of the old manifold is provided so that you can detect changes.
 - 	/// Note: this is called only for awake bodies.
 - 	/// Note: this is called even when the number of contact points is zero.
 - 	/// Note: this is not called for sensors.
 - 	/// Note: if you set the number of contact points to zero, you will not
 - 	/// get an EndContact callback. However, you may get a BeginContact callback
 - 	/// the next step.
 - 	virtual void PreSolve(b2Contact* contact, const b2Manifold* oldManifold)
 - 	{
 - 		B2_NOT_USED(contact);
 - 		B2_NOT_USED(oldManifold);
 - 	}
 - 
 - 	/// This lets you inspect a contact after the solver is finished. This is useful
 - 	/// for inspecting impulses.
 - 	/// Note: the contact manifold does not include time of impact impulses, which can be
 - 	/// arbitrarily large if the sub-step is small. Hence the impulse is provided explicitly
 - 	/// in a separate data structure.
 - 	/// Note: this is only called for contacts that are touching, solid, and awake.
 - 	virtual void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse)
 - 	{
 - 		B2_NOT_USED(contact);
 - 		B2_NOT_USED(impulse);
 - 	}
 - };
 - 
 - /// Callback class for AABB queries.
 - /// See b2World::Query
 - class b2QueryCallback
 - {
 - public:
 - 	virtual ~b2QueryCallback() {}
 - 
 - 	/// Called for each fixture found in the query AABB.
 - 	/// @return false to terminate the query.
 - 	virtual bool ReportFixture(b2Fixture* fixture) = 0;
 - };
 - 
 - /// Callback class for ray casts.
 - /// See b2World::RayCast
 - class b2RayCastCallback
 - {
 - public:
 - 	virtual ~b2RayCastCallback() {}
 - 
 - 	/// Called for each fixture found in the query. You control how the ray cast
 - 	/// proceeds by returning a float:
 - 	/// return -1: ignore this fixture and continue
 - 	/// return 0: terminate the ray cast
 - 	/// return fraction: clip the ray to this point
 - 	/// return 1: don't clip the ray and continue
 - 	/// @param fixture the fixture hit by the ray
 - 	/// @param point the point of initial intersection
 - 	/// @param normal the normal vector at the point of intersection
 - 	/// @return -1 to filter, 0 to terminate, fraction to clip the ray for
 - 	/// closest hit, 1 to continue
 - 	virtual float32 ReportFixture(	b2Fixture* fixture, const b2Vec2& point,
 - 									const b2Vec2& normal, float32 fraction) = 0;
 - };
 - 
 - #endif
 
 
  |