@pilotlab/lux-tools
Version:
A luxurious user experience framework, developed by your friends at Pilot.
95 lines • 3.85 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const is_1 = require("@pilotlab/is");
const rangeScaleBase_1 = require("./rangeScaleBase");
class RangeScale extends rangeScaleBase_1.default {
constructor(inputMin = 0, inputMax = 1, outputMin = 0, outputMax = 1, ease) {
super(inputMin, inputMax, ease);
this._outputMin = 0.0;
this._outputMax = 0.0;
this._isInvert = false;
let isInvert = outputMin > outputMax;
let outputMinFinal = isInvert ? outputMax : outputMin;
let outputMaxFinal = isInvert ? outputMin : outputMax;
if (is_1.default.notEmpty(outputMinFinal))
this._outputMin = outputMinFinal;
if (is_1.default.notEmpty(outputMaxFinal))
this._outputMax = outputMaxFinal;
this._isInvert = isInvert;
}
static normalize(value, min, max, isConstrain = true, isInvert = false) {
let p = (value - min) / (max - min);
if (isConstrain) {
if (p < 0)
p = 0;
if (p > 1)
p = 1;
}
if (isInvert)
p = 1.0 - p;
return p;
}
static unnormalize(valueNormalized, min, max, isConstrain = true, isInvert = false) {
let p = valueNormalized;
if (isConstrain) {
if (p < 0)
p = 0;
if (p > 1)
p = 1;
}
if (isInvert)
p = 1.0 - p;
return (min + (p * (max - min)));
}
static outputEase(value, min, max, ease) {
if (min > max)
return ease(value - min, max, min - max, max - min);
else
return ease(value - min, min, max - min, max - min);
}
static easeNormalized(value, ease, isInvert = false) {
if (isInvert)
value = 1.0 - value;
return ease(value, 0, 1, 1);
}
get outputMin() { return this._outputMin; }
set outputMin(value) { this._outputMin = value; }
get outputMax() { return this._outputMax; }
set outputMax(value) { this._outputMax = value; }
get isInvert() { return this._isInvert; }
set isInvert(value) { this._isInvert = value; }
get value() { return this._value; }
output(inputValue, isValueNormalized = false, isConstrain = true, isNormalizeReturnValue = false, isInvertReturnValue = false) {
if (isValueNormalized)
inputValue = this.unnormalizeInput(inputValue, false);
if (inputValue === this.p_lastInputRaw)
return this._value;
this.p_lastInputRaw = inputValue;
this.p_checkInputPreviousRaw(inputValue);
let p = this.normalizeInput(inputValue, false);
let value = this._outputFromNormalized(p);
value = this.normalizeOutput(value, isConstrain, isInvertReturnValue);
if (is_1.default.notEmpty(this.p_ease))
value = RangeScale.easeNormalized(value, this.p_ease);
if (this._isInvert)
value = 1.0 - value;
this.p_lastInputNormalized = value;
if (!isNormalizeReturnValue)
value = this.unnormalizeOutput(value);
this._value = value;
return value;
}
normalizeOutput(outputUnnormalized, isConstrain = true, isInvert = false) {
return RangeScale.normalize(outputUnnormalized, this._outputMin, this._outputMax, isConstrain, isInvert);
}
unnormalizeOutput(outputNormalized, isConstrain = true, isInvert = false) {
return RangeScale.unnormalize(outputNormalized, this._outputMin, this._outputMax, isConstrain, isInvert);
}
_outputFromNormalized(inputNormalized) {
let p = inputNormalized;
return (this._outputMin + (p * (this._outputMax - this._outputMin)));
}
}
exports.RangeScale = RangeScale;
exports.default = RangeScale;
//# sourceMappingURL=rangeScale.js.map