@gamepark/rules-api 6.2.1 → 6.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/material/location/Location.d.ts +1 -4
- package/dist/options/OptionSpecOf.d.ts +2 -0
- package/dist/options/PlayerEnumOption.d.ts +14 -0
- package/dist/options/PlayerEnumOption.js +70 -0
- package/dist/options/PlayerEnumOption.js.map +1 -0
- package/dist/options/PlayersOptionsSpec.d.ts +3 -3
- package/dist/options/index.d.ts +1 -2
- package/dist/options/index.js +1 -2
- package/dist/options/index.js.map +1 -1
- package/dist/utils/grid.squares.util.d.ts +3 -0
- package/dist/utils/grid.squares.util.js +13 -0
- package/dist/utils/grid.squares.util.js.map +1 -0
- package/dist/utils/grid.util.d.ts +5 -0
- package/dist/utils/grid.util.js +8 -0
- package/dist/utils/grid.util.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,13 +1,10 @@
|
|
|
1
|
+
import { XYCoordinates } from '../../utils';
|
|
1
2
|
export declare type Location<Player = number, LocationType = number, Id = any> = {
|
|
2
3
|
type: LocationType;
|
|
3
4
|
id?: Id;
|
|
4
5
|
player?: Player;
|
|
5
6
|
parent?: number;
|
|
6
7
|
} & Partial<Coordinates>;
|
|
7
|
-
export declare type XYCoordinates = {
|
|
8
|
-
x: number;
|
|
9
|
-
y: number;
|
|
10
|
-
};
|
|
11
8
|
export declare type Coordinates = XYCoordinates & {
|
|
12
9
|
z: number;
|
|
13
10
|
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { EnumOption } from './EnumOption';
|
|
2
2
|
import { Option } from './Option';
|
|
3
|
+
import { PlayerEnumOption } from './PlayerEnumOption';
|
|
3
4
|
export declare type OptionSpecOf<T> = [T] extends [boolean] ? Option : EnumOption<T>;
|
|
5
|
+
export declare type PlayerOptionSpecOf<T> = [T] extends [boolean] ? Option : PlayerEnumOption<T>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EnumOption } from './EnumOption';
|
|
2
|
+
export declare type PlayerEnumOption<T = any> = EnumOption<T> & {
|
|
3
|
+
mandatory?: (players: number) => T[];
|
|
4
|
+
unavailable?: (players: number) => T[];
|
|
5
|
+
share?: boolean;
|
|
6
|
+
optional?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare type PlayerIdOption<T = any> = PlayerEnumOption<T> & {
|
|
9
|
+
share?: false;
|
|
10
|
+
optional?: false;
|
|
11
|
+
};
|
|
12
|
+
export declare function getPlayersMandatoryValues<T = any>(spec: PlayerEnumOption<T>, players: number): T[];
|
|
13
|
+
export declare function getPlayersAvailableValues<T = any>(spec: PlayerEnumOption<T>, players: number): T[];
|
|
14
|
+
export declare function generatePlayersOption<T>(playersChoices: (T | null)[], option: PlayerEnumOption<T>): T[];
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generatePlayersOption = exports.getPlayersAvailableValues = exports.getPlayersMandatoryValues = void 0;
|
|
7
|
+
var difference_1 = __importDefault(require("lodash/difference"));
|
|
8
|
+
function getPlayersMandatoryValues(spec, players) {
|
|
9
|
+
return spec.mandatory ? spec.mandatory(players) : [];
|
|
10
|
+
}
|
|
11
|
+
exports.getPlayersMandatoryValues = getPlayersMandatoryValues;
|
|
12
|
+
function getPlayersAvailableValues(spec, players) {
|
|
13
|
+
if (spec.unavailable) {
|
|
14
|
+
var unavailableValues_1 = spec.unavailable(players);
|
|
15
|
+
return spec.values.filter(function (value) { return !unavailableValues_1.includes(value); });
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
return spec.values;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.getPlayersAvailableValues = getPlayersAvailableValues;
|
|
22
|
+
function generatePlayersOption(playersChoices, option) {
|
|
23
|
+
// Force to pick mandatory values
|
|
24
|
+
var mandatoryValues = getPlayersMandatoryValues(option, playersChoices.length);
|
|
25
|
+
for (var _i = 0, mandatoryValues_1 = mandatoryValues; _i < mandatoryValues_1.length; _i++) {
|
|
26
|
+
var mandatoryValue = mandatoryValues_1[_i];
|
|
27
|
+
if (!playersChoices.includes(mandatoryValue)) {
|
|
28
|
+
var freeIndexes = playersChoices.map(function (choice, i) { return choice !== null && mandatoryValues.includes(choice) ? -1 : i; }).filter(function (i) { return i !== -1; });
|
|
29
|
+
var index = freeIndexes[Math.floor(Math.random() * freeIndexes.length)];
|
|
30
|
+
playersChoices[index] = mandatoryValue;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Remove invalid choices
|
|
34
|
+
var availableValues = getPlayersAvailableValues(option, playersChoices.length);
|
|
35
|
+
var _loop_1 = function (i) {
|
|
36
|
+
var choice = playersChoices[i];
|
|
37
|
+
if (choice !== null && !availableValues.includes(choice)) {
|
|
38
|
+
playersChoices[i] = null;
|
|
39
|
+
}
|
|
40
|
+
if (choice !== null && !option.share) {
|
|
41
|
+
var sameChoiceIndexes = playersChoices.map(function (c, i) { return c === choice ? i : -1; }).filter(function (i) { return i !== -1; });
|
|
42
|
+
if (sameChoiceIndexes.length > 0) {
|
|
43
|
+
var keeper = sameChoiceIndexes[Math.floor(Math.random() * sameChoiceIndexes.length)];
|
|
44
|
+
for (var _a = 0, sameChoiceIndexes_1 = sameChoiceIndexes; _a < sameChoiceIndexes_1.length; _a++) {
|
|
45
|
+
var index = sameChoiceIndexes_1[_a];
|
|
46
|
+
if (index !== keeper) {
|
|
47
|
+
playersChoices[index] = null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
for (var i = 0; i < playersChoices.length; i++) {
|
|
54
|
+
_loop_1(i);
|
|
55
|
+
}
|
|
56
|
+
if (!option.optional) {
|
|
57
|
+
// Provide missing choices (different values if possible)
|
|
58
|
+
var remainingValues = (0, difference_1.default)(availableValues, playersChoices);
|
|
59
|
+
for (var i = 0; i < playersChoices.length; i++) {
|
|
60
|
+
if (playersChoices[i] === null) {
|
|
61
|
+
if (remainingValues.length === 0)
|
|
62
|
+
remainingValues.push.apply(remainingValues, availableValues);
|
|
63
|
+
playersChoices[i] = remainingValues.splice(Math.floor(Math.random() * remainingValues.length), 1)[0];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return playersChoices;
|
|
68
|
+
}
|
|
69
|
+
exports.generatePlayersOption = generatePlayersOption;
|
|
70
|
+
//# sourceMappingURL=PlayerEnumOption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerEnumOption.js","sourceRoot":"","sources":["../../src/options/PlayerEnumOption.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PlayerEnumOption } from './PlayerEnumOption';
|
|
2
2
|
import { WithIdOption } from './WithIdOption';
|
|
3
3
|
export declare type PlayersOptionsSpec<Options> = (Options extends WithIdOption<infer Id> ? {
|
|
4
|
-
id:
|
|
4
|
+
id: PlayerEnumOption<Id>;
|
|
5
5
|
} : {}) & {
|
|
6
|
-
[key in keyof Omit<Options, 'id'>]:
|
|
6
|
+
[key in keyof Omit<Options, 'id'>]: PlayerEnumOption<Options[key]>;
|
|
7
7
|
};
|
package/dist/options/index.d.ts
CHANGED
|
@@ -5,9 +5,8 @@ export * from './Option';
|
|
|
5
5
|
export * from './OptionSpecOf';
|
|
6
6
|
export * from './OptionsSpec';
|
|
7
7
|
export * from './OptionsValidationError';
|
|
8
|
-
export * from './
|
|
8
|
+
export * from './PlayerEnumOption';
|
|
9
9
|
export * from './PlayersOptionsSpec';
|
|
10
|
-
export * from './providePlayerIds';
|
|
11
10
|
export * from './WithIdOption';
|
|
12
11
|
export * from './WithPlayerOptionsSpec';
|
|
13
12
|
export * from './WithPlayersOptions';
|
package/dist/options/index.js
CHANGED
|
@@ -21,9 +21,8 @@ __exportStar(require("./Option"), exports);
|
|
|
21
21
|
__exportStar(require("./OptionSpecOf"), exports);
|
|
22
22
|
__exportStar(require("./OptionsSpec"), exports);
|
|
23
23
|
__exportStar(require("./OptionsValidationError"), exports);
|
|
24
|
-
__exportStar(require("./
|
|
24
|
+
__exportStar(require("./PlayerEnumOption"), exports);
|
|
25
25
|
__exportStar(require("./PlayersOptionsSpec"), exports);
|
|
26
|
-
__exportStar(require("./providePlayerIds"), exports);
|
|
27
26
|
__exportStar(require("./WithIdOption"), exports);
|
|
28
27
|
__exportStar(require("./WithPlayerOptionsSpec"), exports);
|
|
29
28
|
__exportStar(require("./WithPlayersOptions"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/options/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,0DAAuC;AACvC,0DAAuC;AACvC,2CAAwB;AACxB,iDAA8B;AAC9B,gDAA6B;AAC7B,2DAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/options/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,0DAAuC;AACvC,0DAAuC;AACvC,2CAAwB;AACxB,iDAA8B;AAC9B,gDAA6B;AAC7B,2DAAwC;AACxC,qDAAkC;AAClC,uDAAoC;AACpC,iDAA8B;AAC9B,0DAAuC;AACvC,uDAAoC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { XYCoordinates } from './grid.util';
|
|
2
|
+
export declare const areAdjacentSquares: (square1: Partial<XYCoordinates>, square2: Partial<XYCoordinates>) => boolean;
|
|
3
|
+
export declare const getDistanceBetweenSquares: (square1: XYCoordinates, square2: XYCoordinates) => number;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDistanceBetweenSquares = exports.areAdjacentSquares = void 0;
|
|
4
|
+
var grid_util_1 = require("./grid.util");
|
|
5
|
+
var areAdjacentSquares = function (square1, square2) {
|
|
6
|
+
return (0, grid_util_1.isXYCoordinates)(square1) && (0, grid_util_1.isXYCoordinates)(square2) && (0, exports.getDistanceBetweenSquares)(square1, square2) === 1;
|
|
7
|
+
};
|
|
8
|
+
exports.areAdjacentSquares = areAdjacentSquares;
|
|
9
|
+
var getDistanceBetweenSquares = function (square1, square2) {
|
|
10
|
+
return Math.abs(square1.x - square2.x) + Math.abs(square1.y - square2.y);
|
|
11
|
+
};
|
|
12
|
+
exports.getDistanceBetweenSquares = getDistanceBetweenSquares;
|
|
13
|
+
//# sourceMappingURL=grid.squares.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.squares.util.js","sourceRoot":"","sources":["../../src/utils/grid.squares.util.ts"],"names":[],"mappings":";;;AAAA,yCAA4D;AAErD,IAAM,kBAAkB,GAAG,UAAC,OAA+B,EAAE,OAA+B;IACjG,OAAA,IAAA,2BAAe,EAAC,OAAO,CAAC,IAAI,IAAA,2BAAe,EAAC,OAAO,CAAC,IAAI,IAAA,iCAAyB,EAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC;AAAzG,CAAyG,CAAA;AAD9F,QAAA,kBAAkB,sBAC4E;AAEpG,IAAM,yBAAyB,GAAG,UAAC,OAAsB,EAAE,OAAsB;IACtF,OAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAAjE,CAAiE,CAAA;AADtD,QAAA,yBAAyB,6BAC6B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isXYCoordinates = void 0;
|
|
4
|
+
var isXYCoordinates = function (coordinates) {
|
|
5
|
+
return typeof coordinates === 'object' && typeof coordinates.x === 'number' && typeof coordinates.y === 'number';
|
|
6
|
+
};
|
|
7
|
+
exports.isXYCoordinates = isXYCoordinates;
|
|
8
|
+
//# sourceMappingURL=grid.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.util.js","sourceRoot":"","sources":["../../src/utils/grid.util.ts"],"names":[],"mappings":";;;AAKO,IAAM,eAAe,GAAG,UAAC,WAAgB;IAC9C,OAAO,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,WAAW,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,WAAW,CAAC,CAAC,KAAK,QAAQ,CAAA;AAClH,CAAC,CAAA;AAFY,QAAA,eAAe,mBAE3B"}
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.js
CHANGED
|
@@ -15,4 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./EnumUtils"), exports);
|
|
18
|
+
__exportStar(require("./grid.util"), exports);
|
|
19
|
+
__exportStar(require("./grid.squares.util"), exports);
|
|
18
20
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,8CAA2B;AAC3B,sDAAmC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gamepark/rules-api",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0",
|
|
4
4
|
"description": "API to implement the rules of a board game",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"@types/lodash": "^4.14.195",
|
|
30
30
|
"i18next": ">=21.3.0"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "ac86765b6660714ab420ddbd0970316ccb208fbd"
|
|
33
33
|
}
|