@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
52 lines • 3.69 kB
JavaScript
export function tgdCalcClamp(value, min, max) {
if (value < min)
return min;
if (value > max)
return max;
return value;
}
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);
}
export function tgdCalcRandom(min = 1, max) {
if (typeof max !== "number")
return Math.random() * min;
return min + (max - min) * Math.random();
}
/**
* 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;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ2hFLElBQUksS0FBSyxHQUFHLEdBQUc7UUFBRSxPQUFPLEdBQUcsQ0FBQTtJQUMzQixJQUFJLEtBQUssR0FBRyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFDM0IsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQ3RCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLENBQVM7SUFFVCxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFBO0FBQzlDLENBQUM7QUFFRCxNQUFNLFdBQVcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQTtBQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQTtBQUVqQyxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQVc7SUFDdkMsT0FBTyxHQUFHLEdBQUcsV0FBVyxDQUFBO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQVc7SUFDdkMsT0FBTyxHQUFHLEdBQUcsV0FBVyxDQUFBO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQzdCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLEtBQWE7SUFFYixNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFZO0lBQy9DLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUN2RCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7QUFDNUMsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ2pFLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdkIsSUFBSSxLQUFLLEtBQUssQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFBO0lBRTNCLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQTtRQUMxQyxPQUFPLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQzVCLENBQUM7SUFFRCxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNkLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFDMUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUM1QixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQyJ9