You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.2 KiB
96 lines
2.2 KiB
export class Point {
|
|
x: number;
|
|
y: number;
|
|
|
|
constructor(x: number, y: number) {
|
|
this.x = x;
|
|
this.y = y;
|
|
}
|
|
|
|
//Returns a new point
|
|
add(other: Point) {
|
|
return new Point(this.x + other.x, this.y + other.y);
|
|
}
|
|
|
|
//Modifies `this` point
|
|
add_inplace(other: Point) {
|
|
this.x += other.x;
|
|
this.y += other.y;
|
|
}
|
|
|
|
clone(): Point {
|
|
return new Point(this.x, this.y);
|
|
}
|
|
}
|
|
|
|
export class Rect {
|
|
center: Point;
|
|
size: Point;
|
|
|
|
constructor(center: Point, size: Point) {
|
|
this.center = center;
|
|
this.size = size;
|
|
}
|
|
|
|
draw(
|
|
context: CanvasRenderingContext2D,
|
|
color: string
|
|
) {
|
|
const offset: Point = new Point(this.size.x / 2, this.size.y / 2);
|
|
|
|
context.fillStyle = color;
|
|
context.fillRect(
|
|
this.center.x - offset.x,
|
|
this.center.y - offset.y,
|
|
this.size.x,
|
|
this.size.y
|
|
);
|
|
}
|
|
|
|
//True if `this` rect contains `other` rect in the x-axis
|
|
contains_x(other: Rect): boolean {
|
|
const offset: number = this.size.x / 2;
|
|
const offset_other: number = other.size.x / 2;
|
|
|
|
if (
|
|
this.center.x - offset <= other.center.x - offset_other &&
|
|
this.center.x + offset >= other.center.x + offset_other
|
|
)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
//True if `this` rect contains `other` rect in the y-axis
|
|
contains_y(other: Rect): boolean {
|
|
const offset: number = this.size.y / 2;
|
|
const offset_other: number = other.size.y / 2;
|
|
|
|
if (
|
|
this.center.y - offset <= other.center.y - offset_other &&
|
|
this.center.y + offset >= other.center.y + offset_other
|
|
)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
collides(other: Rect): boolean {
|
|
const offset: Point = new Point(this.size.x / 2, this.size.y / 2);
|
|
const offset_other: Point = new Point(other.size.x / 2, other.size.y / 2);
|
|
|
|
if (
|
|
this.center.x - offset.x < other.center.x + offset_other.x &&
|
|
this.center.x + offset.x > other.center.x - offset_other.x &&
|
|
this.center.y - offset.y < other.center.y + offset_other.y &&
|
|
this.center.y + offset.y > other.center.y - offset_other.y
|
|
)
|
|
return true;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function formatWebsocketData(event: string, data?: any): string {
|
|
return JSON.stringify({
|
|
event,
|
|
data,
|
|
});
|
|
}
|
|
|