advent22/ui/src/lib/door.ts

57 lines
1.2 KiB
TypeScript

import { Rectangle } from "./rectangle";
import { Vector2D } from "./vector2d";
export interface DoorSerialized {
day: number;
x1: number;
y1: number;
x2: number;
y2: number;
}
export class Door {
private _day = -1;
public position: Rectangle;
constructor(position: Rectangle);
constructor(position: Rectangle, day: number);
constructor(position: Rectangle, day = -1) {
this.day = day;
this.position = position;
}
public get day(): number {
return this._day;
}
public set day(day: unknown) {
// integer coercion
const result = Number(day);
if (isNaN(result)) {
this._day = -1;
} else {
this._day = Math.max(Math.floor(result), -1);
}
}
public static deserialize(serialized: DoorSerialized): Door {
return new Door(
new Rectangle(
new Vector2D(serialized.x1, serialized.y1),
new Vector2D(serialized.x2, serialized.y2),
),
serialized.day,
);
}
public get serialized(): DoorSerialized {
return {
day: this.day,
x1: this.position.origin.x,
y1: this.position.origin.y,
x2: this.position.corner.x,
y2: this.position.corner.y,
};
}
}