kopia lustrzana https://github.com/robhawkes/vizicities
61 wiersze
1.1 KiB
JavaScript
Executable File
61 wiersze
1.1 KiB
JavaScript
Executable File
/*
|
|
* Point is a helper class for ensuring consistent world positions.
|
|
*
|
|
* Based on:
|
|
* https://github.com/Leaflet/Leaflet/blob/master/src/geo/Point.js
|
|
*/
|
|
|
|
class Point {
|
|
constructor(x, y, round) {
|
|
this.x = (round ? Math.round(x) : x);
|
|
this.y = (round ? Math.round(y) : y);
|
|
}
|
|
|
|
clone() {
|
|
return new Point(this.x, this.y);
|
|
}
|
|
|
|
// Non-destructive
|
|
add(point) {
|
|
return this.clone()._add(_point(point));
|
|
}
|
|
|
|
// Destructive
|
|
_add(point) {
|
|
this.x += point.x;
|
|
this.y += point.y;
|
|
return this;
|
|
}
|
|
|
|
// Non-destructive
|
|
subtract(point) {
|
|
return this.clone()._subtract(_point(point));
|
|
}
|
|
|
|
// Destructive
|
|
_subtract(point) {
|
|
this.x -= point.x;
|
|
this.y -= point.y;
|
|
return this;
|
|
}
|
|
}
|
|
|
|
export default Point;
|
|
|
|
// Accepts (point), ([x, y]) and (x, y, round)
|
|
var _point = function(x, y, round) {
|
|
if (x instanceof Point) {
|
|
return x;
|
|
}
|
|
if (Array.isArray(x)) {
|
|
return new Point(x[0], x[1]);
|
|
}
|
|
if (x === undefined || x === null) {
|
|
return x;
|
|
}
|
|
return new Point(x, y, round);
|
|
};
|
|
|
|
// Initialise without requiring new keyword
|
|
export {_point as point};
|