UNPKG

malwoden

Version:

![alt text](./coverage/badge-lines.svg) ![alt text](./coverage/badge-statements.svg) ![alt text](./coverage/badge-functions.svg) ![alt text](./coverage/badge-branches.svg)

109 lines 3.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Vector = void 0; /** Contains math for common vector operations. */ var Vector = /** @class */ (function () { function Vector() { } /** * Returns true if two vectors have the same x and y values. * @param v1 The first Vector2. * @param v2 The second Vector2. */ Vector.areEqual = function (v1, v2) { return v1.x === v2.x && v1.y === v2.y; }; /** * Returns the distance between two vectors. * * If no topology is given, diagonal distance is sqrt(2). * If topology is four, diagonal distance is 2. * If topology is eight, diagonal distance is 1. * * @param start The starting Vector2. * @param end The ending Vector2. * @param topology Can use "four" or "eight" for non-cartesian distances. */ Vector.getDistance = function (start, end, topology) { if (topology === "four") { return Math.abs(start.x - end.x) + Math.abs(start.y - end.y); } else if (topology === "eight") { return Math.max(Math.abs(start.x - end.x), Math.abs(start.y - end.y)); } else { var a = start.x - end.x; var b = start.y - end.y; return Math.sqrt(a * a + b * b); } }; /** * Will find the center of an area by averaging all Vectors in the area. * This point may not be in the area itself, for example in a donut shaped area. * @param area Vector2 */ Vector.getCenter = function (area) { if (area.length < 1) { throw new Error("Error: Trying to find center of empty area"); } var sx = 0; var sy = 0; for (var _i = 0, area_1 = area; _i < area_1.length; _i++) { var v = area_1[_i]; sx += v.x; sy += v.y; } return { x: sx / area.length, y: sy / area.length, }; }; /** * Will find the position in the area closest to the target * @param area Vector2[] * @param target Vector2 * @param topology Either 'four' or 'eight'. Default 'four' */ Vector.getClosest = function (area, target, topology) { if (topology === void 0) { topology = "four"; } // Throw an error if area is empty if (area.length < 1) { throw new Error("Error: Trying to find closest position of an empty area"); } // Keep track of the closest we've found. var minDistance = Infinity; var closest = area[0]; for (var _i = 0, area_2 = area; _i < area_2.length; _i++) { var v = area_2[_i]; var distance = Vector.getDistance(target, v, topology); // Found exact one, immediately return if (distance === 0) { return { x: target.x, y: target.y, }; } // Closer than currently known if (distance < minDistance) { minDistance = distance; closest = v; } } return closest; }; Vector.add = function (v1, v2) { return { x: v1.x + v2.x, y: v1.y + v2.y, }; }; Vector.subtract = function (v1, v2) { return { x: v1.x - v2.x, y: v1.y - v2.y, }; }; return Vector; }()); exports.Vector = Vector; //# sourceMappingURL=vector.js.map