@gamepark/rules-api 7.0.0-beta.0 → 7.0.0-beta.2
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/Action.js +1 -2
- package/dist/Bot.js +15 -37
- package/dist/Bot.js.map +1 -1
- package/dist/Competitive.js +3 -8
- package/dist/Competitive.js.map +1 -1
- package/dist/Eliminations.js +2 -5
- package/dist/Eliminations.js.map +1 -1
- package/dist/GameSetup.js +1 -2
- package/dist/HiddenInformation.js +2 -5
- package/dist/HiddenInformation.js.map +1 -1
- package/dist/LocalMovePreview.js +1 -4
- package/dist/LocalMovePreview.js.map +1 -1
- package/dist/RandomMove.js +1 -2
- package/dist/Rules.js +49 -56
- package/dist/Rules.js.map +1 -1
- package/dist/SecretInformation.js +2 -5
- package/dist/SecretInformation.js.map +1 -1
- package/dist/TimeLimit.js +1 -4
- package/dist/TimeLimit.js.map +1 -1
- package/dist/Undo.js +2 -5
- package/dist/Undo.js.map +1 -1
- package/dist/UnpredictableMove.js +1 -5
- package/dist/UnpredictableMove.js.map +1 -1
- package/dist/index.js +16 -32
- package/dist/index.js.map +1 -1
- package/dist/material/HiddenMaterialRules.js +125 -180
- package/dist/material/HiddenMaterialRules.js.map +1 -1
- package/dist/material/MaterialGame.js +1 -2
- package/dist/material/MaterialGameSetup.js +52 -70
- package/dist/material/MaterialGameSetup.js.map +1 -1
- package/dist/material/MaterialRules.js +186 -250
- package/dist/material/MaterialRules.js.map +1 -1
- package/dist/material/SecretMaterialRules.js +9 -35
- package/dist/material/SecretMaterialRules.js.map +1 -1
- package/dist/material/index.js +11 -27
- package/dist/material/index.js.map +1 -1
- package/dist/material/items/Material.js +177 -262
- package/dist/material/items/Material.js.map +1 -1
- package/dist/material/items/MaterialDeck.js +10 -36
- package/dist/material/items/MaterialDeck.js.map +1 -1
- package/dist/material/items/MaterialItem.js +1 -2
- package/dist/material/items/MaterialMoney.js +89 -141
- package/dist/material/items/MaterialMoney.js.map +1 -1
- package/dist/material/items/MaterialMutator.js +108 -145
- package/dist/material/items/MaterialMutator.js.map +1 -1
- package/dist/material/items/index.js +5 -21
- package/dist/material/items/index.js.map +1 -1
- package/dist/material/location/Location.js +1 -14
- package/dist/material/location/Location.js.map +1 -1
- package/dist/material/location/LocationBuilder.js +26 -41
- package/dist/material/location/LocationBuilder.js.map +1 -1
- package/dist/material/location/index.js +3 -19
- package/dist/material/location/index.js.map +1 -1
- package/dist/material/location/strategy/FillGapStrategy.js +9 -16
- package/dist/material/location/strategy/FillGapStrategy.js.map +1 -1
- package/dist/material/location/strategy/LocationStrategy.js +1 -2
- package/dist/material/location/strategy/PositiveSequenceStrategy.js +26 -35
- package/dist/material/location/strategy/PositiveSequenceStrategy.js.map +1 -1
- package/dist/material/location/strategy/StackingStrategy.js +15 -22
- package/dist/material/location/strategy/StackingStrategy.js.map +1 -1
- package/dist/material/location/strategy/index.js +5 -23
- package/dist/material/location/strategy/index.js.map +1 -1
- package/dist/material/memory/GameMemory.js +10 -14
- package/dist/material/memory/GameMemory.js.map +1 -1
- package/dist/material/memory/PlayerMemory.js +13 -18
- package/dist/material/memory/PlayerMemory.js.map +1 -1
- package/dist/material/memory/index.js +2 -18
- package/dist/material/memory/index.js.map +1 -1
- package/dist/material/moves/CustomMove.js +4 -9
- package/dist/material/moves/CustomMove.js.map +1 -1
- package/dist/material/moves/MaterialMove.js +1 -2
- package/dist/material/moves/MaterialMoveBuilder.js +16 -32
- package/dist/material/moves/MaterialMoveBuilder.js.map +1 -1
- package/dist/material/moves/MoveKind.js +2 -5
- package/dist/material/moves/MoveKind.js.map +1 -1
- package/dist/material/moves/index.js +7 -23
- package/dist/material/moves/index.js.map +1 -1
- package/dist/material/moves/items/CreateItem.js +6 -12
- package/dist/material/moves/items/CreateItem.js.map +1 -1
- package/dist/material/moves/items/CreateItemsAtOnce.js +6 -12
- package/dist/material/moves/items/CreateItemsAtOnce.js.map +1 -1
- package/dist/material/moves/items/DeleteItem.js +6 -12
- package/dist/material/moves/items/DeleteItem.js.map +1 -1
- package/dist/material/moves/items/DeleteItemsAtOnce.js +6 -12
- package/dist/material/moves/items/DeleteItemsAtOnce.js.map +1 -1
- package/dist/material/moves/items/ItemMove.js +1 -2
- package/dist/material/moves/items/ItemMoveType.js +2 -5
- package/dist/material/moves/items/ItemMoveType.js.map +1 -1
- package/dist/material/moves/items/MoveItem.js +6 -12
- package/dist/material/moves/items/MoveItem.js.map +1 -1
- package/dist/material/moves/items/MoveItemsAtOnce.js +6 -12
- package/dist/material/moves/items/MoveItemsAtOnce.js.map +1 -1
- package/dist/material/moves/items/RollItem.js +6 -12
- package/dist/material/moves/items/RollItem.js.map +1 -1
- package/dist/material/moves/items/SelectItem.js +6 -12
- package/dist/material/moves/items/SelectItem.js.map +1 -1
- package/dist/material/moves/items/Shuffle.js +7 -14
- package/dist/material/moves/items/Shuffle.js.map +1 -1
- package/dist/material/moves/items/index.js +11 -27
- package/dist/material/moves/items/index.js.map +1 -1
- package/dist/material/moves/local/CloseTutorialPopup.js +4 -7
- package/dist/material/moves/local/CloseTutorialPopup.js.map +1 -1
- package/dist/material/moves/local/DisplayHelp.js +2 -5
- package/dist/material/moves/local/DisplayHelp.js.map +1 -1
- package/dist/material/moves/local/DropItem.js +1 -2
- package/dist/material/moves/local/LocalMove.js +2 -5
- package/dist/material/moves/local/LocalMove.js.map +1 -1
- package/dist/material/moves/local/SetTutorialStep.js +4 -7
- package/dist/material/moves/local/SetTutorialStep.js.map +1 -1
- package/dist/material/moves/local/index.js +5 -21
- package/dist/material/moves/local/index.js.map +1 -1
- package/dist/material/moves/rules/EndGame.js +4 -7
- package/dist/material/moves/rules/EndGame.js.map +1 -1
- package/dist/material/moves/rules/EndPlayerTurn.js +4 -7
- package/dist/material/moves/rules/EndPlayerTurn.js.map +1 -1
- package/dist/material/moves/rules/RuleMove.js +3 -7
- package/dist/material/moves/rules/RuleMove.js.map +1 -1
- package/dist/material/moves/rules/StartPlayerTurn.js +4 -7
- package/dist/material/moves/rules/StartPlayerTurn.js.map +1 -1
- package/dist/material/moves/rules/StartRule.js +4 -7
- package/dist/material/moves/rules/StartRule.js.map +1 -1
- package/dist/material/moves/rules/StartSimultaneousRule.js +4 -7
- package/dist/material/moves/rules/StartSimultaneousRule.js.map +1 -1
- package/dist/material/moves/rules/index.js +6 -22
- package/dist/material/moves/rules/index.js.map +1 -1
- package/dist/material/rules/MaterialRulesPart.js +38 -63
- package/dist/material/rules/MaterialRulesPart.js.map +1 -1
- package/dist/material/rules/PlayerTurnRule.js +20 -52
- package/dist/material/rules/PlayerTurnRule.js.map +1 -1
- package/dist/material/rules/RuleStep.js +1 -2
- package/dist/material/rules/SimultaneousRule.js +19 -51
- package/dist/material/rules/SimultaneousRule.js.map +1 -1
- package/dist/material/rules/index.js +4 -20
- package/dist/material/rules/index.js.map +1 -1
- package/dist/material/tutorial/TutorialState.js +1 -2
- package/dist/material/tutorial/index.js +1 -17
- package/dist/material/tutorial/index.js.map +1 -1
- package/dist/options/EnumArrayOption.js +3 -6
- package/dist/options/EnumArrayOption.js.map +1 -1
- package/dist/options/EnumOption.js +1 -4
- package/dist/options/EnumOption.js.map +1 -1
- package/dist/options/Option.js +1 -2
- package/dist/options/OptionSpecOf.js +1 -2
- package/dist/options/OptionsSpec.js +1 -2
- package/dist/options/OptionsValidationError.js +6 -28
- package/dist/options/OptionsValidationError.js.map +1 -1
- package/dist/options/PlayerEnumOption.js +19 -29
- package/dist/options/PlayerEnumOption.js.map +1 -1
- package/dist/options/PlayersOptionsSpec.js +1 -2
- package/dist/options/WithIdOption.js +1 -2
- package/dist/options/WithPlayerOptionsSpec.js +1 -4
- package/dist/options/WithPlayerOptionsSpec.js.map +1 -1
- package/dist/options/WithPlayersOptions.js +1 -2
- package/dist/options/index.js +12 -28
- package/dist/options/index.js.map +1 -1
- package/dist/options/isWithPlayerIdOptions.js +3 -6
- package/dist/options/isWithPlayerIdOptions.js.map +1 -1
- package/dist/utils/action-view.util.js +18 -25
- package/dist/utils/action-view.util.js.map +1 -1
- package/dist/utils/action.util.js +11 -16
- package/dist/utils/action.util.js.map +1 -1
- package/dist/utils/adjacent-groups.util.js +33 -41
- package/dist/utils/adjacent-groups.util.js.map +1 -1
- package/dist/utils/automatic-moves.util.js +10 -15
- package/dist/utils/automatic-moves.util.js.map +1 -1
- package/dist/utils/enum.util.js +7 -13
- package/dist/utils/enum.util.js.map +1 -1
- package/dist/utils/game-view.util.js +5 -8
- package/dist/utils/game-view.util.js.map +1 -1
- package/dist/utils/grid.hex.util.js +36 -88
- package/dist/utils/grid.hex.util.js.map +1 -1
- package/dist/utils/grid.squares.util.js +8 -19
- package/dist/utils/grid.squares.util.js.map +1 -1
- package/dist/utils/grid.util.js +1 -5
- package/dist/utils/grid.util.js.map +1 -1
- package/dist/utils/index.js +16 -32
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/listing.util.js +8 -13
- package/dist/utils/listing.util.js.map +1 -1
- package/dist/utils/loops.util.js +3 -6
- package/dist/utils/loops.util.js.map +1 -1
- package/dist/utils/money.util.js +54 -73
- package/dist/utils/money.util.js.map +1 -1
- package/dist/utils/neighbors.util.js +6 -10
- package/dist/utils/neighbors.util.js.map +1 -1
- package/dist/utils/polyhex.util.js +36 -56
- package/dist/utils/polyhex.util.js.map +1 -1
- package/dist/utils/random.util.js +2 -5
- package/dist/utils/random.util.js.map +1 -1
- package/dist/utils/rank.util.js +9 -13
- package/dist/utils/rank.util.js.map +1 -1
- package/package.json +43 -37
- package/dist/ApplyAutomaticMoves.d.ts +0 -2
- package/dist/ApplyAutomaticMoves.js +0 -25
- package/dist/ApplyAutomaticMoves.js.map +0 -1
- package/dist/DefaultGameSetup.d.ts +0 -7
- package/dist/DefaultGameSetup.js +0 -15
- package/dist/DefaultGameSetup.js.map +0 -1
- package/dist/Dummy.d.ts +0 -7
- package/dist/Dummy.js +0 -27
- package/dist/Dummy.js.map +0 -1
- package/dist/GameSetupCreator.d.ts +0 -4
- package/dist/GameSetupCreator.js +0 -3
- package/dist/GameSetupCreator.js.map +0 -1
- package/dist/IncompleteInformation.d.ts +0 -14
- package/dist/IncompleteInformation.js +0 -38
- package/dist/IncompleteInformation.js.map +0 -1
- package/dist/LoopWithFuse.d.ts +0 -4
- package/dist/LoopWithFuse.js +0 -15
- package/dist/LoopWithFuse.js.map +0 -1
- package/dist/Robot.d.ts +0 -1
- package/dist/Robot.js +0 -3
- package/dist/Robot.js.map +0 -1
- package/dist/RulesCreator.d.ts +0 -7
- package/dist/RulesCreator.js +0 -3
- package/dist/RulesCreator.js.map +0 -1
- package/dist/material/location/strategy/StakingStrategy.d.ts +0 -12
- package/dist/material/location/strategy/StakingStrategy.js +0 -32
- package/dist/material/location/strategy/StakingStrategy.js.map +0 -1
- package/dist/material/moves/items/ItemMovesBuilder.d.ts +0 -8
- package/dist/material/moves/items/ItemMovesBuilder.js +0 -34
- package/dist/material/moves/items/ItemMovesBuilder.js.map +0 -1
- package/dist/material/rules/MaterialMoveBuilder.d.ts +0 -9
- package/dist/material/rules/MaterialMoveBuilder.js +0 -28
- package/dist/material/rules/MaterialMoveBuilder.js.map +0 -1
- package/dist/material/rules/MaterialRulesMovesBuilder.d.ts +0 -12
- package/dist/material/rules/MaterialRulesMovesBuilder.js +0 -36
- package/dist/material/rules/MaterialRulesMovesBuilder.js.map +0 -1
- package/dist/setup/DefaultGameSetup.d.ts +0 -7
- package/dist/setup/DefaultGameSetup.js +0 -15
- package/dist/setup/DefaultGameSetup.js.map +0 -1
- package/dist/setup/GameSetup.d.ts +0 -3
- package/dist/setup/GameSetup.js +0 -3
- package/dist/setup/GameSetup.js.map +0 -1
- package/dist/setup/GameSetupCreator.d.ts +0 -4
- package/dist/setup/GameSetupCreator.js +0 -3
- package/dist/setup/GameSetupCreator.js.map +0 -1
- package/dist/setup/index.d.ts +0 -2
- package/dist/setup/index.js +0 -19
- package/dist/setup/index.js.map +0 -1
- package/dist/utils/EnumUtils.d.ts +0 -1
- package/dist/utils/EnumUtils.js +0 -8
- package/dist/utils/EnumUtils.js.map +0 -1
- package/dist/utils/coordinates.util.d.ts +0 -5
- package/dist/utils/coordinates.util.js +0 -16
- package/dist/utils/coordinates.util.js.map +0 -1
- package/dist/utils/isDeadEndMove.util.d.ts +0 -2
- package/dist/utils/isDeadEndMove.util.js +0 -19
- package/dist/utils/isDeadEndMove.util.js.map +0 -1
package/dist/utils/grid.util.js
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isXYCoordinates = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Type guard to know if we have an object with XY coordinates
|
|
6
3
|
* @param coordinates The object
|
|
7
4
|
* @returns true if coordinates is a {@link XYCoordinates}
|
|
8
5
|
*/
|
|
9
|
-
|
|
6
|
+
export const isXYCoordinates = (coordinates) => {
|
|
10
7
|
return typeof coordinates === 'object' && typeof coordinates.x === 'number' && typeof coordinates.y === 'number';
|
|
11
8
|
};
|
|
12
|
-
exports.isXYCoordinates = isXYCoordinates;
|
|
13
9
|
//# sourceMappingURL=grid.util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.util.js","sourceRoot":"","sources":["../../src/utils/grid.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grid.util.js","sourceRoot":"","sources":["../../src/utils/grid.util.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,WAAgB,EAAgC,EAAE;IAChF,OAAO,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,WAAW,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,WAAW,CAAC,CAAC,KAAK,QAAQ,CAAA;AAClH,CAAC,CAAA"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,33 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
__exportStar(require("./adjacent-groups.util"), exports);
|
|
18
|
-
__exportStar(require("./action.util"), exports);
|
|
19
|
-
__exportStar(require("./action-view.util"), exports);
|
|
20
|
-
__exportStar(require("./automatic-moves.util"), exports);
|
|
21
|
-
__exportStar(require("./enum.util"), exports);
|
|
22
|
-
__exportStar(require("./game-view.util"), exports);
|
|
23
|
-
__exportStar(require("./grid.util"), exports);
|
|
24
|
-
__exportStar(require("./grid.hex.util"), exports);
|
|
25
|
-
__exportStar(require("./grid.squares.util"), exports);
|
|
26
|
-
__exportStar(require("./listing.util"), exports);
|
|
27
|
-
__exportStar(require("./loops.util"), exports);
|
|
28
|
-
__exportStar(require("./money.util"), exports);
|
|
29
|
-
__exportStar(require("./neighbors.util"), exports);
|
|
30
|
-
__exportStar(require("./polyhex.util"), exports);
|
|
31
|
-
__exportStar(require("./random.util"), exports);
|
|
32
|
-
__exportStar(require("./rank.util"), exports);
|
|
1
|
+
export * from './adjacent-groups.util';
|
|
2
|
+
export * from './action.util';
|
|
3
|
+
export * from './action-view.util';
|
|
4
|
+
export * from './automatic-moves.util';
|
|
5
|
+
export * from './enum.util';
|
|
6
|
+
export * from './game-view.util';
|
|
7
|
+
export * from './grid.util';
|
|
8
|
+
export * from './grid.hex.util';
|
|
9
|
+
export * from './grid.squares.util';
|
|
10
|
+
export * from './listing.util';
|
|
11
|
+
export * from './loops.util';
|
|
12
|
+
export * from './money.util';
|
|
13
|
+
export * from './neighbors.util';
|
|
14
|
+
export * from './polyhex.util';
|
|
15
|
+
export * from './random.util';
|
|
16
|
+
export * from './rank.util';
|
|
33
17
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA"}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.listingToList = listingToList;
|
|
4
|
-
exports.listToListing = listToListing;
|
|
5
1
|
/**
|
|
6
2
|
* A listing is a quantity of items indexed by they identifier
|
|
7
3
|
* Use this function to get a list of items where each item is included as much time as their listed quantity
|
|
8
4
|
* @param listing The listing
|
|
9
5
|
* @returns the list matching the listing
|
|
10
6
|
*/
|
|
11
|
-
function listingToList(listing) {
|
|
12
|
-
|
|
13
|
-
for (
|
|
14
|
-
|
|
15
|
-
for (
|
|
7
|
+
export function listingToList(listing) {
|
|
8
|
+
const list = [];
|
|
9
|
+
for (const key in listing) {
|
|
10
|
+
const intKey = parseInt(key);
|
|
11
|
+
for (let i = 0; i < listing[key]; i++) {
|
|
16
12
|
list.push(intKey);
|
|
17
13
|
}
|
|
18
14
|
}
|
|
@@ -24,10 +20,9 @@ function listingToList(listing) {
|
|
|
24
20
|
* @param list The list
|
|
25
21
|
* @returns the listing matching the list
|
|
26
22
|
*/
|
|
27
|
-
function listToListing(list) {
|
|
28
|
-
|
|
29
|
-
for (
|
|
30
|
-
var t = list_1[_i];
|
|
23
|
+
export function listToListing(list) {
|
|
24
|
+
const listing = [];
|
|
25
|
+
for (const t of list) {
|
|
31
26
|
t in listing ? listing[t]++ : listing[t] = 1;
|
|
32
27
|
}
|
|
33
28
|
return listing;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listing.util.js","sourceRoot":"","sources":["../../src/utils/listing.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"listing.util.js","sourceRoot":"","sources":["../../src/utils/listing.util.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAmB,OAAmC;IACjF,MAAM,IAAI,GAAQ,EAAE,CAAA;IACpB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAM,CAAA;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAmB,IAAS;IACvD,MAAM,OAAO,GAA+B,EAAE,CAAA;IAC9C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC/C,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
package/dist/utils/loops.util.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
function loopWithFuse(repeat, options) {
|
|
5
|
-
var attempts = (options === null || options === void 0 ? void 0 : options.attempts) || (process.env.NODE_ENV === 'development' ? 1000 : 10000);
|
|
6
|
-
var errorFn = (options === null || options === void 0 ? void 0 : options.errorFn) || (function () { return new Error('Infinite loop detected'); });
|
|
1
|
+
export function loopWithFuse(repeat, options) {
|
|
2
|
+
let attempts = options?.attempts || (process.env.NODE_ENV === 'development' ? 1000 : 10000);
|
|
3
|
+
const errorFn = options?.errorFn || (() => new Error('Infinite loop detected'));
|
|
7
4
|
while (repeat()) {
|
|
8
5
|
if (attempts == 0) {
|
|
9
6
|
throw errorFn();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loops.util.js","sourceRoot":"","sources":["../../src/utils/loops.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loops.util.js","sourceRoot":"","sources":["../../src/utils/loops.util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,MAAqB,EAAE,OAAsD;IACxG,IAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC3F,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAA;IAC/E,OAAO,MAAM,EAAE,EAAE,CAAC;QAChB,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,MAAM,OAAO,EAAE,CAAA;QACjB,CAAC;QACD,QAAQ,EAAE,CAAA;IACZ,CAAC;AACH,CAAC"}
|
package/dist/utils/money.util.js
CHANGED
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.Money = void 0;
|
|
4
|
-
var es_toolkit_1 = require("es-toolkit");
|
|
5
|
-
var compat_1 = require("es-toolkit/compat");
|
|
1
|
+
import { forEachRight, isEqual, mapValues, sumBy } from 'es-toolkit';
|
|
2
|
+
import { keyBy } from 'es-toolkit/compat';
|
|
6
3
|
/**
|
|
7
4
|
* This class help manipulate any kind of money with arbitrary unit values, like a set of coins of values 1, 2, 5, 10 for instance.
|
|
8
5
|
* @deprecated use {@link MaterialMoney} instead
|
|
9
6
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
export class Money {
|
|
8
|
+
units;
|
|
9
|
+
constructor(units) {
|
|
12
10
|
this.units = units;
|
|
13
|
-
this.units.sort(
|
|
11
|
+
this.units.sort((a, b) => a - b);
|
|
14
12
|
}
|
|
15
13
|
/**
|
|
16
14
|
* Count the total value of a material instance
|
|
17
15
|
* @param material The material to count
|
|
18
16
|
* @returns the sum of each item id multiplied by its quantity
|
|
19
17
|
*/
|
|
20
|
-
|
|
21
|
-
return
|
|
22
|
-
}
|
|
18
|
+
count(material) {
|
|
19
|
+
return sumBy(material.getItems(), item => (item.id ?? 1) * (item.quantity ?? 1));
|
|
20
|
+
}
|
|
23
21
|
/**
|
|
24
22
|
* Perform an operation of adding or removing an amount from a location by creating or deleting items
|
|
25
23
|
* @param material The material instance
|
|
@@ -27,21 +25,21 @@ var Money = /** @class */ (function () {
|
|
|
27
25
|
* @param amount Amount to create or delete
|
|
28
26
|
* @returns the moves that need to be played to perform the operation
|
|
29
27
|
*/
|
|
30
|
-
|
|
31
|
-
material = material.location(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
for (
|
|
35
|
-
|
|
28
|
+
createOrDelete(material, location, amount) {
|
|
29
|
+
material = material.location(l => isEqual(l, location));
|
|
30
|
+
const moves = [];
|
|
31
|
+
const delta = amount > 0 ? this.gain(amount) : this.spend(mapValues(keyBy(this.units), unit => material.id(unit).getQuantity()), -amount);
|
|
32
|
+
for (let index = this.units.length - 1; index >= 0; index--) {
|
|
33
|
+
const unit = this.units[index];
|
|
36
34
|
if (delta[unit] < 0) {
|
|
37
35
|
moves.push(material.id(unit).deleteItem(-delta[unit]));
|
|
38
36
|
}
|
|
39
37
|
else if (delta[unit] > 0) {
|
|
40
|
-
moves.push(material.createItem({ id: unit, location
|
|
38
|
+
moves.push(material.createItem({ id: unit, location, quantity: delta[unit] }));
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
return moves;
|
|
44
|
-
}
|
|
42
|
+
}
|
|
45
43
|
/**
|
|
46
44
|
* Move an amount of money from a place to another place. It searches after the easiest way to do it, making money with the bank only if necessary.
|
|
47
45
|
* @param material Material instance for the money (needs to be unfiltered)
|
|
@@ -50,44 +48,37 @@ var Money = /** @class */ (function () {
|
|
|
50
48
|
* @param amount Amount of money to transfer
|
|
51
49
|
* @returns the moves that need to be played to perform the operation
|
|
52
50
|
*/
|
|
53
|
-
|
|
51
|
+
moveAmount(material, origin, target, amount) {
|
|
54
52
|
if (!amount)
|
|
55
53
|
return [];
|
|
56
54
|
if (amount < 0)
|
|
57
55
|
return this.moveAmount(material, target, origin, -amount);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
for (
|
|
65
|
-
|
|
56
|
+
const moves = [];
|
|
57
|
+
const originMaterial = material.location(l => isEqual(l, origin));
|
|
58
|
+
const targetMaterial = material.location(l => isEqual(l, target));
|
|
59
|
+
const originUnits = mapValues(keyBy(this.units), unit => originMaterial.id(unit).getQuantity());
|
|
60
|
+
const originDelta = this.spend(originUnits, amount);
|
|
61
|
+
const targetDelta = this.gain(amount);
|
|
62
|
+
for (let index = this.units.length - 1; index >= 0; index--) {
|
|
63
|
+
const unit = this.units[index];
|
|
66
64
|
if (originDelta[unit] < 0) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (valueSpent === unit && lowerUnits.every(
|
|
65
|
+
while (targetDelta[unit] < -originDelta[unit]) { // try to make money for 1 unit with lower units
|
|
66
|
+
const lowerUnits = this.units.slice(0, this.units.indexOf(unit));
|
|
67
|
+
const targetResult = mapValues(keyBy(lowerUnits), unit => targetMaterial.id(unit).getQuantity() + targetDelta[unit]);
|
|
68
|
+
const targetResultDelta = this.spend(targetResult, unit);
|
|
69
|
+
const valueSpent = sumBy(lowerUnits, unit => -targetResultDelta[unit] * unit);
|
|
70
|
+
if (valueSpent === unit && lowerUnits.every(lowerUnit => targetResultDelta[lowerUnit] < 0)) {
|
|
73
71
|
targetDelta[unit]++;
|
|
74
|
-
for (
|
|
75
|
-
var lowerUnit = lowerUnits_1[_i];
|
|
72
|
+
for (const lowerUnit of lowerUnits) {
|
|
76
73
|
targetDelta[lowerUnit] += targetResultDelta[lowerUnit];
|
|
77
74
|
}
|
|
78
75
|
}
|
|
79
76
|
else
|
|
80
|
-
return "break";
|
|
81
|
-
};
|
|
82
|
-
var this_1 = this;
|
|
83
|
-
while (targetDelta[unit] < -originDelta[unit]) {
|
|
84
|
-
var state_1 = _loop_1();
|
|
85
|
-
if (state_1 === "break")
|
|
86
77
|
break;
|
|
87
78
|
}
|
|
88
|
-
|
|
79
|
+
const moveAmount = Math.min(-originDelta[unit], targetDelta[unit]);
|
|
89
80
|
targetDelta[unit] -= moveAmount;
|
|
90
|
-
|
|
81
|
+
const originMaterialUnit = originMaterial.id(unit);
|
|
91
82
|
if (moveAmount > 0) {
|
|
92
83
|
moves.push(originMaterialUnit.moveItem(target, moveAmount));
|
|
93
84
|
}
|
|
@@ -108,49 +99,41 @@ var Money = /** @class */ (function () {
|
|
|
108
99
|
}
|
|
109
100
|
}
|
|
110
101
|
return moves;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
},
|
|
119
|
-
enumerable: false,
|
|
120
|
-
configurable: true
|
|
121
|
-
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Creates a new record indexes by all units, with value equal to 0 for each unit
|
|
105
|
+
*/
|
|
106
|
+
get record() {
|
|
107
|
+
return mapValues(keyBy(this.units), _ => 0);
|
|
108
|
+
}
|
|
122
109
|
/**
|
|
123
110
|
* Return the best way to gain an amount, prioritizing the highest unit values
|
|
124
111
|
* @param amount Amount to gain, default 1
|
|
125
112
|
* @returns the record of coins to earn (only positive values)
|
|
126
113
|
*/
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
(0, es_toolkit_1.forEachRight)(this.units, function (unit) {
|
|
114
|
+
gain(amount = 1) {
|
|
115
|
+
const gain = this.record;
|
|
116
|
+
forEachRight(this.units, unit => {
|
|
131
117
|
gain[unit] = Math.floor(amount / unit);
|
|
132
118
|
amount %= unit;
|
|
133
119
|
});
|
|
134
120
|
return gain;
|
|
135
|
-
}
|
|
121
|
+
}
|
|
136
122
|
/**
|
|
137
123
|
* Return the best way to spend an amount of owned units, prioritizing the smallest unit values
|
|
138
124
|
* @param owned Amount of units owned before spending
|
|
139
125
|
* @param amount Amount to gain, default 1
|
|
140
126
|
* @returns the record of coins to give away and eventually take (positive and negative values)
|
|
141
127
|
*/
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
for (var _i = 0, _a = this.units; _i < _a.length; _i++) {
|
|
147
|
-
var unit = _a[_i];
|
|
128
|
+
spend(owned, amount = 1) {
|
|
129
|
+
const delta = mapValues(owned, _ => 0);
|
|
130
|
+
for (let _ = 0; _ < amount; _++) {
|
|
131
|
+
for (const unit of this.units) {
|
|
148
132
|
if (owned[unit] + delta[unit] > 0) {
|
|
149
133
|
delta[unit]--;
|
|
150
134
|
if (unit > 1) {
|
|
151
|
-
|
|
152
|
-
for (
|
|
153
|
-
var lowerUnit = _c[_b];
|
|
135
|
+
let rest = unit - 1;
|
|
136
|
+
for (const lowerUnit of this.units.slice(0, this.units.indexOf(unit)).reverse()) {
|
|
154
137
|
if (lowerUnit <= rest) {
|
|
155
138
|
delta[lowerUnit] += Math.floor(rest / lowerUnit);
|
|
156
139
|
rest -= rest % lowerUnit;
|
|
@@ -162,8 +145,6 @@ var Money = /** @class */ (function () {
|
|
|
162
145
|
}
|
|
163
146
|
}
|
|
164
147
|
return delta;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
}());
|
|
168
|
-
exports.Money = Money;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
169
150
|
//# sourceMappingURL=money.util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"money.util.js","sourceRoot":"","sources":["../../src/utils/money.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"money.util.js","sourceRoot":"","sources":["../../src/utils/money.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getNeighbors = getNeighbors;
|
|
4
|
-
exports.areNeighbors = areNeighbors;
|
|
5
1
|
/**
|
|
6
2
|
* Given an item and an array, returns the 2 neighbors of the item.
|
|
7
3
|
* If the item starts or ends the array, the other starting of ending item is considered a neighbor.
|
|
@@ -10,12 +6,12 @@ exports.areNeighbors = areNeighbors;
|
|
|
10
6
|
* @param array Array to search the neighbors in
|
|
11
7
|
* @returns the neighbors of the item in the array
|
|
12
8
|
*/
|
|
13
|
-
function getNeighbors(search, array) {
|
|
14
|
-
|
|
9
|
+
export function getNeighbors(search, array) {
|
|
10
|
+
const index = array.findIndex((item) => typeof search === 'function' ? search(item) : item === search);
|
|
15
11
|
if (index === -1)
|
|
16
12
|
return [];
|
|
17
|
-
return array.filter(
|
|
18
|
-
|
|
13
|
+
return array.filter((_, i) => {
|
|
14
|
+
const distance = Math.abs(index - i);
|
|
19
15
|
return distance === 1 || distance === array.length - 1;
|
|
20
16
|
});
|
|
21
17
|
}
|
|
@@ -26,8 +22,8 @@ function getNeighbors(search, array) {
|
|
|
26
22
|
* @param array Array to search the neighbors in
|
|
27
23
|
* @returns true if items are neighbors in the array
|
|
28
24
|
*/
|
|
29
|
-
function areNeighbors(item1, item2, array) {
|
|
30
|
-
|
|
25
|
+
export function areNeighbors(item1, item2, array) {
|
|
26
|
+
const distance = Math.abs(array.indexOf(item1) - array.indexOf(item2));
|
|
31
27
|
return distance === 1 || distance === array.length - 1;
|
|
32
28
|
}
|
|
33
29
|
//# sourceMappingURL=neighbors.util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neighbors.util.js","sourceRoot":"","sources":["../../src/utils/neighbors.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"neighbors.util.js","sourceRoot":"","sources":["../../src/utils/neighbors.util.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAA+C,MAA+B,EAAE,KAAU;IACpH,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;IACtG,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAA;IAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QACpC,OAAO,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AAEH,MAAM,UAAU,YAAY,CAA+C,KAAQ,EAAE,KAAQ,EAAE,KAAU;IACvG,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;IACtE,OAAO,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;AACxD,CAAC"}
|
|
@@ -1,64 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Polyhex = void 0;
|
|
4
|
-
var grid_hex_util_1 = require("./grid.hex.util");
|
|
1
|
+
import { getHexagonsAtDistance, HexGridSystem, hexRotate, hexTranslate } from './grid.hex.util';
|
|
5
2
|
/**
|
|
6
3
|
* Class to work on Polyhex (multiple hexagons linked together)
|
|
7
4
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
export class Polyhex {
|
|
6
|
+
grid;
|
|
7
|
+
system = HexGridSystem.Axial;
|
|
8
|
+
xMin = 0;
|
|
9
|
+
yMin = 0;
|
|
10
|
+
isEmpty = (value) => value == null; // true for null and undefined
|
|
11
|
+
constructor(grid, config) {
|
|
11
12
|
this.grid = grid;
|
|
12
|
-
this.system =
|
|
13
|
-
this.xMin =
|
|
14
|
-
this.yMin =
|
|
15
|
-
this.isEmpty =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
this.
|
|
19
|
-
|
|
13
|
+
this.system = config?.system ?? this.system;
|
|
14
|
+
this.xMin = config?.xMin ?? this.xMin;
|
|
15
|
+
this.yMin = config?.yMin ?? this.yMin;
|
|
16
|
+
this.isEmpty = config?.isEmpty ?? this.isEmpty;
|
|
17
|
+
}
|
|
18
|
+
get xMax() {
|
|
19
|
+
return Math.max(...this.grid.map((line) => line.length)) + this.xMin - 1;
|
|
20
|
+
}
|
|
21
|
+
get yMax() {
|
|
22
|
+
return this.grid.length + this.yMin - 1;
|
|
23
|
+
}
|
|
24
|
+
getValue(coordinates) {
|
|
25
|
+
return this.grid[coordinates.y - this.yMin]?.[coordinates.x - this.xMin];
|
|
20
26
|
}
|
|
21
|
-
Object.defineProperty(Polyhex.prototype, "xMax", {
|
|
22
|
-
get: function () {
|
|
23
|
-
return Math.max.apply(Math, this.grid.map(function (line) { return line.length; })) + this.xMin - 1;
|
|
24
|
-
},
|
|
25
|
-
enumerable: false,
|
|
26
|
-
configurable: true
|
|
27
|
-
});
|
|
28
|
-
Object.defineProperty(Polyhex.prototype, "yMax", {
|
|
29
|
-
get: function () {
|
|
30
|
-
return this.grid.length + this.yMin - 1;
|
|
31
|
-
},
|
|
32
|
-
enumerable: false,
|
|
33
|
-
configurable: true
|
|
34
|
-
});
|
|
35
|
-
Polyhex.prototype.getValue = function (coordinates) {
|
|
36
|
-
var _a;
|
|
37
|
-
return (_a = this.grid[coordinates.y - this.yMin]) === null || _a === void 0 ? void 0 : _a[coordinates.x - this.xMin];
|
|
38
|
-
};
|
|
39
27
|
/**
|
|
40
28
|
* Utility function to merge multiple polyhex together to create a bigger polyhex: it merges given polyhex grid in current polyhex.
|
|
41
29
|
* @param polyhex Polyhex to merge in the current polyhex
|
|
42
30
|
* @param location Location to merge the new polyhex in
|
|
43
31
|
* @param onOverlap Callback function when a non-empty value is erased
|
|
44
32
|
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}; }
|
|
50
|
-
for (var y = 0; y < polyhex.length; y++) {
|
|
51
|
-
for (var x = 0; x < polyhex[y].length; x++) {
|
|
33
|
+
merge(polyhex, location = {}, onOverlap = () => {
|
|
34
|
+
}) {
|
|
35
|
+
for (let y = 0; y < polyhex.length; y++) {
|
|
36
|
+
for (let x = 0; x < polyhex[y].length; x++) {
|
|
52
37
|
if (!this.isEmpty(polyhex[y][x])) {
|
|
53
|
-
|
|
54
|
-
|
|
38
|
+
const rotatedCoordinates = hexRotate({ x, y }, location.rotation, this.system);
|
|
39
|
+
const coordinates = hexTranslate(rotatedCoordinates, { x: location.x ?? 0, y: location.y ?? 0 }, this.system);
|
|
55
40
|
while (coordinates.y < this.yMin) {
|
|
56
41
|
this.grid.unshift([]);
|
|
57
42
|
this.yMin--;
|
|
58
43
|
}
|
|
59
44
|
while (coordinates.x < this.xMin) {
|
|
60
|
-
for (
|
|
61
|
-
var line1 = _c[_i];
|
|
45
|
+
for (const line1 of this.grid) {
|
|
62
46
|
line1.unshift(undefined);
|
|
63
47
|
}
|
|
64
48
|
this.xMin--;
|
|
@@ -73,21 +57,19 @@ var Polyhex = /** @class */ (function () {
|
|
|
73
57
|
}
|
|
74
58
|
}
|
|
75
59
|
}
|
|
76
|
-
}
|
|
60
|
+
}
|
|
77
61
|
/**
|
|
78
62
|
* Get the minimum distance from given hexagon to a hexagon of the polyhex that matches given predicate
|
|
79
63
|
* @param hex Starting hexagon
|
|
80
64
|
* @param predicate The predicate to match (not empty by default)
|
|
81
65
|
* @returns the minimum distance found
|
|
82
66
|
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
var distance = 0;
|
|
87
|
-
var maxDistance = this.xMax + this.yMax - this.xMin - this.yMin;
|
|
67
|
+
getDistance(hex, predicate = (value) => !this.isEmpty(value)) {
|
|
68
|
+
let distance = 0;
|
|
69
|
+
const maxDistance = this.xMax + this.yMax - this.xMin - this.yMin;
|
|
88
70
|
while (distance < maxDistance) {
|
|
89
|
-
|
|
90
|
-
if (hexagonsAtDistance.some(
|
|
71
|
+
const hexagonsAtDistance = getHexagonsAtDistance(hex, distance, this.system);
|
|
72
|
+
if (hexagonsAtDistance.some((hex) => predicate(this.getValue(hex)))) {
|
|
91
73
|
return distance;
|
|
92
74
|
}
|
|
93
75
|
else {
|
|
@@ -95,8 +77,6 @@ var Polyhex = /** @class */ (function () {
|
|
|
95
77
|
}
|
|
96
78
|
}
|
|
97
79
|
return Infinity;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
}());
|
|
101
|
-
exports.Polyhex = Polyhex;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
102
82
|
//# sourceMappingURL=polyhex.util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyhex.util.js","sourceRoot":"","sources":["../../src/utils/polyhex.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"polyhex.util.js","sourceRoot":"","sources":["../../src/utils/polyhex.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hasRandomMove = hasRandomMove;
|
|
4
1
|
/**
|
|
5
2
|
* Type guard for rules with Random moves
|
|
6
3
|
* @param rules The game's rules
|
|
7
4
|
* @return true if the rules implements {@link RandomMove} interface
|
|
8
5
|
*/
|
|
9
|
-
function hasRandomMove(rules) {
|
|
10
|
-
|
|
6
|
+
export function hasRandomMove(rules) {
|
|
7
|
+
const test = rules;
|
|
11
8
|
return typeof test.randomize === 'function';
|
|
12
9
|
}
|
|
13
10
|
//# sourceMappingURL=random.util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.util.js","sourceRoot":"","sources":["../../src/utils/random.util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"random.util.js","sourceRoot":"","sources":["../../src/utils/random.util.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAkC;IAElC,MAAM,IAAI,GAAG,KAAuE,CAAA;IACpF,OAAO,OAAO,IAAI,CAAC,SAAS,KAAK,UAAU,CAAA;AAC7C,CAAC"}
|