var totalPoints = 28; var renderPerks = function () { var html = '', special = getSPECIAL(); specialRu = getSPECIALru(); html += ''; for (var i = 0; i < special.length; ++i) { html += '' + specialRu[i].special.toUpperCase() + ': ' + special[i].value + ''; } html += ''; for (var i = 0; i <= 9; ++i) { html += ''; for (var j = 0; j < perks.length; ++j) { var perk = perks[j].perks[i], className = i > special[j].value - 1 ? ' unavailable' : ''; if (!perk.currentRank) { perk.currentRank = 0; } if (className == ' unavailable') { perk.currentRank = 0; } var title = ''; title += perk.ranked.map(function (rank) { var rankClass = perk.currentRank >= rank.rank ? 'has-rank' : 'no-rank'; return '

Ранг ' + rank.rank + ' (' + rank.level + '): ' + rank.description + '

'; }).join(''); html += '
'; if (className !== ' unavailable') { html += '
 ' + perk.currentRank + ' / ' + perk.ranks + ' 
'; } html += ''; } html += ''; } $('.table').html(html); } var getJSON = function () { return btoa(JSON.stringify({ s: getSPECIALShort(), r: getRanks() })); } var getRanks = function () { var ranks = []; for (var i = 0; i < perks.length; ++i) { for (var j = 0; j < perks[i].perks.length; ++j) { var perk = perks[i].perks[j]; if (perk.currentRank && perk.currentRank > 0) { var item = {}; item[perk.name] = perk.currentRank; ranks.push(item); } } } return ranks; } var getSPECIALShort = function () { var specs = []; $('input[type="number"]').each(function () { specs.push($(this).val()); }); return specs; }; var getSPECIAL = function () { return $('[data-special]').map(function () { return { special: $(this).data('special'), value: $(this).find('input').val() }; }); }; var getSPECIALru = function () { return $('[data-special-ru]').map(function () { return { special: $(this).data('special-ru'), }; }); }; var requiredLevel = function () { var total = 0; for (var i = 0; i < perks.length; ++i) { for (var j = 0; j < perks[i].perks.length; ++j) { total += perks[i].perks[j].currentRank; } } var remaining = totalPoints - getAllocatedPoints(); if (remaining < 0) { total += remaining * -1; } var maxLevel = 0; for (var i = 0; i < perks.length; ++i) { for (var j = 0; j < perks[i].perks.length; ++j) { for (var k = 0; k < perks[i].perks[j].currentRank; ++k) { if (perks[i].perks[j].ranked[k].level > maxLevel) { maxLevel = perks[i].perks[j].ranked[k].level; } } } } if (maxLevel > total) total = maxLevel; return total; } var renderRequiredLevel = function () { $('.required-level').text('Необходимый уровень: ' + requiredLevel()); } var renderAll = function () { renderPerks(); calculatePoints(); renderRequiredLevel(); renderSummary(); window.location.hash = '#' + getJSON(); $('.perk').mousedown(function(e) { var $container = $(this), i = parseInt($container.data('i')), j = parseInt($container.data('j')), perk = perks[j].perks[i], special = getSPECIAL(); className = i > special[j].value - 1 ? ' unavailable' : ''; if (e.which === 1 && perk.currentRank < perk.ranks && className !== ' unavailable') { perk.currentRank += 1; renderAll(); } else if (e.which === 3 && perk.currentRank != 0 && className !== ' unavailable') { perk.currentRank -= 1; renderAll(); }; }); }; var calculatePoints = function () { var remaining = totalPoints - getAllocatedPoints(); if (remaining <= 0) { remaining = 0; $(".points-left").hide(250); } else { $(".points-left").show(250); }; $pointsLeft.text(remaining + ' очков осталось'); } var getAllocatedPoints = function () { return $('[data-special] input').map(function () { return parseInt($(this).val()); }).get().reduce(function (prev, curr) { return prev + curr; }); } var $pointsLeft = $('.points-left'); $includeBobbleheads = $('.include-bobbleheads-check'); var includeBobbleheads = function () { return $includeBobbleheads.is(':checked'); } var pointsRemaining = function () { return parseInt($pointsLeft.text()); } var renderSummary = function () { var html = ''; for (var i = 0; i < perks.length; ++i) { for (var j = 0; j < perks[i].perks.length; ++j) { var perk = perks[i].perks[j]; if (perk.currentRank && perk.currentRank > 0) { html += '
  • ' + perk.name_ru + ': ' + perk.currentRank + '/' + perk.ranks + '
  • '; html += ''; } } } $('.summary').html(html); $('[rel="popover"]').popover(); } $(function () { var hash = window.location.hash.replace('#', ''); if (hash.length > 0) { var load = JSON.parse(atob(hash)); $('input[type=number]').each(function (index) { $(this).val(load.s[index]); }); for (var i = 0; i < load.r.length; ++i) { var key = Object.keys(load.r[i])[0], value = load.r[i][key]; for (var j = 0; j < perks.length; ++j) { for (var k = 0; k < perks[j].perks.length; ++k) { var perk = perks[j].perks[k]; if (perk.name === key) { perk.currentRank = value; } } } } } renderAll(); $includeBobbleheads.on('click', function () { if (includeBobbleheads()) { totalPoints += 7; } else { totalPoints -= 7; } renderAll(); }); $('.btn-inc').on('click', function () { var $li = $(this).parent().parent(), $input = $li.find('input'), value = parseInt($input.val()), remaining = totalPoints - getAllocatedPoints(); if (value < 10) { $input.val(value + 1); } renderAll(); }); $('.btn-dec').on('click', function () { var $li = $(this).parent().parent(), $input = $li.find('input'), value = parseInt($input.val()), special = $li.data('special'); if (value > 1) { $input.val(value - 1); for (var i = 0; i < perks.length; ++i) { if (perks[i].special === special) { for (var j = value - 1; j < perks[i].perks.length; ++j) { perks[i].perks[j].currentRank = 0; } } } } renderAll(); }); $('body').on('click', '.btn-inc-perk, .btn-dec-perk', function () { var $container = $(this).parent().parent(), i = parseInt($container.data('i')), j = parseInt($container.data('j')), perk = perks[j].perks[i], incrementing = $(this).hasClass('btn-inc-perk'); if (!perk.currentRank) perk.currentRank = 0; if (incrementing) { if (perk.currentRank < perk.ranks) { perk.currentRank += 1; } } else { if (perk.currentRank > 0) { perk.currentRank -= 1; } } renderAll(); }); }); $('.saveToFile').on('click', function () { html2canvas($(".col-md-3")[0]).then(function(canvas) { canvas.toBlob(function(blob) { saveAs(blob, "F4CP Билд.png"); }); }); }); var angle = sessionStorage['angle'] || '0'; (function RainbowColor() { $(".rainbow").css({"background-color":"hsla(" + (180 + angle) + ", 100%, 50%, 50%)", "color":"hsl(" + angle + ", 100%, 50%)", "border-color":"hsl(" + (180 + angle) + ", 100%, 50%"}); (angle < 360 ? angle++ : angle = 0); sessionStorage['angle'] = angle; requestAnimationFrame(RainbowColor); })();