57 lines
1.2 KiB
TypeScript
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,
|
|
};
|
|
}
|
|
}
|