var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* @module annie
*/
var annie;
(function (annie) {
/**
*
* @class annie.Rectangle
* @extends annie.AObject
* @public
* @since 1.0.0
*/
var Rectangle = (function (_super) {
__extends(Rectangle, _super);
/**
* 构造函数
* @method Rectangle
* @param {number} x
* @param {number} y
* @param {number} width
* @param {number} height
*/
function Rectangle(x, y, width, height) {
if (x === void 0) { x = 0; }
if (y === void 0) { y = 0; }
if (width === void 0) { width = 0; }
if (height === void 0) { height = 0; }
_super.call(this);
/**
* 矩形左上角的 x 坐标
* @property x
* @public
* @since 1.0.0
* @type{number}
* @default 0
*/
this.x = 0;
/**
* 矩形左上角的 y 坐标
* @property y
* @public
* @since 1.0.0
* @type{number}
* @default 0
*/
this.y = 0;
/**
* 矩形的宽度(以像素为单位)
* @property width
* @public
* @since 1.0.0
* @type{number}
* @default 0
*/
this.width = 0;
/**
* 矩形的高度(以像素为单位)
* @property height
* @public
* @since 1.0.0
* @type{number}
* @default 0
*/
this.height = 0;
var s = this;
s._instanceType = "annie.Rectangle";
s.x = x;
s.y = y;
s.height = height;
s.width = width;
}
/**
* 判断一个点是否在矩形内包括边
* @method isPointIn
* @param {annie.Point} point
* @return {boolean}
* @public
* @since 1.0.0
*/
Rectangle.prototype.isPointIn = function (point) {
var s = this;
return point.x >= s.x && point.x <= (s.x + s.width) && point.y >= s.y && point.y <= (s.y + s.height);
};
/**
* 将多个矩形合成为一个矩形,并将结果存到第一个矩形参数返回
* @method createFromRects
* @param {annie.Rectangle} rect
* @param {..arg} arg
* @public
* @since 1.0.0
* @static
*/
Rectangle.createFromRects = function () {
var arg = [];
for (var _i = 0; _i < arguments.length; _i++) {
arg[_i - 0] = arguments[_i];
}
if (arg.length == 0) {
return null;
}
else if (arg.length == 1) {
return arg[0];
}
else {
var rect = arg[0];
var x = rect.x, y = rect.y, w = rect.width, h = rect.height, wx1 = void 0, wx2 = void 0, hy1 = void 0, hy2 = void 0;
for (var i = 1; i < arg.length; i++) {
wx1 = x + w;
hy1 = y + h;
wx2 = arg[i].x + arg[i].width;
hy2 = arg[i].y + arg[i].height;
if (x > arg[i].x || wx1 == 0) {
x = arg[i].x;
}
if (y > arg[i].y || hy1 == 0) {
y = arg[i].y;
}
if (wx1 < wx2) {
wx1 = wx2;
}
if (hy1 < hy2) {
hy1 = hy2;
}
rect.x = x;
rect.y = y;
rect.width = wx1 - x;
rect.height = hy1 - y;
}
return rect;
}
};
/**
* 通过一系列点来生成一个矩形
* 返回包含所有给定的点的最小矩形
* @method createFromPoints
* @static
* @public
* @since 1.0.0
* @param {annie.Point} rect
* @param {..arg} ary
* @return {annie.Rectangle}
*/
Rectangle.createFromPoints = function (rect) {
var arg = [];
for (var _i = 1; _i < arguments.length; _i++) {
arg[_i - 1] = arguments[_i];
}
var x = arg[0].x, y = arg[0].y, w = arg[0].x, h = arg[0].y;
for (var i = 1; i < arg.length; i++) {
if (arg[i] instanceof annie.Point) {
if (x > arg[i].x) {
x = arg[i].x;
}
if (y > arg[i].y) {
y = arg[i].y;
}
if (w < arg[i].x) {
w = arg[i].x;
}
if (h < arg[i].y) {
h = arg[i].y;
}
}
}
rect.x = x;
rect.y = y;
rect.width = w - x;
rect.height = h - y;
return rect;
};
/**
* 判读两个矩形是否相交
* @method testRectCross
* @public
* @since 1.0.2
* @param r1
* @param r2
* @return {boolean}
*/
Rectangle.testRectCross = function (ra, rb) {
var a_cx, a_cy;
/* 第一个中心点*/
var b_cx, b_cy;
/* 第二个中心点*/
a_cx = ra.x + (ra.width / 2);
a_cy = ra.y + (ra.height / 2);
b_cx = rb.x + (rb.width / 2);
b_cy = rb.y + (rb.height / 2);
return ((Math.abs(a_cx - b_cx) <= (ra.width / 2 + rb.width / 2)) && (Math.abs(a_cy - b_cy) <= (ra.height / 2 + rb.height / 2)));
};
return Rectangle;
}(annie.AObject));
annie.Rectangle = Rectangle;
})(annie || (annie = {}));