1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-06-13 13:04:03 +00:00

Restore some methods

This commit is contained in:
Bjorn Stromberg 2020-08-16 20:29:12 +09:00
parent 55a163fcfd
commit 1eda1cc7bf

View File

@ -21,6 +21,38 @@ export class Rectangle {
return new Rectangle(left, top, right - left, bottom - top);
}
/**
* Constructs a new square rectangle
* @param {number} x
* @param {number} y
* @param {number} size
*/
static fromSquare(x, y, size) {
return new Rectangle(x, y, size, size);
}
/**
*
* @param {Vector} p1
* @param {Vector} p2
*/
static fromTwoPoints(p1, p2) {
const left = Math.min(p1.x, p2.x);
const top = Math.min(p1.y, p2.y);
const right = Math.max(p1.x, p2.x);
const bottom = Math.max(p1.y, p2.y);
return new Rectangle(left, top, right - left, bottom - top);
}
/**
* Returns if a intersects b
* @param {Rectangle} a
* @param {Rectangle} b
*/
static intersects(a, b) {
return a.left <= b.right && b.left <= a.right && a.top <= b.bottom && b.top <= a.bottom;
}
/**
* Copies this instance
* @returns {Rectangle}
@ -79,6 +111,14 @@ export class Rectangle {
return this.y + this.h;
}
/**
* Returns Top, Right, Bottom, Left
* @returns {[number, number, number, number]}
*/
trbl() {
return [this.y, this.right(), this.bottom(), this.x];
}
/**
* Returns the center of the rect
* @returns {Vector}
@ -87,6 +127,58 @@ export class Rectangle {
return new Vector(this.x + this.w / 2, this.y + this.h / 2);
}
/**
* Sets the right side of the rect without moving it
* @param {number} right
*/
setRight(right) {
this.w = right - this.x;
}
/**
* Sets the bottom side of the rect without moving it
* @param {number} bottom
*/
setBottom(bottom) {
this.h = bottom - this.y;
}
/**
* Sets the top side of the rect without scaling it
* @param {number} top
*/
setTop(top) {
const bottom = this.bottom();
this.y = top;
this.setBottom(bottom);
}
/**
* Sets the left side of the rect without scaling it
* @param {number} left
*/
setLeft(left) {
const right = this.right();
this.x = left;
this.setRight(right);
}
/**
* Returns the top left point
* @returns {Vector}
*/
topLeft() {
return new Vector(this.x, this.y);
}
/**
* Returns the bottom left point
* @returns {Vector}
*/
bottomRight() {
return new Vector(this.right(), this.bottom());
}
/**
* Moves the rectangle by the given parameters
* @param {number} x
@ -97,6 +189,15 @@ export class Rectangle {
this.y += y;
}
/**
* Moves the rectangle by the given vector
* @param {Vector} vec
*/
moveByVector(vec) {
this.x += vec.x;
this.y += vec.y;
}
/**
* Scales every parameter (w, h, x, y) by the given factor. Useful to transform from world to
* tile space and vice versa
@ -242,7 +343,7 @@ export class Rectangle {
}
/**
* Returns a new recangle in tile space which includes all tiles which are visible in this rect
* Returns a new rectangle in tile space which includes all tiles which are visible in this rect
* @returns {Rectangle}
*/
toTileCullRectangle() {