#pragma once
#include "box2d/types.h"
b2CastOutput b2AABB_RayCast( b2AABB a, b2Vec2 p1, b2Vec2 p2 );
static inline float b2Perimeter( b2AABB a )
{
float wx = a.upperBound.x - a.lowerBound.x;
float wy = a.upperBound.y - a.lowerBound.y;
return 2.0f * ( wx + wy );
}
static inline bool b2EnlargeAABB( b2AABB* a, b2AABB b )
{
bool changed = false;
if ( b.lowerBound.x < a->lowerBound.x )
{
a->lowerBound.x = b.lowerBound.x;
changed = true;
}
if ( b.lowerBound.y < a->lowerBound.y )
{
a->lowerBound.y = b.lowerBound.y;
changed = true;
}
if ( a->upperBound.x < b.upperBound.x )
{
a->upperBound.x = b.upperBound.x;
changed = true;
}
if ( a->upperBound.y < b.upperBound.y )
{
a->upperBound.y = b.upperBound.y;
changed = true;
}
return changed;
}
static inline b2AABB b2OffsetAABB( b2AABB box, b2Pos origin )
{
b2AABB result;
result.lowerBound.x = b2RoundDownFloat( origin.x + (double)box.lowerBound.x );
result.lowerBound.y = b2RoundDownFloat( origin.y + (double)box.lowerBound.y );
result.upperBound.x = b2RoundUpFloat( origin.x + (double)box.upperBound.x );
result.upperBound.y = b2RoundUpFloat( origin.y + (double)box.upperBound.y );
return result;
}