@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
62 lines • 4.84 kB
JavaScript
export function tgdCalcClamp(value, a, b) {
const min = Math.min(a, b);
const max = Math.max(a, b);
if (value < min)
return min;
if (value > max)
return max;
return value;
}
export function tgdCalcMapRange(value, fromMin, fromMax, toMin, toMax, clamp = false) {
const v = clamp ? tgdCalcClamp(value, fromMin, fromMax) : value;
if (fromMin === fromMax)
return v;
const alpha = (v - fromMin) / (fromMax - fromMin);
return toMin + alpha * (toMax - toMin);
}
export function tgdCalcMix(valueAtT0, valueAtT1, t) {
return (1 - t) * valueAtT0 + t * valueAtT1;
}
const DEG_PER_RAD = 180 / Math.PI;
const RAD_PER_DEG = Math.PI / 180;
export function tgdCalcDegToRad(deg) {
return deg * RAD_PER_DEG;
}
export function tgdCalcRadToDeg(rad) {
return rad * DEG_PER_RAD;
}
export function tgdCalcSmoothStep(boundFor0, boundFor1, value) {
const t = tgdCalcClamp((value - boundFor0) / (boundFor1 - boundFor0), 0, 1);
return t * t * (3 - 2 * t);
}
/**
* Force `value` to be between `min` and `max` by shifting it
* by `max - min` as many times as needed.
* @example
* ```ts
* tgdCalcModulo(3, 10, 20) === 13
* tgdCalcModulo(13, 10, 20) === 13
* tgdCalcModulo(23, 10, 20) === 13
* ```
*/
export function tgdCalcModulo(value, min, max) {
const range = max - min;
if (range === 0)
return min;
if (value < min) {
const n = Math.ceil((min - value) / range);
return value + n * range;
}
if (value > max) {
const n = Math.ceil((value - max) / range);
return value - n * range;
}
return value;
}
export function tgdCalcModuloDiscrete(value, size, count) {
if (size === 0)
return 0;
const alpha = tgdCalcModulo(value, 0, size);
return Math.floor((count * alpha) / size);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRoL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUsQ0FBUyxFQUFFLENBQVM7SUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDMUIsSUFBSSxLQUFLLEdBQUcsR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFBO0lBQzNCLElBQUksS0FBSyxHQUFHLEdBQUc7UUFBRSxPQUFPLEdBQUcsQ0FBQTtJQUMzQixPQUFPLEtBQUssQ0FBQTtBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsS0FBYSxFQUNiLE9BQWUsRUFDZixPQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWEsRUFDYixLQUFLLEdBQUcsS0FBSztJQUViLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUMvRCxJQUFJLE9BQU8sS0FBSyxPQUFPO1FBQUUsT0FBTyxDQUFDLENBQUE7SUFFakMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUE7SUFDakQsT0FBTyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFBO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxDQUFTO0lBQ3RFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUE7QUFDOUMsQ0FBQztBQUVELE1BQU0sV0FBVyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO0FBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFBO0FBRWpDLE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBVztJQUN2QyxPQUFPLEdBQUcsR0FBRyxXQUFXLENBQUE7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBVztJQUN2QyxPQUFPLEdBQUcsR0FBRyxXQUFXLENBQUE7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLFNBQWlCLEVBQUUsS0FBYTtJQUNqRixNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ2pFLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdkIsSUFBSSxLQUFLLEtBQUssQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFBO0lBRTNCLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQTtRQUMxQyxPQUFPLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQzVCLENBQUM7SUFFRCxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNkLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFDMUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUM1QixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFFLEtBQWE7SUFDNUUsSUFBSSxJQUFJLEtBQUssQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRXhCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzNDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtBQUM3QyxDQUFDIn0=