class Rect
{
constructor(xMin, yMin, width, height)
{
if (typeof PIXI !== 'undefined' && xMin instanceof PIXI.Rectangle)
{
// cast PIXI.Rectangle to Rect
this._xMin = xMin.x;
this._yMin = xMin.y;
this._width = xMin.width;
this._height = xMin.height;
}
else if (xMin && yMin && xMin.x !== undefined && xMin.y !== undefined && yMin.x !== undefined && yMin.y !== undefined)
{
this._xMin = xMin.x;
this._yMin = xMin.y;
this._width = yMin.x;
this._height = yMin.y;
}
else
{
this._xMin = xMin === undefined ? 0 : xMin;
this._yMin = yMin === undefined ? 0 : yMin;
this._width = width === undefined ? 0 : width;
this._height = height === undefined ? 0 : height;
}
}
set(xMin, yMin, width, height)
{
this._xMin = xMin === undefined ? 0 : xMin;
this._yMin = yMin === undefined ? 0 : yMin;
this._width = width === undefined ? 0 : width;
this._height = height === undefined ? 0 : height;
}
get x() { return this._xMin; }
get xMin() { return this._xMin; }
get left() { return this._xMin; }
get xMax() { return this._xMin + this._width; }
get right() { return this._xMin + this._width; }
get width() { return this._width; }
get y() { return this._yMin; }
get yMin() { return this._yMin; }
get top() { return this._yMin; }
get yMax() { return this._yMin + this._height; }
get bottom() { return this._yMin + this._height; }
get height() { return this._height; }
set x(x) { this._xMin = x; }
set left(xMin) { this.xMin = xMin;}
set xMin(xMin) { var xMax = this.xMax; this._xMin = xMin; this._width = xMax - xMin; }
set right(xMax) {this.xMax = xMax;}
set xMax(xMax) { var xMin = this.xMin; this._xMax = xMax; this._width = xMax - xMin; }
set width(w) { this._width = w; }
set y(y) { this._yMin = y; }
set top(yMin) { this.yMin = yMin; }
set yMin(yMin) { var yMax = this.yMax; this._yMin = yMin; this._height = yMax - yMin; }
set bottom(yMax) { this.yMax = yMax; }
set yMax(yMax) { var yMin = this.yMin; this._yMax = yMax; this._height = yMax - yMin; }
set height(h) { this._height = h; }
center()
{
// getting lazy
if (this._centerVector === undefined) this._centerVector = new Vector2();
this._centerVector.x = this.x + this.width * 0.5;
this._centerVector.y = this.y + this.height * 0.5;
return this._centerVector;
}
copy(r)
{
this._xMin = r._xMin;
this._yMin = r._yMin;
this._width = r._width;
this._height = r._height;
return this;
}
clone()
{
return new Rect(this._xMin, this._yMin, this._width, this._height);
}
contains(x, y)
{
if (y === undefined)
{
var p = x; //Vector2
return this.contains(p.x, p.y);
}
return x >= this.xMin && x <= this.xMax && y >= this.yMin && y <= this.yMax;
}
overlaps(rect)
{
/*// check if either rect contains a point of the other rect
if (this.contains(rect.xMin, rect.yMin)) return true;
if (this.contains(rect.xMin, rect.yMax)) return true;
if (this.contains(rect.xMax, rect.yMin)) return true;
if (this.contains(rect.xMax, rect.yMax)) return true;
// its possible this rectangle is completely enclosed by the other rectangle
if (rect.contains(this.xMin, this.yMin)) return true;
if (rect.contains(this.xMin, this.yMax)) return true;
if (rect.contains(this.xMax, this.yMin)) return true;
if (rect.contains(this.xMax, this.yMax)) return true;
return false
*/
// better solution, the reverse! does not overlap if one rect above or beside other rectangle
if (this.xMax < rect.xMin || rect.xMax < this.xMin) return false;
if (this.yMax < rect.yMin || rect.yMax < this.yMax) return false;
return true;
}
}
if (typeof module === 'object' && module.exports) module.exports = Rect;