@gamepark/its-a-wonderful-world 3.0.12 → 3.0.13
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/GameState.d.ts +13 -14
- package/dist/GameState.js +1 -2
- package/dist/GameView.d.ts +11 -12
- package/dist/GameView.js +1 -2
- package/dist/ItsAWonderfulWorld.d.ts +59 -0
- package/dist/ItsAWonderfulWorld.js +488 -0
- package/dist/ItsAWonderfulWorldOptions.js +2 -2
- package/dist/ItsAWonderfulWorldOptions.js.map +1 -1
- package/dist/ItsAWonderfulWorldRules.d.ts.map +1 -1
- package/dist/ItsAWonderfulWorldRules.js.map +1 -1
- package/dist/Options.d.ts +15 -15
- package/dist/Options.js +76 -77
- package/dist/Phase.d.ts +6 -7
- package/dist/Phase.js +7 -8
- package/dist/Player.d.ts +24 -25
- package/dist/Player.js +1 -2
- package/dist/PlayerView.d.ts +7 -8
- package/dist/PlayerView.js +1 -2
- package/dist/Production.d.ts.map +1 -1
- package/dist/Production.js.map +1 -1
- package/dist/Scoring.d.ts.map +1 -1
- package/dist/Scoring.js +9 -12
- package/dist/Scoring.js.map +1 -1
- package/dist/canUndo.d.ts +9 -10
- package/dist/canUndo.js +57 -71
- package/dist/material/Character.d.ts +1 -1
- package/dist/material/Character.d.ts.map +1 -1
- package/dist/material/Character.js.map +1 -1
- package/dist/material/Construction.d.ts +7 -7
- package/dist/material/Construction.js +1 -2
- package/dist/material/DevelopmentDetails.d.ts +2 -2
- package/dist/material/DevelopmentDetails.d.ts.map +1 -1
- package/dist/material/Empire.d.ts +11 -12
- package/dist/material/Empire.js +1 -2
- package/dist/material/EmpireDetails.d.ts +2 -2
- package/dist/material/EmpireDetails.d.ts.map +1 -1
- package/dist/material/EmpireName.d.ts +11 -12
- package/dist/material/EmpireName.js +13 -14
- package/dist/material/Resource.d.ts +1 -1
- package/dist/material/Resource.d.ts.map +1 -1
- package/dist/material/Resource.js.map +1 -1
- package/dist/moves/ChooseDevelopmentCard.d.ts +18 -19
- package/dist/moves/ChooseDevelopmentCard.js +35 -36
- package/dist/moves/CompleteConstruction.d.ts +14 -15
- package/dist/moves/CompleteConstruction.js +21 -22
- package/dist/moves/Concede.d.ts +10 -11
- package/dist/moves/Concede.js +12 -13
- package/dist/moves/DealDevelopmentCards.d.ts +16 -17
- package/dist/moves/DealDevelopmentCards.js +86 -87
- package/dist/moves/DiscardLeftoverCards.d.ts +15 -16
- package/dist/moves/DiscardLeftoverCards.js +23 -24
- package/dist/moves/Move.d.ts +18 -19
- package/dist/moves/Move.js +1 -2
- package/dist/moves/MoveType.d.ts +19 -20
- package/dist/moves/MoveType.js +20 -21
- package/dist/moves/MoveView.d.ts +8 -9
- package/dist/moves/MoveView.js +1 -2
- package/dist/moves/PassCards.d.ts +19 -20
- package/dist/moves/PassCards.js +41 -42
- package/dist/moves/PlaceCharacter.d.ts +17 -18
- package/dist/moves/PlaceCharacter.js +14 -15
- package/dist/moves/PlaceResource.d.ts +26 -27
- package/dist/moves/PlaceResource.js +44 -45
- package/dist/moves/Produce.d.ts +13 -14
- package/dist/moves/Produce.js +56 -57
- package/dist/moves/ReceiveCharacter.d.ts +15 -16
- package/dist/moves/ReceiveCharacter.js +19 -20
- package/dist/moves/Recycle.d.ts +14 -15
- package/dist/moves/Recycle.js +24 -25
- package/dist/moves/RevealChosenCards.d.ts +23 -24
- package/dist/moves/RevealChosenCards.js +51 -52
- package/dist/moves/SlateForConstruction.d.ts +14 -15
- package/dist/moves/SlateForConstruction.js +16 -17
- package/dist/moves/StartPhase.d.ts +11 -12
- package/dist/moves/StartPhase.js +15 -16
- package/dist/moves/TellYouAreReady.d.ts +13 -14
- package/dist/moves/TellYouAreReady.js +13 -14
- package/dist/moves/TransformIntoKrystallium.d.ts +10 -11
- package/dist/moves/TransformIntoKrystallium.js +14 -15
- package/dist/rules/ChooseDevelopmentCardRule.d.ts.map +1 -1
- package/dist/rules/ChooseDevelopmentCardRule.js +1 -3
- package/dist/rules/ChooseDevelopmentCardRule.js.map +1 -1
- package/dist/rules/ConstructionRule.d.ts.map +1 -1
- package/dist/rules/ConstructionRule.js +6 -6
- package/dist/rules/ConstructionRule.js.map +1 -1
- package/dist/rules/ExplorationProductionRule.d.ts.map +1 -1
- package/dist/rules/ExplorationProductionRule.js.map +1 -1
- package/dist/typeguards.d.ts +7 -8
- package/dist/typeguards.js +9 -10
- package/package.json +13 -12
- package/LICENCE.md +0 -108
- package/dist/GameState.d.ts.map +0 -1
- package/dist/GameState.js.map +0 -1
- package/dist/GameView.d.ts.map +0 -1
- package/dist/GameView.js.map +0 -1
- package/dist/Options.d.ts.map +0 -1
- package/dist/Options.js.map +0 -1
- package/dist/Phase.d.ts.map +0 -1
- package/dist/Phase.js.map +0 -1
- package/dist/Player.d.ts.map +0 -1
- package/dist/Player.js.map +0 -1
- package/dist/PlayerView.d.ts.map +0 -1
- package/dist/PlayerView.js.map +0 -1
- package/dist/canUndo.d.ts.map +0 -1
- package/dist/canUndo.js.map +0 -1
- package/dist/material/Construction.d.ts.map +0 -1
- package/dist/material/Construction.js.map +0 -1
- package/dist/material/CorruptionAndAscensionDevelopments.d.ts +0 -15
- package/dist/material/CorruptionAndAscensionDevelopments.d.ts.map +0 -1
- package/dist/material/CorruptionAndAscensionDevelopments.js +0 -84
- package/dist/material/CorruptionAndAscensionDevelopments.js.map +0 -1
- package/dist/material/Empire.d.ts.map +0 -1
- package/dist/material/Empire.js.map +0 -1
- package/dist/material/EmpireName.d.ts.map +0 -1
- package/dist/material/EmpireName.js.map +0 -1
- package/dist/moves/ChooseDevelopmentCard.d.ts.map +0 -1
- package/dist/moves/ChooseDevelopmentCard.js.map +0 -1
- package/dist/moves/CompleteConstruction.d.ts.map +0 -1
- package/dist/moves/CompleteConstruction.js.map +0 -1
- package/dist/moves/Concede.d.ts.map +0 -1
- package/dist/moves/Concede.js.map +0 -1
- package/dist/moves/DealDevelopmentCards.d.ts.map +0 -1
- package/dist/moves/DealDevelopmentCards.js.map +0 -1
- package/dist/moves/DiscardLeftoverCards.d.ts.map +0 -1
- package/dist/moves/DiscardLeftoverCards.js.map +0 -1
- package/dist/moves/Move.d.ts.map +0 -1
- package/dist/moves/Move.js.map +0 -1
- package/dist/moves/MoveType.d.ts.map +0 -1
- package/dist/moves/MoveType.js.map +0 -1
- package/dist/moves/MoveView.d.ts.map +0 -1
- package/dist/moves/MoveView.js.map +0 -1
- package/dist/moves/PassCards.d.ts.map +0 -1
- package/dist/moves/PassCards.js.map +0 -1
- package/dist/moves/PlaceCharacter.d.ts.map +0 -1
- package/dist/moves/PlaceCharacter.js.map +0 -1
- package/dist/moves/PlaceResource.d.ts.map +0 -1
- package/dist/moves/PlaceResource.js.map +0 -1
- package/dist/moves/Produce.d.ts.map +0 -1
- package/dist/moves/Produce.js.map +0 -1
- package/dist/moves/ReceiveCharacter.d.ts.map +0 -1
- package/dist/moves/ReceiveCharacter.js.map +0 -1
- package/dist/moves/Recycle.d.ts.map +0 -1
- package/dist/moves/Recycle.js.map +0 -1
- package/dist/moves/RevealChosenCards.d.ts.map +0 -1
- package/dist/moves/RevealChosenCards.js.map +0 -1
- package/dist/moves/SlateForConstruction.d.ts.map +0 -1
- package/dist/moves/SlateForConstruction.js.map +0 -1
- package/dist/moves/StartPhase.d.ts.map +0 -1
- package/dist/moves/StartPhase.js.map +0 -1
- package/dist/moves/TellYouAreReady.d.ts.map +0 -1
- package/dist/moves/TellYouAreReady.js.map +0 -1
- package/dist/moves/TransformIntoKrystallium.d.ts.map +0 -1
- package/dist/moves/TransformIntoKrystallium.js.map +0 -1
- package/dist/typeguards.d.ts.map +0 -1
- package/dist/typeguards.js.map +0 -1
package/dist/GameState.d.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import Resource from './material/Resource';
|
|
2
|
-
import Phase from './Phase';
|
|
3
|
-
import Player from './Player';
|
|
4
|
-
type GameState = {
|
|
5
|
-
players: Player[];
|
|
6
|
-
deck: number[];
|
|
7
|
-
discard: number[];
|
|
8
|
-
round: number;
|
|
9
|
-
phase: Phase;
|
|
10
|
-
productionStep?: Resource;
|
|
11
|
-
ascensionDeck?: number[];
|
|
12
|
-
};
|
|
13
|
-
export default GameState;
|
|
14
|
-
//# sourceMappingURL=GameState.d.ts.map
|
|
1
|
+
import Resource from './material/Resource';
|
|
2
|
+
import Phase from './Phase';
|
|
3
|
+
import Player from './Player';
|
|
4
|
+
type GameState = {
|
|
5
|
+
players: Player[];
|
|
6
|
+
deck: number[];
|
|
7
|
+
discard: number[];
|
|
8
|
+
round: number;
|
|
9
|
+
phase: Phase;
|
|
10
|
+
productionStep?: Resource;
|
|
11
|
+
ascensionDeck?: number[];
|
|
12
|
+
};
|
|
13
|
+
export default GameState;
|
package/dist/GameState.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=GameState.js.map
|
|
1
|
+
export {};
|
package/dist/GameView.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import GameState from './GameState';
|
|
2
|
-
import EmpireName from './material/EmpireName';
|
|
3
|
-
import Player from './Player';
|
|
4
|
-
import PlayerView from './PlayerView';
|
|
5
|
-
type GameView = Omit<GameState, 'deck' | 'players' | 'ascensionDeck'> & {
|
|
6
|
-
deck: number;
|
|
7
|
-
players: (Player | PlayerView)[];
|
|
8
|
-
displayedPlayer?: EmpireName;
|
|
9
|
-
ascensionDeck?: number;
|
|
10
|
-
};
|
|
11
|
-
export default GameView;
|
|
12
|
-
//# sourceMappingURL=GameView.d.ts.map
|
|
1
|
+
import GameState from './GameState';
|
|
2
|
+
import EmpireName from './material/EmpireName';
|
|
3
|
+
import Player from './Player';
|
|
4
|
+
import PlayerView from './PlayerView';
|
|
5
|
+
type GameView = Omit<GameState, 'deck' | 'players' | 'ascensionDeck'> & {
|
|
6
|
+
deck: number;
|
|
7
|
+
players: (Player | PlayerView)[];
|
|
8
|
+
displayedPlayer?: EmpireName;
|
|
9
|
+
ascensionDeck?: number;
|
|
10
|
+
};
|
|
11
|
+
export default GameView;
|
package/dist/GameView.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=GameView.js.map
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Action, Competitive, Eliminations, Rules, SecretInformation, TimeLimit, Undo } from '@gamepark/rules-api';
|
|
2
|
+
import GameState from './GameState';
|
|
3
|
+
import GameView from './GameView';
|
|
4
|
+
import Character from './material/Character';
|
|
5
|
+
import Construction from './material/Construction';
|
|
6
|
+
import EmpireName from './material/EmpireName';
|
|
7
|
+
import Resource from './material/Resource';
|
|
8
|
+
import Move from './moves/Move';
|
|
9
|
+
import MoveView from './moves/MoveView';
|
|
10
|
+
import PlaceCharacter from './moves/PlaceCharacter';
|
|
11
|
+
import PlaceResource, { PlaceResourceOnConstruction } from './moves/PlaceResource';
|
|
12
|
+
import { ItsAWonderfulWorldOptions } from './Options';
|
|
13
|
+
import Phase from './Phase';
|
|
14
|
+
import Player from './Player';
|
|
15
|
+
import PlayerView from './PlayerView';
|
|
16
|
+
export declare const numberOfCardsToDraft = 7;
|
|
17
|
+
export declare const numberOfRounds = 4;
|
|
18
|
+
export default class ItsAWonderfulWorld extends Rules<GameState, Move, EmpireName> implements SecretInformation<GameView, Move, MoveView, EmpireName>, Undo<GameState, Move, EmpireName>, Competitive<GameState, Move, EmpireName>, Eliminations<Move, EmpireName>, TimeLimit<GameState, Move, EmpireName> {
|
|
19
|
+
constructor(state: GameState);
|
|
20
|
+
constructor(options: ItsAWonderfulWorldOptions);
|
|
21
|
+
isTurnToPlay(playerId: EmpireName): boolean;
|
|
22
|
+
isOver(): boolean;
|
|
23
|
+
getAutomaticMoves(): Move[];
|
|
24
|
+
getAutomaticMove(): Move | undefined;
|
|
25
|
+
getLegalMoves(empire: EmpireName): Move[];
|
|
26
|
+
play(move: Move): Move[];
|
|
27
|
+
getScore(empire: EmpireName): number;
|
|
28
|
+
getPlayer(playerId: EmpireName): Player;
|
|
29
|
+
rankPlayers(empireA: EmpireName, empireB: EmpireName): number;
|
|
30
|
+
canUndo(action: Action<Move, EmpireName>, consecutiveActions: Action<Move, EmpireName>[]): boolean;
|
|
31
|
+
getView(playerId?: EmpireName | undefined): GameView;
|
|
32
|
+
getPlayerView(playerId: EmpireName): GameView;
|
|
33
|
+
getMoveView(move: Move, playerId?: EmpireName): MoveView;
|
|
34
|
+
getPlayerMoveView(move: Move, playerId: EmpireName): MoveView;
|
|
35
|
+
isEliminated(playerId: EmpireName): boolean;
|
|
36
|
+
giveUpMove(playerId: EmpireName): Move;
|
|
37
|
+
giveTime(playerId: EmpireName): number;
|
|
38
|
+
}
|
|
39
|
+
export declare function setupPlayers(options: ItsAWonderfulWorldOptions): Player[];
|
|
40
|
+
export declare function getPredictableAutomaticMoves(state: GameState | GameView): Move & MoveView | undefined;
|
|
41
|
+
export declare function getLegalMoves(player: Player, phase: Phase): Move[];
|
|
42
|
+
export declare function getCost(card: number): (Resource | Character)[];
|
|
43
|
+
export declare function getRemainingCost(construction: Construction): {
|
|
44
|
+
item: Resource | Character;
|
|
45
|
+
space: number;
|
|
46
|
+
}[];
|
|
47
|
+
export declare function getSpacesMissingItem(construction: Construction, predicate: (item: Resource | Character) => boolean): number[];
|
|
48
|
+
export declare function couldPlaceResource(construction: Construction, resource: Resource): boolean;
|
|
49
|
+
export declare function getNextProductionStep(game: GameState | GameView): Resource.Energy | Resource.Science | Resource.Gold | Resource.Exploration | undefined;
|
|
50
|
+
export declare function canBuild(player: Player, card: number): boolean;
|
|
51
|
+
export declare function canPay(player: Player, cost: (Resource | Character)[]): boolean;
|
|
52
|
+
export declare function getMovesToBuild(player: Player, card: number): (PlaceResourceOnConstruction | PlaceCharacter)[];
|
|
53
|
+
export declare function isPlaceItemOnCard(move: Move | MoveView, card?: number): move is (PlaceResourceOnConstruction | PlaceCharacter);
|
|
54
|
+
export declare function isActive(game: GameView, playerId: EmpireName): boolean;
|
|
55
|
+
export declare function countCharacters(player: Player | PlayerView): number;
|
|
56
|
+
export declare function isOver(game: GameState | GameView): boolean;
|
|
57
|
+
export declare function constructionsThatMayReceiveCubes(player: Player | PlayerView): Construction[];
|
|
58
|
+
export declare function placeAvailableCubesMoves(player: Player | PlayerView, construction: Construction): PlaceResource[];
|
|
59
|
+
export declare function isTurnToPlay(state: GameState | GameView, playerId: EmpireName): boolean;
|
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
import { Rules } from '@gamepark/rules-api';
|
|
2
|
+
import { shuffle } from 'lodash';
|
|
3
|
+
import canUndo from './canUndo';
|
|
4
|
+
import Character, { characters, ChooseCharacter, isCharacter } from './material/Character';
|
|
5
|
+
import { totalCost } from './material/DevelopmentDetails';
|
|
6
|
+
import { ascensionDevelopmentCardIds, baseDevelopmentCardIds, getCardDetails, getCardType } from './material/Developments';
|
|
7
|
+
import EmpireName from './material/EmpireName';
|
|
8
|
+
import Empires from './material/Empires';
|
|
9
|
+
import EmpireSide from './material/EmpireSide';
|
|
10
|
+
import Resource, { isResource, resources } from './material/Resource';
|
|
11
|
+
import { chooseDevelopmentCard, chooseDevelopmentCardMove } from './moves/ChooseDevelopmentCard';
|
|
12
|
+
import { completeConstruction, completeConstructionMove } from './moves/CompleteConstruction';
|
|
13
|
+
import { concede, concedeMove } from './moves/Concede';
|
|
14
|
+
import { dealDevelopmentCards, dealDevelopmentCardsMove, getDealDevelopmentCardsView } from './moves/DealDevelopmentCards';
|
|
15
|
+
import { discardLeftOverCards, discardLeftOverCardsMove, getDiscardLeftoverCardsView } from './moves/DiscardLeftoverCards';
|
|
16
|
+
import MoveType from './moves/MoveType';
|
|
17
|
+
import { getPassCardsView, passCards, passCardsMove } from './moves/PassCards';
|
|
18
|
+
import { isPlaceCharacter, placeCharacter, placeCharacterMove } from './moves/PlaceCharacter';
|
|
19
|
+
import { isPlaceResourceOnConstruction, placeResource, placeResourceOnConstructionMove, placeResourceOnEmpireMove } from './moves/PlaceResource';
|
|
20
|
+
import { produce, produceMove } from './moves/Produce';
|
|
21
|
+
import { receiveCharacter, receiveCharacterMove } from './moves/ReceiveCharacter';
|
|
22
|
+
import { recycle, recycleMove } from './moves/Recycle';
|
|
23
|
+
import { getRevealChosenCardsView, revealChosenCards, revealChosenCardsMove } from './moves/RevealChosenCards';
|
|
24
|
+
import { slateForConstruction, slateForConstructionMove } from './moves/SlateForConstruction';
|
|
25
|
+
import { startPhase, startPhaseMove } from './moves/StartPhase';
|
|
26
|
+
import { tellYouAreReady, tellYouAreReadyMove } from './moves/TellYouAreReady';
|
|
27
|
+
import { transformIntoKrystallium, transformIntoKrystalliumMove } from './moves/TransformIntoKrystallium';
|
|
28
|
+
import { isGameOptions } from './Options';
|
|
29
|
+
import Phase from './Phase';
|
|
30
|
+
import { getPlayerScore } from './Scoring';
|
|
31
|
+
import { isPlayerView } from './typeguards';
|
|
32
|
+
export const numberOfCardsToDraft = 7;
|
|
33
|
+
export const numberOfRounds = 4;
|
|
34
|
+
const defaultEmpireCardsSide = EmpireSide.A;
|
|
35
|
+
export default class ItsAWonderfulWorld extends Rules {
|
|
36
|
+
constructor(arg) {
|
|
37
|
+
if (isGameOptions(arg)) {
|
|
38
|
+
const setup = {
|
|
39
|
+
players: setupPlayers(arg),
|
|
40
|
+
deck: shuffle(baseDevelopmentCardIds),
|
|
41
|
+
discard: [],
|
|
42
|
+
round: 1,
|
|
43
|
+
phase: Phase.Draft
|
|
44
|
+
};
|
|
45
|
+
if (arg.corruptionAndAscension) {
|
|
46
|
+
setup.ascensionDeck = shuffle(ascensionDevelopmentCardIds);
|
|
47
|
+
}
|
|
48
|
+
super(setup);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
super(arg);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
isTurnToPlay(playerId) {
|
|
55
|
+
return isTurnToPlay(this.state, playerId);
|
|
56
|
+
}
|
|
57
|
+
isOver() {
|
|
58
|
+
return isOver(this.state);
|
|
59
|
+
}
|
|
60
|
+
getAutomaticMoves() {
|
|
61
|
+
const move = this.getAutomaticMove();
|
|
62
|
+
return move ? [move] : [];
|
|
63
|
+
}
|
|
64
|
+
getAutomaticMove() {
|
|
65
|
+
switch (this.state.phase) {
|
|
66
|
+
case Phase.Draft:
|
|
67
|
+
const anyPlayer = this.state.players.filter(player => !player.eliminated)[0];
|
|
68
|
+
if (anyPlayer && !anyPlayer.hand.length && !anyPlayer.draftArea.length) {
|
|
69
|
+
return dealDevelopmentCardsMove;
|
|
70
|
+
}
|
|
71
|
+
else if (this.state.players.every(player => player.chosenCard !== undefined || (player.eliminated && !player.hand.length))) {
|
|
72
|
+
return revealChosenCardsMove;
|
|
73
|
+
}
|
|
74
|
+
else if (anyPlayer && anyPlayer.cardsToPass) {
|
|
75
|
+
return passCardsMove;
|
|
76
|
+
}
|
|
77
|
+
else if (anyPlayer && anyPlayer.draftArea.length === numberOfCardsToDraft) {
|
|
78
|
+
if (anyPlayer.hand.length) {
|
|
79
|
+
return discardLeftOverCardsMove;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return startPhaseMove(Phase.Planning);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
for (const player of this.state.players) {
|
|
87
|
+
if (player.chosenCard === undefined && player.hand.length === 1) {
|
|
88
|
+
return chooseDevelopmentCardMove(player.empire, player.hand[0]);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
case Phase.Planning:
|
|
94
|
+
if (this.state.players.every(player => player.ready)) {
|
|
95
|
+
return startPhaseMove(Phase.Production);
|
|
96
|
+
}
|
|
97
|
+
break;
|
|
98
|
+
case Phase.Production:
|
|
99
|
+
if (!this.state.productionStep) {
|
|
100
|
+
return produceMove(Resource.Materials);
|
|
101
|
+
}
|
|
102
|
+
else if (this.state.players.every(player => player.ready)) {
|
|
103
|
+
const nextProductionStep = getNextProductionStep(this.state);
|
|
104
|
+
if (nextProductionStep) {
|
|
105
|
+
return produceMove(nextProductionStep);
|
|
106
|
+
}
|
|
107
|
+
else if (this.state.round < numberOfRounds) {
|
|
108
|
+
return startPhaseMove(Phase.Draft);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
return getPredictableAutomaticMoves(this.state);
|
|
114
|
+
}
|
|
115
|
+
getLegalMoves(empire) {
|
|
116
|
+
const player = this.state.players.find(player => player.empire === empire);
|
|
117
|
+
if (!player || (this.state.round === numberOfRounds && this.state.productionStep === Resource.Exploration && player.ready)) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
return getLegalMoves(player, this.state.phase);
|
|
121
|
+
}
|
|
122
|
+
play(move) {
|
|
123
|
+
switch (move.type) {
|
|
124
|
+
case MoveType.DealDevelopmentCards:
|
|
125
|
+
dealDevelopmentCards(this.state);
|
|
126
|
+
break;
|
|
127
|
+
case MoveType.ChooseDevelopmentCard:
|
|
128
|
+
chooseDevelopmentCard(this.state, move);
|
|
129
|
+
break;
|
|
130
|
+
case MoveType.RevealChosenCards:
|
|
131
|
+
revealChosenCards(this.state);
|
|
132
|
+
break;
|
|
133
|
+
case MoveType.PassCards:
|
|
134
|
+
passCards(this.state);
|
|
135
|
+
break;
|
|
136
|
+
case MoveType.DiscardLeftoverCards:
|
|
137
|
+
discardLeftOverCards(this.state);
|
|
138
|
+
break;
|
|
139
|
+
case MoveType.StartPhase:
|
|
140
|
+
startPhase(this.state, move);
|
|
141
|
+
break;
|
|
142
|
+
case MoveType.SlateForConstruction:
|
|
143
|
+
slateForConstruction(this.state, move);
|
|
144
|
+
break;
|
|
145
|
+
case MoveType.Recycle:
|
|
146
|
+
recycle(this.state, move);
|
|
147
|
+
break;
|
|
148
|
+
case MoveType.PlaceResource:
|
|
149
|
+
placeResource(this.state, move);
|
|
150
|
+
break;
|
|
151
|
+
case MoveType.CompleteConstruction:
|
|
152
|
+
completeConstruction(this.state, move);
|
|
153
|
+
break;
|
|
154
|
+
case MoveType.TransformIntoKrystallium:
|
|
155
|
+
transformIntoKrystallium(this.state, move);
|
|
156
|
+
break;
|
|
157
|
+
case MoveType.TellYouAreReady:
|
|
158
|
+
tellYouAreReady(this.state, move);
|
|
159
|
+
break;
|
|
160
|
+
case MoveType.Produce:
|
|
161
|
+
produce(this.state, move);
|
|
162
|
+
break;
|
|
163
|
+
case MoveType.ReceiveCharacter:
|
|
164
|
+
receiveCharacter(this.state, move);
|
|
165
|
+
break;
|
|
166
|
+
case MoveType.PlaceCharacter:
|
|
167
|
+
placeCharacter(this.state, move);
|
|
168
|
+
break;
|
|
169
|
+
case MoveType.Concede:
|
|
170
|
+
concede(this.state, move);
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
getScore(empire) {
|
|
176
|
+
return getPlayerScore(this.getPlayer(empire));
|
|
177
|
+
}
|
|
178
|
+
getPlayer(playerId) {
|
|
179
|
+
const player = this.state.players.find(player => player.empire === playerId);
|
|
180
|
+
if (!player)
|
|
181
|
+
throw new Error(`${playerId} is expected on ${this.state}`);
|
|
182
|
+
return player;
|
|
183
|
+
}
|
|
184
|
+
rankPlayers(empireA, empireB) {
|
|
185
|
+
const playerA = this.getPlayer(empireA), playerB = this.getPlayer(empireB);
|
|
186
|
+
if (playerA.eliminated || playerB.eliminated) {
|
|
187
|
+
return playerA.eliminated ? playerB.eliminated ? playerB.eliminated - playerA.eliminated : 1 : -1;
|
|
188
|
+
}
|
|
189
|
+
const scoreA = getPlayerScore(playerA), scoreB = getPlayerScore(playerB);
|
|
190
|
+
if (scoreA !== scoreB) {
|
|
191
|
+
return scoreB - scoreA;
|
|
192
|
+
}
|
|
193
|
+
const buildingsA = playerA.constructedDevelopments.length, buildingsB = playerB.constructedDevelopments.length;
|
|
194
|
+
if (buildingsA !== buildingsB) {
|
|
195
|
+
return buildingsB - buildingsA;
|
|
196
|
+
}
|
|
197
|
+
return countCharacters(playerB) - countCharacters(playerA);
|
|
198
|
+
}
|
|
199
|
+
canUndo(action, consecutiveActions) {
|
|
200
|
+
return canUndo(this.state, action, consecutiveActions);
|
|
201
|
+
}
|
|
202
|
+
getView(playerId) {
|
|
203
|
+
return {
|
|
204
|
+
...this.state, deck: this.state.deck.length, ascensionDeck: this.state.ascensionDeck?.length,
|
|
205
|
+
players: this.state.players.map(player => {
|
|
206
|
+
if (player.empire === playerId) {
|
|
207
|
+
return player;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
const { hand, chosenCard, ...visible } = player;
|
|
211
|
+
const playerView = { ...visible, hiddenHand: hand.map(getCardType) };
|
|
212
|
+
if (chosenCard !== undefined) {
|
|
213
|
+
playerView.ready = true;
|
|
214
|
+
}
|
|
215
|
+
return playerView;
|
|
216
|
+
}
|
|
217
|
+
})
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
getPlayerView(playerId) {
|
|
221
|
+
return this.getView(playerId);
|
|
222
|
+
}
|
|
223
|
+
getMoveView(move, playerId) {
|
|
224
|
+
switch (move.type) {
|
|
225
|
+
case MoveType.DealDevelopmentCards:
|
|
226
|
+
return playerId ? getDealDevelopmentCardsView(this.state, playerId) : move;
|
|
227
|
+
case MoveType.ChooseDevelopmentCard:
|
|
228
|
+
if (playerId !== move.playerId) {
|
|
229
|
+
const { card, ...moveView } = move;
|
|
230
|
+
return { ...moveView };
|
|
231
|
+
}
|
|
232
|
+
break;
|
|
233
|
+
case MoveType.RevealChosenCards:
|
|
234
|
+
return getRevealChosenCardsView(this.state);
|
|
235
|
+
case MoveType.PassCards:
|
|
236
|
+
return playerId ? getPassCardsView(this.state, playerId) : move;
|
|
237
|
+
case MoveType.DiscardLeftoverCards:
|
|
238
|
+
return getDiscardLeftoverCardsView(this.state);
|
|
239
|
+
}
|
|
240
|
+
return move;
|
|
241
|
+
}
|
|
242
|
+
getPlayerMoveView(move, playerId) {
|
|
243
|
+
return this.getMoveView(move, playerId);
|
|
244
|
+
}
|
|
245
|
+
isEliminated(playerId) {
|
|
246
|
+
return !!this.getPlayer(playerId).eliminated;
|
|
247
|
+
}
|
|
248
|
+
giveUpMove(playerId) {
|
|
249
|
+
return concedeMove(playerId);
|
|
250
|
+
}
|
|
251
|
+
giveTime(playerId) {
|
|
252
|
+
switch (this.state.phase) {
|
|
253
|
+
case Phase.Draft:
|
|
254
|
+
return (numberOfCardsToDraft - this.getPlayer(playerId).draftArea.length - 1) * 10;
|
|
255
|
+
case Phase.Planning:
|
|
256
|
+
return 20 + this.state.round * 40;
|
|
257
|
+
case Phase.Production:
|
|
258
|
+
return 10;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
export function setupPlayers(options) {
|
|
263
|
+
const players = options.players;
|
|
264
|
+
const empireSide = options.empiresSide;
|
|
265
|
+
const empiresLeft = shuffle(Object.values(EmpireName).filter(empire => players.some(player => player.id === empire)));
|
|
266
|
+
return players.map(player => setupPlayer(player.id || empiresLeft.pop(), empireSide));
|
|
267
|
+
}
|
|
268
|
+
function setupPlayer(empire, empireSide = defaultEmpireCardsSide) {
|
|
269
|
+
return {
|
|
270
|
+
empire, empireSide, hand: [], draftArea: [], constructionArea: [], availableResources: [],
|
|
271
|
+
empireCardResources: Array(Empires[empire][empireSide].krystallium ?? 0).fill(Resource.Krystallium),
|
|
272
|
+
constructedDevelopments: [], ready: false, characters: { [Character.Financier]: 0, [Character.General]: 0 }, bonuses: []
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
export function getPredictableAutomaticMoves(state) {
|
|
276
|
+
for (const player of state.players) {
|
|
277
|
+
for (const construction of player.constructionArea) {
|
|
278
|
+
if (construction.costSpaces.every(space => space !== null)) {
|
|
279
|
+
return completeConstructionMove(player.empire, construction.card);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (player.empireCardResources.filter(resource => resource !== Resource.Krystallium).length >= 5) {
|
|
283
|
+
return transformIntoKrystalliumMove(player.empire);
|
|
284
|
+
}
|
|
285
|
+
const bonus = player.bonuses.find(bonus => bonus !== ChooseCharacter);
|
|
286
|
+
if (isResource(bonus)) {
|
|
287
|
+
return placeResourceOnEmpireMove(player.empire, bonus);
|
|
288
|
+
}
|
|
289
|
+
else if (isCharacter(bonus)) {
|
|
290
|
+
return receiveCharacterMove(player.empire, bonus);
|
|
291
|
+
}
|
|
292
|
+
for (const resource of [...new Set(player.availableResources)]) {
|
|
293
|
+
if (!player.draftArea.some(card => getCardDetails(card).constructionCost[resource])
|
|
294
|
+
&& !player.constructionArea.some(construction => couldPlaceResource(construction, resource))) {
|
|
295
|
+
return placeResourceOnEmpireMove(player.empire, resource);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
export function getLegalMoves(player, phase) {
|
|
302
|
+
const moves = [];
|
|
303
|
+
switch (phase) {
|
|
304
|
+
case Phase.Draft:
|
|
305
|
+
if (player.chosenCard === undefined) {
|
|
306
|
+
player.hand.forEach(card => moves.push(chooseDevelopmentCardMove(player.empire, card)));
|
|
307
|
+
}
|
|
308
|
+
break;
|
|
309
|
+
case Phase.Planning:
|
|
310
|
+
player.draftArea.forEach(card => moves.push(slateForConstructionMove(player.empire, card), recycleMove(player.empire, card)));
|
|
311
|
+
if (!player.draftArea.length && !player.availableResources.length && !player.ready) {
|
|
312
|
+
moves.push(tellYouAreReadyMove(player.empire));
|
|
313
|
+
}
|
|
314
|
+
break;
|
|
315
|
+
case Phase.Production:
|
|
316
|
+
if (!player.bonuses.length && !player.availableResources.length && !player.ready) {
|
|
317
|
+
moves.push(tellYouAreReadyMove(player.empire));
|
|
318
|
+
}
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
[...new Set(player.availableResources)].forEach(resource => {
|
|
322
|
+
player.constructionArea.forEach(construction => {
|
|
323
|
+
getSpacesMissingItem(construction, item => item === resource)
|
|
324
|
+
.forEach(space => moves.push(placeResourceOnConstructionMove(player.empire, resource, construction.card, space)));
|
|
325
|
+
});
|
|
326
|
+
moves.push(placeResourceOnEmpireMove(player.empire, resource));
|
|
327
|
+
});
|
|
328
|
+
if (player.bonuses.some(bonus => bonus === ChooseCharacter)) {
|
|
329
|
+
characters.forEach(character => moves.push(receiveCharacterMove(player.empire, character)));
|
|
330
|
+
}
|
|
331
|
+
player.constructionArea.forEach(construction => {
|
|
332
|
+
moves.push(recycleMove(player.empire, construction.card));
|
|
333
|
+
});
|
|
334
|
+
if (player.empireCardResources.some(resource => resource === Resource.Krystallium)) {
|
|
335
|
+
player.constructionArea.forEach(construction => {
|
|
336
|
+
getSpacesMissingItem(construction, item => isResource(item))
|
|
337
|
+
.forEach(space => moves.push(placeResourceOnConstructionMove(player.empire, Resource.Krystallium, construction.card, space)));
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
characters.forEach(character => {
|
|
341
|
+
if (player.characters[character]) {
|
|
342
|
+
player.constructionArea.forEach(construction => {
|
|
343
|
+
getSpacesMissingItem(construction, item => item === character)
|
|
344
|
+
.forEach(space => moves.push(placeCharacterMove(player.empire, character, construction.card, space)));
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
return moves;
|
|
349
|
+
}
|
|
350
|
+
export function getCost(card) {
|
|
351
|
+
const development = getCardDetails(card);
|
|
352
|
+
return Array.of(...resources, ...characters)
|
|
353
|
+
.flatMap(item => Array(development.constructionCost[item] || 0).fill(item));
|
|
354
|
+
}
|
|
355
|
+
export function getRemainingCost(construction) {
|
|
356
|
+
return getCost(construction.card)
|
|
357
|
+
.map((item, index) => ({ item, space: index }))
|
|
358
|
+
.filter(item => !construction.costSpaces[item.space]);
|
|
359
|
+
}
|
|
360
|
+
export function getSpacesMissingItem(construction, predicate) {
|
|
361
|
+
return getRemainingCost(construction).filter(cost => predicate(cost.item)).map(cost => cost.space);
|
|
362
|
+
}
|
|
363
|
+
export function couldPlaceResource(construction, resource) {
|
|
364
|
+
return Array.from(getCost(construction.card).entries())
|
|
365
|
+
.some(([space, item]) => resource === item && (!construction.costSpaces[space] || construction.costSpaces[space] === Resource.Krystallium));
|
|
366
|
+
}
|
|
367
|
+
export function getNextProductionStep(game) {
|
|
368
|
+
switch (game.productionStep) {
|
|
369
|
+
case Resource.Materials:
|
|
370
|
+
return Resource.Energy;
|
|
371
|
+
case Resource.Energy:
|
|
372
|
+
return Resource.Science;
|
|
373
|
+
case Resource.Science:
|
|
374
|
+
return Resource.Gold;
|
|
375
|
+
case Resource.Gold:
|
|
376
|
+
return Resource.Exploration;
|
|
377
|
+
default:
|
|
378
|
+
return undefined;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
export function canBuild(player, card) {
|
|
382
|
+
const construction = player.constructionArea.find(construction => construction.card === card);
|
|
383
|
+
if (!construction) {
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
return canPay(player, getRemainingCost(construction).map(cost => cost.item));
|
|
387
|
+
}
|
|
388
|
+
export function canPay(player, cost) {
|
|
389
|
+
for (const character of characters) {
|
|
390
|
+
if (player.characters[character] < cost.filter(item => item === character).length) {
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
let krystalliumLeft = player.empireCardResources.filter(resource => resource === Resource.Krystallium).length;
|
|
395
|
+
for (const resource of resources) {
|
|
396
|
+
const resourceCost = cost.filter(item => item === resource).length;
|
|
397
|
+
const resources = player.availableResources.filter(r => r === resource).length;
|
|
398
|
+
if (resources < resourceCost) {
|
|
399
|
+
if (krystalliumLeft + resources < resourceCost) {
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
krystalliumLeft -= resourceCost - resources;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return true;
|
|
406
|
+
}
|
|
407
|
+
export function getMovesToBuild(player, card) {
|
|
408
|
+
const moves = [];
|
|
409
|
+
const construction = player.constructionArea.find(construction => construction.card === card)
|
|
410
|
+
|| { card, costSpaces: Array(totalCost(getCardDetails(card))).fill(null) };
|
|
411
|
+
const remainingCost = getRemainingCost(construction);
|
|
412
|
+
for (const resource of resources) {
|
|
413
|
+
const resourceCosts = remainingCost.filter(cost => cost.item === resource);
|
|
414
|
+
let resources = player.availableResources.filter(r => r === resource).length;
|
|
415
|
+
for (const cost of resourceCosts) {
|
|
416
|
+
if (resources > 0) {
|
|
417
|
+
moves.push(placeResourceOnConstructionMove(player.empire, resource, card, cost.space));
|
|
418
|
+
resources--;
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
moves.push(placeResourceOnConstructionMove(player.empire, Resource.Krystallium, card, cost.space));
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
for (const cost of remainingCost) {
|
|
426
|
+
if (isCharacter(cost.item)) {
|
|
427
|
+
moves.push(placeCharacterMove(player.empire, cost.item, card, cost.space));
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return moves;
|
|
431
|
+
}
|
|
432
|
+
export function isPlaceItemOnCard(move, card) {
|
|
433
|
+
if (card !== undefined) {
|
|
434
|
+
return isPlaceItemOnCard(move) && move.card === card;
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
return isPlaceResourceOnConstruction(move) || isPlaceCharacter(move);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
export function isActive(game, playerId) {
|
|
441
|
+
const player = game.players.find(player => player.empire === playerId);
|
|
442
|
+
switch (game.phase) {
|
|
443
|
+
case Phase.Draft:
|
|
444
|
+
return isPlayerView(player) ? !player.ready : player.chosenCard === undefined;
|
|
445
|
+
case Phase.Planning:
|
|
446
|
+
case Phase.Production:
|
|
447
|
+
return !player.ready;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
export function countCharacters(player) {
|
|
451
|
+
return player.characters[Character.Financier] + player.characters[Character.General];
|
|
452
|
+
}
|
|
453
|
+
export function isOver(game) {
|
|
454
|
+
return game.round === numberOfRounds && game.phase === Phase.Production && game.productionStep === Resource.Exploration && game.players.every(player => player.ready);
|
|
455
|
+
}
|
|
456
|
+
export function constructionsThatMayReceiveCubes(player) {
|
|
457
|
+
return player.constructionArea.filter(construction => getRemainingCost(construction).some(cost => isResource(cost.item) && player.availableResources.includes(cost.item)));
|
|
458
|
+
}
|
|
459
|
+
export function placeAvailableCubesMoves(player, construction) {
|
|
460
|
+
const moves = [];
|
|
461
|
+
const availableResource = JSON.parse(JSON.stringify(player.availableResources));
|
|
462
|
+
getRemainingCost(construction).forEach(cost => {
|
|
463
|
+
if (isResource(cost.item)) {
|
|
464
|
+
if (availableResource.some(resource => resource === cost.item)) {
|
|
465
|
+
moves.push(placeResourceOnConstructionMove(player.empire, cost.item, construction.card, cost.space));
|
|
466
|
+
availableResource.splice(availableResource.findIndex(resource => resource === cost.item), 1);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
});
|
|
470
|
+
return moves;
|
|
471
|
+
}
|
|
472
|
+
export function isTurnToPlay(state, playerId) {
|
|
473
|
+
const player = state.players.find(player => player.empire === playerId);
|
|
474
|
+
if (!player)
|
|
475
|
+
return false;
|
|
476
|
+
switch (state.phase) {
|
|
477
|
+
case Phase.Draft:
|
|
478
|
+
if (isPlayerView(player)) {
|
|
479
|
+
return !player.ready;
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
return player.chosenCard === undefined && player.hand.length > 0;
|
|
483
|
+
}
|
|
484
|
+
case Phase.Planning:
|
|
485
|
+
case Phase.Production:
|
|
486
|
+
return !player.ready;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
@@ -11,12 +11,12 @@ export const ItsAWonderfulWorldOptionsSpec = {
|
|
|
11
11
|
},
|
|
12
12
|
corruptionAndAscension: {
|
|
13
13
|
label: (t) => t('c&a'),
|
|
14
|
-
help: t => t('c&a.help'),
|
|
14
|
+
help: (t) => t('c&a.help'),
|
|
15
15
|
subscriberRequired: true
|
|
16
16
|
},
|
|
17
17
|
warAndPeace: {
|
|
18
18
|
label: (t) => t('w&p'),
|
|
19
|
-
help: t => t('w&p.help'),
|
|
19
|
+
help: (t) => t('w&p.help'),
|
|
20
20
|
subscriberRequired: true
|
|
21
21
|
},
|
|
22
22
|
empiresSide: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItsAWonderfulWorldOptions.js","sourceRoot":"","sources":["../src/ItsAWonderfulWorldOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAqBlD,MAAM,CAAC,MAAM,6BAA6B,GAA2C;IACnF,OAAO,EAAE;QACP,EAAE,EAAE;YACF,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;SACpE;KACF;IACD,sBAAsB,EAAE;QACtB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ItsAWonderfulWorldOptions.js","sourceRoot":"","sources":["../src/ItsAWonderfulWorldOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAqBlD,MAAM,CAAC,MAAM,6BAA6B,GAA2C;IACnF,OAAO,EAAE;QACP,EAAE,EAAE;YACF,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;SACpE;KACF;IACD,sBAAsB,EAAE;QACtB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QAC1B,kBAAkB,EAAE,IAAI;KACzB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QAC1B,kBAAkB,EAAE,IAAI;KACzB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;QACpC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC;QACjC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC;KACH;CACF,CAAA;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,CAA0B;IACtE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,WAAW;YACrB,OAAO,CAAC,CAAC,cAAc,CAAC,CAAA;QAC1B,KAAK,MAAM,CAAC,gBAAgB;YAC1B,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAA;QAChC,KAAK,MAAM,CAAC,WAAW;YACrB,OAAO,CAAC,CAAC,cAAc,CAAC,CAAA;QAC1B,KAAK,MAAM,CAAC,eAAe;YACzB,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAA;QAC9B,KAAK,MAAM,CAAC,gBAAgB;YAC1B,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAA;QAChC,KAAK,MAAM,CAAC,gBAAgB;YAC1B,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAA;QAChC,KAAK,MAAM,CAAC,aAAa;YACvB,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItsAWonderfulWorldRules.d.ts","sourceRoot":"","sources":["../src/ItsAWonderfulWorldRules.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAGhB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAOrE,qBAAa,uBACX,SAAQ,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAC9D,YAAW,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC;IAE/D,KAAK;;;;;;;;;;;;;MAcJ;IAMD,mBAAmB;;;;;;;;;;;;;MAalB;IAUD,gBAAgB;;;;;
|
|
1
|
+
{"version":3,"file":"ItsAWonderfulWorldRules.d.ts","sourceRoot":"","sources":["../src/ItsAWonderfulWorldRules.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAGhB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAOrE,qBAAa,uBACX,SAAQ,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAC9D,YAAW,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC;IAE/D,KAAK;;;;;;;;;;;;;MAcJ;IAMD,mBAAmB;;;;;;;;;;;;;MAalB;IAUD,gBAAgB;;;;;uBAwDyB,YAAY,WAAW,MAAM,KAAG,MAAM,EAAE;;MA7ChF;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAkBhC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IASlC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CASxE;AAOD,eAAO,MAAM,oBAAoB,GAAI,MAAM,YAAY,EAAE,SAAS,MAAM,KAAG,MAAM,EAGhF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItsAWonderfulWorldRules.js","sourceRoot":"","sources":["../src/ItsAWonderfulWorldRules.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ItsAWonderfulWorldRules.js","sourceRoot":"","sources":["../src/ItsAWonderfulWorldRules.ts"],"names":[],"mappings":"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"}
|