bool suken::CCollisionManager::CollisionRect(CRect &A , CRect &B) { if(pow((A.GetRadius()+B.GetRadius()),2.0f) > GetSquareDistance(A.center.position,B.center.position)){ suken::Vector2D v[4]={VSub(A.GetRightTop(),A.GetLeftTop()),VSub(A.GetRightBottom(),A.GetRightTop()),VSub(A.GetLeftBottom(),A.GetRightBottom()),VSub(A.GetLeftTop(),A.GetLeftBottom())}; suken::Vector2D s[4]={A.GetLeftTop(),A.GetRightTop(),A.GetRightBottom(),A.GetLeftBottom()}; suken::Vector2D vertex[4]={B.GetLeftTop(),B.GetRightTop(),B.GetRightBottom(),B.GetLeftBottom()}; bool IsCollision[4]={true,true,true,true}; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ if( VCrossLength(v[j],VSub(vertex[i],s[j])) < 0 ){ IsCollision[i]=false; } } if(IsCollision[i]){ A.OnCollisionFunc(); B.OnCollisionFunc(); #ifdef DEBUG_DRAW A.Draw(GREEN); B.Draw(GREEN); //DrawBox(A.center.position+VGet(20,20),A.center.position-VGet(20,20),RED,true); #endif return true; } } }else{ #ifdef DEBUG_DRAW //DrawBox(A.center.position+VGet(20,20),A.center.position-VGet(20,20),BLUE,true); #endif } return false; }