You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Game/www/js/usericons.js

68 lines
1.9 KiB
JavaScript

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
var avatar_cache = [];
/**
* Get svg for a player's avatar
* Caches generated icons to eliminate performance penalty for repeated calls
* @param {int} playerid
* @param {int} teamid
* @param {boolean} asdata true to return base64 data URI, false to return svg
* markup
* @returns {string}
*/
function getAvatarIcon(playerid, teamid, asdata) {
if (avatar_cache[playerid] == null) {
console.log("Generating avatar icon for account id", playerid);
var svg = renderSvgIcon(playerid, SETTINGS["teams"][teamid]["hue"]);
var data = svgToData(svg);
avatar_cache[playerid] = {"svg": svg, "data": data};
}
if ((typeof asdata == "boolean") && (asdata == true)) {
return avatar_cache[playerid].data;
}
return avatar_cache[playerid].svg;
}
/**
* Generate an abstract icon and return SVG code for it
* @param {String} data Different data, different icon
* @param {int} hue (optional) the icon hue
* @returns {String}
*/
function renderSvgIcon(data, hue) {
var hues = [];
if (typeof hue != "undefined") {
hues = [hue];
}
// Custom identicon style
// https://jdenticon.com/icon-designer.html?config=214726c41105452e42552f41
window.jdenticon_config = {
hues: hues,
lightness: {
color: [0.67, 0.86],
grayscale: [0.48, 0.65]
},
saturation: {
color: 0.69,
grayscale: 0.47
},
backColor: "#00000000"
};
return jdenticon.toSvg(data, 100);
}
/**
* Convert a SVG string to a data URL
* @param {String} svg
* @returns {String}
*/
function svgToData(svg) {
return "data:image/svg+xml;base64," + window.btoa(svg);
}