overwatch-api
Version:
An Unoffical Overwatch API.
110 lines (96 loc) • 3.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createEndorsementSVG = createEndorsementSVG;
var svgBuilder = require('svg-builder');
var Constants = {
r: 15.91549430918954,
width: 40,
height: 40,
offset: 25,
strokeWidth: 3,
cx: '50%',
cy: '50%'
};
var Colors = {
gray: '#2a2b2e',
orange: '#f19512',
magenta: '#c81af5',
green: '#40ce44',
white: '#f6f6f6',
transparent: 'transparent'
}; // Builds data to be used by the svg-builder in svg.buildSVG.
function getSVGData(endorsementsObj) {
var sportsmanshipRate = endorsementsObj.sportsmanship.rate || 0;
var shotcallerRate = endorsementsObj.shotcaller.rate || 0;
var teammateRate = endorsementsObj.teammate.rate || 0;
return {
level: endorsementsObj.level,
shotcaller: {
dasharray: "".concat(Math.round(shotcallerRate), " ").concat(Math.round(100 - shotcallerRate)),
dashoffset: 25 // Start offset at 12 o'clock.
},
teammate: {
dasharray: "".concat(Math.round(teammateRate), " ").concat(Math.round(100 - teammateRate)),
dashoffset: 100 - Math.round(shotcallerRate) + 25 // Bump offset.
},
sportsmanship: {
dasharray: "".concat(Math.round(sportsmanshipRate), " ").concat(Math.round(100 - sportsmanshipRate)),
dashoffset: 100 - Math.round(shotcallerRate + teammateRate) + 25
}
};
} // Builds the SVG endorements icon using data from svg.getSVGData.
function buildSVG(data) {
var svg = svgBuilder.newInstance();
svg.width(40).height(40); // Shot caller circle.
svg.circle({
r: Constants.r,
fill: Colors.gray,
'stroke-dasharray': data.shotcaller.dasharray,
'stroke-dashoffset': data.shotcaller.dashoffset,
'stroke-width': Constants.strokeWidth,
stroke: Colors.orange,
cx: Constants.cx,
cy: Constants.cy
}); // Teammate circle.
svg.circle({
r: Constants.r,
fill: Colors.transparent,
'stroke-dasharray': data.teammate.dasharray,
'stroke-dashoffset': data.teammate.dashoffset,
'stroke-width': Constants.strokeWidth,
stroke: Colors.magenta,
cx: Constants.cx,
cy: Constants.cy
}); // Sportsmanship circle.
svg.circle({
r: Constants.r,
fill: Colors.transparent,
'stroke-dasharray': data.sportsmanship.dasharray,
'stroke-dashoffset': data.sportsmanship.dashoffset,
'stroke-width': Constants.strokeWidth,
stroke: Colors.green,
cx: Constants.cx,
cy: Constants.cy
}); // Centered text with endorsement level.
svg.text({
x: '50%',
y: '50%',
dy: '.3em',
'font-family': 'century gothic,arial,sans-serif',
'font-weight': 300,
'font-size': 16,
stroke: Colors.white,
'stroke-width': '1',
fill: Colors.white,
'text-anchor': 'middle'
}, "".concat(data.level)); // Output SVG as a base64 encoded data URI.
var b64 = new Buffer.from(svg.render()).toString('base64');
return "data:image/svg+xml;base64,".concat(b64);
}
function createEndorsementSVG(endorsementsObj) {
var svgData = getSVGData(endorsementsObj);
var svg = buildSVG(svgData);
return svg;
}