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, }; } }