#include "cCollision.hpp" using MathEngine::cCollision; using MathEngine::Vector4; using MathEngine::Vector2; using MathEngine::iVector4; using MathEngine::iVector2; cCollision::cCollision() { } cCollision::~cCollision() { } /// Functions /*static*/ const bool cCollision::BoundingBox( const SDL_Rect& a, const SDL_Rect& b ) { if ((b.x + b.w) < a.x) return false; //just checking if their if ((a.x + a.w) < b.x ) return false; //bounding boxes even touch if ((b.y + b.h) < a.y) return false; if ((a.y + a.h) < b.y) return false; return true; //bounding boxes intersect } /*static*/ const bool cCollision::BoundingBox( const Vector4& a, const Vector4& b ) { if ((b.x + b.z) < a.x) return false; //just checking if their if ((a.x + a.z) < b.x ) return false; //bounding boxes even touch if ((b.y + b.w) < a.y) return false; if ((a.y + a.w) < b.y) return false; return true; //bounding boxes intersect } /*static*/ const bool cCollision::BoundingBox( const SDL_Rect& a, const Vector4& b ) { Vector4 temp = a; return cCollision::BoundingBox(temp, b); } /*static*/ const bool cCollision::BoundingBox( const Vector4& a, const SDL_Rect& b ) { return cCollision::BoundingBox(b, a); } /*static*/ const bool cCollision::BoundingBox( const iVector4& a, const iVector4& b ) { if ((b.x + b.z) < a.x) return false; //just checking if their if ((a.x + a.z) < b.x ) return false; //bounding boxes even touch if ((b.y + b.w) < a.y) return false; if ((a.y + a.w) < b.y) return false; return true; //bounding boxes intersect } /*static*/ const bool cCollision::BoundingBox( const SDL_Rect& a, const iVector4& b ) { iVector4 temp = a; return cCollision::BoundingBox(temp, b); } /*static*/ const bool cCollision::BoundingBox( const iVector4& a, const SDL_Rect& b ) { return cCollision::BoundingBox(b, a); } /*static*/ const bool cCollision::BoundingBox( const iVector4& a, const Vector4& b ) { Vector4 temp = a; return cCollision::BoundingBox( temp, b ); } /*static*/ const bool cCollision::BoundingBox( const Vector4& a, const iVector4& b ) { return cCollision::BoundingBox( b, a ); } /*static*/ const Vector2 cCollision::Inside( const SDL_Rect& a, const SDL_Rect& b ) { Vector2 rtn; rtn.x = 0.0f; rtn.y = 0.0f; //Check if left side of b is inside of a if (b.x < a.x) rtn.x = (float)(b.x - a.x); //Check if right side of b is inside of a if ((b.x + b.w) > (a.x + a.w)) rtn.x = (float)((b.x + b.w) - (a.x + a.w)); //Check if top side of b is inside of a if (b.y < a.y) rtn.y = (float)(b.y - a.y); //Check if botton side of b is inside of a if ((b.y + b.h) > (a.y + a.h)) rtn.y = (float)((b.y + b.h) - (a.y + a.h)); return rtn; } /*static*/ const Vector2 cCollision::Inside( const Vector4& a, const Vector4& b ) { Vector2 rtn; rtn.x = 0.0f; rtn.y = 0.0f; //Check if left side of b is inside of a if (b.x < a.x) rtn.x = a.x - b.x; //Check if right side of b is inside of a if ((b.x + b.z) > (a.x + a.z)) rtn.x = (a.x + a.z) - (b.x + b.z); //Check if top side of b is inside of a if (b.y < a.y) rtn.y = a.y - b.y; //Check if botton side of b is inside of a if ((b.y + b.w) > (a.y + a.w)) rtn.y = (a.y + a.w) - (b.y + b.w); return rtn; } /*static*/ const Vector2 cCollision::Inside( const SDL_Rect& a, const Vector4& b ) { Vector4 temp = a; return cCollision::Inside(temp, b); } /*static*/ const Vector2 cCollision::Inside( const Vector4& a, const SDL_Rect& b ) { Vector4 temp = b; return cCollision::Inside(a, temp); } /*static*/ const iVector2 cCollision::Inside( const iVector4& a, const iVector4& b ) { iVector2 rtn; rtn.x = 0; rtn.y = 0; //Check if left side of b is inside of a if (b.x < a.x) rtn.x = b.x - a.x; //Check if right side of b is inside of a if ((b.x + b.z) > (a.x + a.z)) rtn.x = (b.x + b.z) - (a.x + a.z); //Check if top side of b is inside of a if (b.y < a.y) rtn.y = b.y - a.y; //Check if botton side of b is inside of a if ((b.y + b.w) > (a.y + a.w)) rtn.y = (b.y + b.w) - (a.y + a.w); return rtn; } /*static*/ const iVector2 cCollision::Inside( const SDL_Rect& a, const iVector4& b ) { iVector4 temp = a; return cCollision::Inside( temp, b ); } /*static*/ const iVector2 cCollision::Inside( const iVector4& a, const SDL_Rect& b ) { return cCollision::Inside( b, a ); } /*static*/ const Vector2 cCollision::Inside( const iVector4& a, const Vector4& b ) { Vector4 temp = a; return cCollision::Inside( temp, b ); } /*static*/ const Vector2 cCollision::Inside( const Vector4& a, const iVector4& b ) { return cCollision::Inside( b, a ); }