mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 07:04:52 +09:00
57 lines
2.1 KiB
JavaScript
57 lines
2.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
class Point {
|
|
/**
|
|
* Constructs a Point. Will not accept NaNs.
|
|
* @param x A number. Cannot be NaN.
|
|
* @param y A number. Cannot be NaN.
|
|
*/
|
|
constructor(x, y) {
|
|
this.toString = () => {
|
|
return "(" + this.X + "," + this.Y + ")";
|
|
};
|
|
if (Number.isNaN(x)) {
|
|
throw new Error("x is NaN. Will not construct Point.");
|
|
}
|
|
if (Number.isNaN(y)) {
|
|
throw new Error("y is NaN. Will not construct Point.");
|
|
}
|
|
this.X = x;
|
|
this.Y = y;
|
|
}
|
|
/**
|
|
* Constructs a Point from a string representation in the format (x,y). Will not accept NaNs.
|
|
* @param vectorAsString A string in the format (x,y). Will not accept NaNs.
|
|
*/
|
|
static FromString(vectorAsString) {
|
|
this.CheckChar('(', vectorAsString[0], vectorAsString);
|
|
this.CheckChar(')', vectorAsString[vectorAsString.length - 1], vectorAsString);
|
|
if (vectorAsString.indexOf(',') === -1) {
|
|
throw new Error("vectorAsString is an invalid format. Cannot find ','. fullString: " + vectorAsString);
|
|
}
|
|
let splitStr = vectorAsString.substr(1, vectorAsString.length - 2).split(',');
|
|
if (splitStr.length != 2) {
|
|
throw new Error("vectorAsString is an invalid format. Expecting string in format (x,y). fullString: " + vectorAsString);
|
|
}
|
|
let x = parseInt(splitStr[0]);
|
|
let y = parseInt(splitStr[1]);
|
|
let v = new Point(x, y);
|
|
return v;
|
|
}
|
|
static CheckChar(expectedChar, actualChar, fullString) {
|
|
if (actualChar != expectedChar) {
|
|
throw new Error("vectorAsString is an invalid format. Expecting: '" + expectedChar + "'. Actual: '" + actualChar + "'. fullString: " + fullString);
|
|
}
|
|
}
|
|
equals(obj) {
|
|
return this.X === obj.X && this.Y === obj.Y;
|
|
}
|
|
Add(p) {
|
|
return new Point(this.X + p.X, this.Y + p.Y);
|
|
}
|
|
Subtract(p) {
|
|
return new Point(this.X - p.X, this.Y - p.Y);
|
|
}
|
|
}
|
|
exports.Point = Point;
|
|
//# sourceMappingURL=Point.js.map
|