:: StoryTitle
Limiting the range of a number in Snowman
:: UserScript [script]
(function () {
/*
Returns the number clamped to the specified bounds.
Usage:
→ Limit numeric variable to a value between 1 and 10 inclusive.
<% s.variable = s.variable.clamp(1, 10) %>
*/
Object.defineProperty(Number.prototype, 'clamp', {
configurable : true,
writable : true,
value(/* min, max */) {
if (this == null) { // lazy equality for null
throw new TypeError('Number.prototype.clamp called on null or undefined');
}
if (arguments.length !== 2) {
throw new Error('Number.prototype.clamp called with an incorrect number of parameters');
}
var min = Number(arguments[0]);
var max = Number(arguments[1]);
if (min > max) {
var tmp = min;
min = max;
max = tmp;
}
return Math.min(Math.max(this, min), max);
}
});
/*
Returns the given numerical clamped to the specified bounds.
Usage:
→ Limit numeric variable to a value between 1 and 10 inclusive.
<% s.variable = Math.clamp(s.variable, 1, 10) %>
→ Limit result of mathematical operation to a value between 1 and 10 inclusive.
<% s.variable = Math.clamp(s.variable + 5, 1, 10) %>
*/
Object.defineProperty(Math, 'clamp', {
configurable : true,
writable : true,
value(num, min, max) {
var value = Number(num);
return Number.isNaN(value) ? NaN : value.clamp(min, max);
}
});
})();
:: Start
Initialise the numeric variable to a value with the range you want.
eg. between 1 and 10 inclusive.
(note: You don't need to use the Math.clamp() funtion at this point.)
<% s.valueToClamp = 5 %>
Current value: <%= s.valueToClamp %>
Increase the number to a value that is within the desired range.
eg. Add 1 to the current value.
<% s.valueToClamp = Math.clamp(s.valueToClamp + 1, 1, 10) %>
New value: <%= s.valueToClamp %>
Try to increase the number to a value that is outside the desired range.
eg. Add 100 to the current value.
<% s.valueToClamp = Math.clamp(s.valueToClamp + 100, 1, 10) %>
New value: <%= s.valueToClamp %>
Decrease the number to a value that is within the desired range.
eg. Minus 5 from the current value.
<% s.valueToClamp = Math.clamp(s.valueToClamp - 5, 1, 10) %>
New value: <%= s.valueToClamp %>
Try to decrease the number to a value that is outside the desired range.
eg. Minus 100 from the current value.
<% s.valueToClamp = Math.clamp(s.valueToClamp - 100, 1, 10) %>
New value: <%= s.valueToClamp %>