UNPKG

rot-js

Version:

A roguelike toolkit in JavaScript

55 lines (54 loc) 1.51 kB
/** * Always positive modulus * @param x Operand * @param n Modulus * @returns x modulo n */ export function mod(x, n) { return (x % n + n) % n; } export function clamp(val, min = 0, max = 1) { if (val < min) return min; if (val > max) return max; return val; } export function capitalize(string) { return string.charAt(0).toUpperCase() + string.substring(1); } /** * Format a string in a flexible way. Scans for %s strings and replaces them with arguments. List of patterns is modifiable via String.format.map. * @param {string} template * @param {any} [argv] */ export function format(template, ...args) { let map = format.map; let replacer = function (match, group1, group2, index) { if (template.charAt(index - 1) == "%") { return match.substring(1); } if (!args.length) { return match; } let obj = args[0]; let group = group1 || group2; let parts = group.split(","); let name = parts.shift() || ""; let method = map[name.toLowerCase()]; if (!method) { return match; } obj = args.shift(); let replaced = obj[method].apply(obj, parts); let first = name.charAt(0); if (first != first.toLowerCase()) { replaced = capitalize(replaced); } return replaced; }; return template.replace(/%(?:([a-z]+)|(?:{([^}]+)}))/gi, replacer); } format.map = { "s": "toString" };