UNPKG

@gamepark/rules-api

Version:

API to implement the rules of a board game

70 lines 3.42 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generatePlayersOption = exports.getPlayersAvailableValues = exports.getPlayersMandatoryValues = void 0; var difference_1 = __importDefault(require("lodash/difference")); function getPlayersMandatoryValues(spec, players) { return spec.mandatory ? spec.mandatory(players) : []; } exports.getPlayersMandatoryValues = getPlayersMandatoryValues; function getPlayersAvailableValues(spec, players) { if (spec.unavailable) { var unavailableValues_1 = spec.unavailable(players); return spec.values.filter(function (value) { return !unavailableValues_1.includes(value); }); } else { return spec.values; } } exports.getPlayersAvailableValues = getPlayersAvailableValues; function generatePlayersOption(playersChoices, option) { // Force to pick mandatory values var mandatoryValues = getPlayersMandatoryValues(option, playersChoices.length); for (var _i = 0, mandatoryValues_1 = mandatoryValues; _i < mandatoryValues_1.length; _i++) { var mandatoryValue = mandatoryValues_1[_i]; if (!playersChoices.includes(mandatoryValue)) { var freeIndexes = playersChoices.map(function (choice, i) { return choice !== null && mandatoryValues.includes(choice) ? -1 : i; }).filter(function (i) { return i !== -1; }); var index = freeIndexes[Math.floor(Math.random() * freeIndexes.length)]; playersChoices[index] = mandatoryValue; } } // Remove invalid choices var availableValues = getPlayersAvailableValues(option, playersChoices.length); var _loop_1 = function (i) { var choice = playersChoices[i]; if (choice !== null && !availableValues.includes(choice)) { playersChoices[i] = null; } if (choice !== null && !option.share) { var sameChoiceIndexes = playersChoices.map(function (c, i) { return c === choice ? i : -1; }).filter(function (i) { return i !== -1; }); if (sameChoiceIndexes.length > 0) { var keeper = sameChoiceIndexes[Math.floor(Math.random() * sameChoiceIndexes.length)]; for (var _a = 0, sameChoiceIndexes_1 = sameChoiceIndexes; _a < sameChoiceIndexes_1.length; _a++) { var index = sameChoiceIndexes_1[_a]; if (index !== keeper) { playersChoices[index] = null; } } } } }; for (var i = 0; i < playersChoices.length; i++) { _loop_1(i); } if (!option.optional) { // Provide missing choices (different values if possible) var remainingValues = (0, difference_1.default)(availableValues, playersChoices); for (var i = 0; i < playersChoices.length; i++) { if (playersChoices[i] === null) { if (remainingValues.length === 0) remainingValues.push.apply(remainingValues, availableValues); playersChoices[i] = remainingValues.splice(Math.floor(Math.random() * remainingValues.length), 1)[0]; } } } return playersChoices; } exports.generatePlayersOption = generatePlayersOption; //# sourceMappingURL=PlayerEnumOption.js.map