text: /*
  * 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_TIME_OF_IMPACT_H
  #define B2_TIME_OF_IMPACT_H
  
  #include "Common/b2Math.h"
  #include "Collision/b2Distance.h"
  
  /// Input parameters for b2TimeOfImpact
  struct b2TOIInput
  {
  	b2DistanceProxy proxyA;
  	b2DistanceProxy proxyB;
  	b2Sweep sweepA;
  	b2Sweep sweepB;
  	float32 tMax;		// defines sweep interval [0, tMax]
  };
  
  // Output parameters for b2TimeOfImpact.
  struct b2TOIOutput
  {
  	enum State
  	{
  		e_unknown,
  		e_failed,
  		e_overlapped,
  		e_touching,
  		e_separated
  	};
  
  	State state;
  	float32 t;
  };
  
  /// Compute the upper bound on time before two shapes penetrate. Time is represented as
  /// a fraction between [0,tMax]. This uses a swept separating axis and may miss some intermediate,
  /// non-tunneling collision. If you change the time interval, you should call this function
  /// again.
  /// Note: use b2Distance to compute the contact point and normal at the time of impact.
  void b2TimeOfImpact(b2TOIOutput* output, const b2TOIInput* input);
  
  #endif
  