Files
Paradise/tgui/packages/common/vector.js
dearmochi 39a9d7e0b1 Clean up TGUI installation, install Prettier (#17809)
* refactor: delete unused Ntos layout

* refactor: remove webpack-build-notifier

* refactor: install and run Prettier

* build: update tgui.bundle
2022-05-18 13:55:20 +01:00

49 lines
1.1 KiB
JavaScript

import { map, reduce, zipWith } from './collections';
/**
* Creates a vector, with as many dimensions are there are arguments.
*/
export const vecCreate = (...components) => {
if (Array.isArray(components[0])) {
return [...components[0]];
}
return components;
};
const ADD = (a, b) => a + b;
const SUB = (a, b) => a - b;
const MUL = (a, b) => a * b;
const DIV = (a, b) => a / b;
export const vecAdd = (...vecs) => {
return reduce((a, b) => zipWith(ADD)(a, b))(vecs);
};
export const vecSubtract = (...vecs) => {
return reduce((a, b) => zipWith(SUB)(a, b))(vecs);
};
export const vecMultiply = (...vecs) => {
return reduce((a, b) => zipWith(MUL)(a, b))(vecs);
};
export const vecDivide = (...vecs) => {
return reduce((a, b) => zipWith(DIV)(a, b))(vecs);
};
export const vecScale = (vec, n) => {
return map((x) => x * n)(vec);
};
export const vecInverse = (vec) => {
return map((x) => -x)(vec);
};
export const vecLength = (vec) => {
return Math.sqrt(reduce(ADD)(zipWith(MUL)(vec, vec)));
};
export const vecNormalize = (vec) => {
return vecDivide(vec, vecLength(vec));
};