UNPKG

werewolf-core

Version:

Are you a WEREWOLF?

67 lines (66 loc) 1.82 kB
"use strict"; var extend = require('extend'); exports.VOTERESULT_CHOSEN = 'chosen'; exports.VOTERESULT_MULTI = 'multi'; exports.VOTERESULT_NONE = 'none'; function initVoteBox() { return {}; } exports.initVoteBox = initVoteBox; function addVote(box, obj) { box[obj.from] = extend({}, obj); } exports.addVote = addVote; function countVotes(box) { var cnt = {}; for (var fromid in box) { var _a = box[fromid], to = _a.to, num = _a.num, priority = _a.priority; if (cnt[to] == null) { cnt[to] = { from: 'DUMMY', to: to, num: num, priority: priority, }; } else { cnt[to].num += num; if (priority > cnt[to].priority) { cnt[to].priority = priority; } } } var ids = Object.keys(cnt); ids.sort(function (a, b) { return cnt[b].num - cnt[a].num || cnt[b].priority - cnt[a].priority; }); if (ids.length === 0) { return { result: exports.VOTERESULT_NONE, ids: ids, }; } else if (ids.length === 1) { return { result: exports.VOTERESULT_CHOSEN, ids: ids, }; } else { var top_1 = cnt[ids[0]]; var chosen = []; for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) { var id = ids_1[_i]; var c = cnt[id]; if (c.num === top_1.num && c.priority === top_1.priority) { chosen.push(id); } else { break; } } return { result: chosen.length === 1 ? exports.VOTERESULT_CHOSEN : exports.VOTERESULT_MULTI, ids: chosen, }; } } exports.countVotes = countVotes;