bool ZRect::operator<(const ZRect &rhs) const { //< is the one that is closer to top corner (as a whole)// if(rY < rhs.Y()) //check Ys return true; else if(rY > rhs.Y()) return false; else { if(rX < rhs.X()) //check Xs return true; else if(rX > rhs.X()) return false; else { if(rHeight < rhs.Height()) //check heights return true; else if(rHeight > rhs.Height()) return false; else { if(rWidth < rhs.Width()) //check widths return true; else if(rWidth > rhs.Width()) return false; else return false; //nothing left to check, they are == } } } }
ZRect ZRect::Intersection(const ZRect &rect) const { float tempX=0,tempY=0,tempW=0,tempH=0; //can only grab the intersection if they intersect if(Intersects(rect)) { tempX = rX > rect.X() ? rX : rect.X(); tempY = rY > rect.Y() ? rY : rect.Y(); tempW = rX+rWidth < rect.Right() ? rX+rWidth : rect.Right(); tempH = rY+rHeight < rect.Bottom() ? rY+rHeight : rect.Bottom(); tempW -= tempX; //adjust width and height tempH -= tempY; } return ZRect(tempX,tempY,tempW,tempH); }
ZRect::ZRect(const ZRect &rhs) : rEngine(ZEngine::GetInstance()), rX(rhs.X()),rY(rhs.Y()),rWidth(rhs.Width()),rHeight(rhs.Height()) { }