@geckos.io/snapshot-interpolation
Version:
A Snapshot Interpolation library for Real-Time Multiplayer Games
64 lines • 1.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.radianLerp = exports.degreeLerp = exports.lerp = void 0;
const PI = 3.14159265359;
const PI_TIMES_TWO = 6.28318530718;
const lerp = (start, end, t) => {
return start + (end - start) * t;
};
exports.lerp = lerp;
// https://gist.github.com/itsmrpeck/be41d72e9d4c72d2236de687f6f53974
const degreeLerp = (start, end, t) => {
let result;
let diff = end - start;
if (diff < -180) {
// lerp upwards past 360
end += 360;
result = (0, exports.lerp)(start, end, t);
if (result >= 360) {
result -= 360;
}
}
else if (diff > 180) {
// lerp downwards past 0
end -= 360;
result = (0, exports.lerp)(start, end, t);
if (result < 0) {
result += 360;
}
}
else {
// straight lerp
result = (0, exports.lerp)(start, end, t);
}
return result;
};
exports.degreeLerp = degreeLerp;
// https://gist.github.com/itsmrpeck/be41d72e9d4c72d2236de687f6f53974
const radianLerp = (start, end, t) => {
let result;
let diff = end - start;
if (diff < -PI) {
// lerp upwards past PI_TIMES_TWO
end += PI_TIMES_TWO;
result = (0, exports.lerp)(start, end, t);
if (result >= PI_TIMES_TWO) {
result -= PI_TIMES_TWO;
}
}
else if (diff > PI) {
// lerp downwards past 0
end -= PI_TIMES_TWO;
result = (0, exports.lerp)(start, end, t);
if (result < 0) {
result += PI_TIMES_TWO;
}
}
else {
// straight lerp
result = (0, exports.lerp)(start, end, t);
}
return result;
};
exports.radianLerp = radianLerp;
//# sourceMappingURL=lerp.js.map