UNPKG

@firestone-hs/replay-parser

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.

91 lines 16 kB
import { GameTag, Zone } from '@firestone-hs/reference-data'; import { MulliganCardAction } from '../../models/action/mulligan-card-action'; import { MulliganCardChoiceAction } from '../../models/action/mulligan-card-choice-action'; import { StartTurnAction } from '../../models/action/start-turn-action'; import { ChosenEntityHistoryItem } from '../../models/history/chosen-entities-history-item'; import { ActionHelper } from './action-helper'; export class MulliganCardChoiceParser { constructor(allCards) { this.allCards = allCards; } applies(item) { return item instanceof ChosenEntityHistoryItem; } parse(item, currentTurn, entitiesBeforeAction, history, players) { if (currentTurn > 0) { return; } const keptCards = item.tag.cards; // Here "playerID" actually refers to the player entity ID (and not the playerID) const playerHand = this.getHandEntityIds(entitiesBeforeAction, item.tag.playerID); const mulligan = playerHand.filter(entityId => keptCards.indexOf(entityId) === -1); // // console.log('considering choice', item, players, playerHand, mulligan); if (item.tag.playerID === players[0].id) { return [ MulliganCardChoiceAction.create({ timestamp: item.timestamp, index: item.index, playerMulligan: mulligan, }, this.allCards), ]; } else if (item.tag.playerID === players[1].id) { return [ MulliganCardChoiceAction.create({ timestamp: item.timestamp, index: item.index, opponentMulligan: mulligan, }, this.allCards), ]; } else { console.warn('Invalid mulligan choice', item, players); } return null; } reduce(actions) { return ActionHelper.combineActions(actions, (previous, current) => (previous instanceof MulliganCardChoiceAction && current instanceof MulliganCardChoiceAction) || (previous instanceof StartTurnAction && current instanceof MulliganCardChoiceAction), (previous, current) => this.mergeActions(previous, current), (previous, current) => previous instanceof MulliganCardAction && current instanceof MulliganCardChoiceAction); } mergeActions(previousAction, currentAction) { if (currentAction instanceof StartTurnAction) { console.warn('Invalid mulligan action merge', previousAction, currentAction); return previousAction; } if (previousAction instanceof MulliganCardChoiceAction) { // // console.log('merging into previous mulligan action', previousAction, currentAction); return MulliganCardChoiceAction.create({ timestamp: previousAction.timestamp, index: previousAction.index, entities: currentAction.entities, playerMulligan: [...(previousAction.playerMulligan || []), ...(currentAction.playerMulligan || [])], opponentMulligan: [ ...(previousAction.opponentMulligan || []), ...(currentAction.opponentMulligan || []), ], }, this.allCards); } else { // // console.log('merging into previous turn action', previousAction, currentAction); return StartTurnAction.create({ turn: previousAction.turn, entities: previousAction.entities, crossedEntities: [ ...(previousAction.crossedEntities || []), ...(currentAction.playerMulligan || []), ...(currentAction.opponentMulligan || []), ], }, this.allCards); } } getHandEntityIds(entities, playerEntityId) { const playerEntity = ActionHelper.getOwner(entities, playerEntityId); return entities .valueSeq() .toArray() .filter(entity => entity.getTag(GameTag.CONTROLLER) === playerEntity.playerId) .filter(entity => entity.getTag(GameTag.ZONE) === Zone.HAND) .map(entity => entity.id); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsbGlnYW4tY2FyZC1jaG9pY2UtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwbGF5LXBhcnNlci9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi9tdWxsaWdhbi1jYXJkLWNob2ljZS1wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFHNUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sT0FBTyx3QkFBd0I7SUFDcEMsWUFBb0IsUUFBeUI7UUFBekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7SUFBRyxDQUFDO0lBRTFDLE9BQU8sQ0FBQyxJQUFpQjtRQUMvQixPQUFPLElBQUksWUFBWSx1QkFBdUIsQ0FBQztJQUNoRCxDQUFDO0lBRU0sS0FBSyxDQUNYLElBQTZCLEVBQzdCLFdBQW1CLEVBQ25CLG9CQUF5QyxFQUN6QyxPQUErQixFQUMvQixPQUFnQztRQUVoQyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUU7WUFDcEIsT0FBTztTQUNQO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDakMsaUZBQWlGO1FBQ2pGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0s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QUFFLGNBQWMsQ0FBQyxRQUFRO2dCQUNqQyxlQUFlLEVBQUU7b0JBQ2hCLEdBQUcsQ0FBQyxjQUFjLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztvQkFDekMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO29CQUN2QyxHQUFHLENBQUMsYUFBYSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztpQkFDekM7YUFDRCxFQUNELElBQUksQ0FBQyxRQUFRLENBQ2IsQ0FBQztTQUNGO0lBQ0YsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQTZCLEVBQUUsY0FBc0I7UUFDN0UsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDckUsT0FBTyxRQUFRO2FBQ2IsUUFBUSxFQUFFO2FBQ1YsT0FBTyxFQUFFO2FBQ1QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQzthQUM3RSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQzNELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHYW1lVGFnLCBab25lIH0gZnJvbSAnQGZpcmVzdG9uZS1ocy9yZWZlcmVuY2UtZGF0YSc7XHJcbmltcG9ydCB7IE1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vYWN0aW9uJztcclxuaW1wb3J0IHsgTXVsbGlnYW5DYXJkQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9tdWxsaWdhbi1jYXJkLWFjdGlvbic7XHJcbmltcG9ydCB7IE11bGxpZ2FuQ2FyZENob2ljZUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vbXVsbGlnYW4tY2FyZC1jaG9pY2UtYWN0aW9uJztcclxuaW1wb3J0IHsgU3RhcnRUdXJuQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9zdGFydC10dXJuLWFjdGlvbic7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL21vZGVscy9nYW1lL2VudGl0eSc7XHJcbmltcG9ydCB7IFBsYXllckVudGl0eSB9IGZyb20gJy4uLy4uL21vZGVscy9nYW1lL3BsYXllci1lbnRpdHknO1xyXG5pbXBvcnQgeyBDaG9zZW5FbnRpdHlIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L2Nob3Nlbi1lbnRpdGllcy1oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L2hpc3RvcnktaXRlbSc7XHJcbmltcG9ydCB7IEFsbENhcmRzU2VydmljZSB9IGZyb20gJy4uL2FsbC1jYXJkcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aW9uSGVscGVyIH0gZnJvbSAnLi9hY3Rpb24taGVscGVyJztcclxuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnLi9wYXJzZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIE11bGxpZ2FuQ2FyZENob2ljZVBhcnNlciBpbXBsZW1lbnRzIFBhcnNlciB7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBhbGxDYXJkczogQWxsQ2FyZHNTZXJ2aWNlKSB7fVxyXG5cclxuXHRwdWJsaWMgYXBwbGllcyhpdGVtOiBIaXN0b3J5SXRlbSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBDaG9zZW5FbnRpdHlIaXN0b3J5SXRlbTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBwYXJzZShcclxuXHRcdGl0ZW06IENob3NlbkVudGl0eUhpc3RvcnlJdGVtLFxyXG5cdFx0Y3VycmVudFR1cm46IG51bWJlcixcclxuXHRcdGVudGl0aWVzQmVmb3JlQWN0aW9uOiBNYXA8bnVtYmVyLCBFbnRpdHk+LFxyXG5cdFx0aGlzdG9yeTogcmVhZG9ubHkgSGlzdG9yeUl0ZW1bXSxcclxuXHRcdHBsYXllcnM6IHJlYWRvbmx5IFBsYXllckVudGl0eVtdLFxyXG5cdCk6IEFjdGlvbltdIHtcclxuXHRcdGlmIChjdXJyZW50VHVybiA+IDApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGtlcHRDYXJkcyA9IGl0ZW0udGFnLmNhcmRzO1xyXG5cdFx0Ly8gSGVyZSBcInBsYXllcklEXCIgYWN0dWFsbHkgcmVmZXJzIHRvIHRoZSBwbGF5ZXIgZW50aXR5IElEIChhbmQgbm90IHRoZSBwbGF5ZXJJRClcclxuXHRcdGNvbnN0IHBsYXllckhhbmQgPSB0aGlzLmdldEhhbmRFbnRpdHlJZHMoZW50aXRpZXNCZWZvcmVBY3Rpb24sIGl0ZW0udGFnLnBsYXllcklEKTtcclxuXHRcdGNvbnN0IG11bGxpZ2FuID0gcGxheWVySGFuZC5maWx0ZXIoZW50aXR5SWQgPT4ga2VwdENhcmRzLmluZGV4T2YoZW50aXR5SWQpID09PSAtMSk7XHJcblx0XHQvLyAvLyBjb25zb2xlLmxvZygnY29uc2lkZXJpbmcgY2hvaWNlJywgaXRlbSwgcGxheWVycywgcGxheWVySGFuZCwgbXVsbGlnYW4pO1xyXG5cdFx0aWYgKGl0ZW0udGFnLnBsYXllcklEID09PSBwbGF5ZXJzWzBdLmlkKSB7XHJcblx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0TXVsbGlnYW5DYXJkQ2hvaWNlQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0dGltZXN0YW1wOiBpdGVtLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRcdFx0aW5kZXg6IGl0ZW0uaW5kZXgsXHJcblx0XHRcdFx0XHRcdHBsYXllck11bGxpZ2FuOiBtdWxsaWdhbixcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdF07XHJcblx0XHR9IGVsc2UgaWYgKGl0ZW0udGFnLnBsYXllcklEID09PSBwbGF5ZXJzWzFdLmlkKSB7XHJcblx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0TXVsbGlnYW5DYXJkQ2hvaWNlQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0dGltZXN0YW1wOiBpdGVtLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRcdFx0aW5kZXg6IGl0ZW0uaW5kZXgsXHJcblx0XHRcdFx0XHRcdG9wcG9uZW50TXVsbGlnYW46IG11bGxpZ2FuLFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignSW52YWxpZCBtdWxsaWdhbiBjaG9pY2UnLCBpdGVtLCBwbGF5ZXJzKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHJlZHVjZShhY3Rpb25zOiByZWFkb25seSBBY3Rpb25bXSk6IHJlYWRvbmx5IEFjdGlvbltdIHtcclxuXHRcdHJldHVybiBBY3Rpb25IZWxwZXIuY29tYmluZUFjdGlvbnM8TXVsbGlnYW5DYXJkQ2hvaWNlQWN0aW9uIHwgU3RhcnRUdXJuQWN0aW9uPihcclxuXHRcdFx0YWN0aW9ucyxcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PlxyXG5cdFx0XHRcdChwcmV2aW91cyBpbnN0YW5jZW9mIE11bGxpZ2FuQ2FyZENob2ljZUFjdGlvbiAmJiBjdXJyZW50IGluc3RhbmNlb2YgTXVsbGlnYW5DYXJkQ2hvaWNlQWN0aW9uKSB8fFxyXG5cdFx0XHRcdChwcmV2aW91cyBpbnN0YW5jZW9mIFN0YXJ0VHVybkFjdGlvbiAmJiBjdXJyZW50IGluc3RhbmNlb2YgTXVsbGlnYW5DYXJkQ2hvaWNlQWN0aW9uKSxcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiB0aGlzLm1lcmdlQWN0aW9ucyhwcmV2aW91cywgY3VycmVudCksXHJcblx0XHRcdChwcmV2aW91cywgY3VycmVudCkgPT5cclxuXHRcdFx0XHRwcmV2aW91cyBpbnN0YW5jZW9mIE11bGxpZ2FuQ2FyZEFjdGlvbiAmJiBjdXJyZW50IGluc3RhbmNlb2YgTXVsbGlnYW5DYXJkQ2hvaWNlQWN0aW9uLFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWVyZ2VBY3Rpb25zKFxyXG5cdFx0cHJldmlvdXNBY3Rpb246IE11bGxpZ2FuQ2FyZENob2ljZUFjdGlvbiB8IFN0YXJ0VHVybkFjdGlvbixcclxuXHRcdGN1cnJlbnRBY3Rpb246IE11bGxpZ2FuQ2FyZENob2ljZUFjdGlvbiB8IFN0YXJ0VHVybkFjdGlvbixcclxuXHQpOiBNdWxsaWdhbkNhcmRDaG9pY2VBY3Rpb24gfCBTdGFydFR1cm5BY3Rpb24ge1xyXG5cdFx0aWYgKGN1cnJlbnRBY3Rpb24gaW5zdGFuY2VvZiBTdGFydFR1cm5BY3Rpb24pIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdJbnZhbGlkIG11bGxpZ2FuIGFjdGlvbiBtZXJnZScsIHByZXZpb3VzQWN0aW9uLCBjdXJyZW50QWN0aW9uKTtcclxuXHRcdFx0cmV0dXJuIHByZXZpb3VzQWN0aW9uO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHByZXZpb3VzQWN0aW9uIGluc3RhbmNlb2YgTXVsbGlnYW5DYXJkQ2hvaWNlQWN0aW9uKSB7XHJcblx0XHRcdC8vIC8vIGNvbnNvbGUubG9nKCdtZXJnaW5nIGludG8gcHJldmlvdXMgbXVsbGlnYW4gYWN0aW9uJywgcHJldmlvdXNBY3Rpb24sIGN1cnJlbnRBY3Rpb24pO1xyXG5cdFx0XHRyZXR1cm4gTXVsbGlnYW5DYXJkQ2hvaWNlQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHR0aW1lc3RhbXA6IHByZXZpb3VzQWN0aW9uLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRcdGluZGV4OiBwcmV2aW91c0FjdGlvbi5pbmRleCxcclxuXHRcdFx0XHRcdGVudGl0aWVzOiBjdXJyZW50QWN0aW9uLmVudGl0aWVzLFxyXG5cdFx0XHRcdFx0cGxheWVyTXVsbGlnYW46IFsuLi4ocHJldmlvdXNBY3Rpb24ucGxheWVyTXVsbGlnYW4gfHwgW10pLCAuLi4oY3VycmVudEFjdGlvbi5wbGF5ZXJNdWxsaWdhbiB8fCBbXSldLFxyXG5cdFx0XHRcdFx0b3Bwb25lbnRNdWxsaWdhbjogW1xyXG5cdFx0XHRcdFx0XHQuLi4ocHJldmlvdXNBY3Rpb24ub3Bwb25lbnRNdWxsaWdhbiB8fCBbXSksXHJcblx0XHRcdFx0XHRcdC4uLihjdXJyZW50QWN0aW9uLm9wcG9uZW50TXVsbGlnYW4gfHwgW10pLFxyXG5cdFx0XHRcdFx0XSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyAvLyBjb25zb2xlLmxvZygnbWVyZ2luZyBpbnRvIHByZXZpb3VzIHR1cm4gYWN0aW9uJywgcHJldmlvdXNBY3Rpb24sIGN1cnJlbnRBY3Rpb24pO1xyXG5cdFx0XHRyZXR1cm4gU3RhcnRUdXJuQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHR0dXJuOiBwcmV2aW91c0FjdGlvbi50dXJuLFxyXG5cdFx0XHRcdFx0ZW50aXRpZXM6IHByZXZpb3VzQWN0aW9uLmVudGl0aWVzLFxyXG5cdFx0XHRcdFx0Y3Jvc3NlZEVudGl0aWVzOiBbXHJcblx0XHRcdFx0XHRcdC4uLihwcmV2aW91c0FjdGlvbi5jcm9zc2VkRW50aXRpZXMgfHwgW10pLFxyXG5cdFx0XHRcdFx0XHQuLi4oY3VycmVudEFjdGlvbi5wbGF5ZXJNdWxsaWdhbiB8fCBbXSksXHJcblx0XHRcdFx0XHRcdC4uLihjdXJyZW50QWN0aW9uLm9wcG9uZW50TXVsbGlnYW4gfHwgW10pLFxyXG5cdFx0XHRcdFx0XSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEhhbmRFbnRpdHlJZHMoZW50aXRpZXM6IE1hcDxudW1iZXIsIEVudGl0eT4sIHBsYXllckVudGl0eUlkOiBudW1iZXIpOiByZWFkb25seSBudW1iZXJbXSB7XHJcblx0XHRjb25zdCBwbGF5ZXJFbnRpdHkgPSBBY3Rpb25IZWxwZXIuZ2V0T3duZXIoZW50aXRpZXMsIHBsYXllckVudGl0eUlkKTtcclxuXHRcdHJldHVybiBlbnRpdGllc1xyXG5cdFx0XHQudmFsdWVTZXEoKVxyXG5cdFx0XHQudG9BcnJheSgpXHJcblx0XHRcdC5maWx0ZXIoZW50aXR5ID0+IGVudGl0eS5nZXRUYWcoR2FtZVRhZy5DT05UUk9MTEVSKSA9PT0gcGxheWVyRW50aXR5LnBsYXllcklkKVxyXG5cdFx0XHQuZmlsdGVyKGVudGl0eSA9PiBlbnRpdHkuZ2V0VGFnKEdhbWVUYWcuWk9ORSkgPT09IFpvbmUuSEFORClcclxuXHRcdFx0Lm1hcChlbnRpdHkgPT4gZW50aXR5LmlkKTtcclxuXHR9XHJcbn1cclxuIl19