@firestone-hs/replay-parser
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.
70 lines • 10.8 kB
JavaScript
import { Injectable } from '@angular/core';
import { CardType, GameTag, Step, Zone } from '@firestone-hs/reference-data';
import { Game } from '../../models/game/game';
import { GameEntity } from '../../models/game/game-entity';
import * as i0 from "@angular/core";
import * as i1 from "../all-cards.service";
export class MulliganParserService {
constructor(allCards) {
this.allCards = allCards;
}
affectMulligan(game) {
let turns = game.turns;
const mulliganTurn = game.turns.get(0);
const enrichedMulligan = this.enrichTurn(mulliganTurn);
turns = turns.set(0, enrichedMulligan);
return Game.createGame(game, { turns });
}
enrichTurn(turn) {
const newActions = [];
for (let i = 0; i < turn.actions.length; i++) {
const previousAction = i === 0 ? null : newActions[i - 1];
const newAction = this.enrichAction(turn.actions[i], previousAction);
newActions.push(newAction);
}
return turn.update({ actions: newActions });
}
enrichAction(action, previousAction) {
// // console.log(
// 'enriching action',
// action,
// action.entities.toJS(),
// action.entities.get(73).tags.toJS(),
// action.entities.get(74).tags.toJS(),
// );
const mulliganEntities = action.entities
.valueSeq()
.toArray()
.filter(entity => entity.getTag(GameTag.ZONE) === Zone.HAND)
.filter(entity => entity.cardID !== 'GAME_005') // Don't show the coin yet
.sort((a, b) => a.getTag(GameTag.ZONE_POSITION) - b.getTag(GameTag.ZONE_POSITION));
// // console.log('mulligan entities', mulliganEntities, mulliganEntities.map(entity => entity.tags.toJS()));
// Hero selection phase
let isHeroSelection = false;
if (mulliganEntities.length > 0 && mulliganEntities[0].getCardType() === CardType.HERO) {
// // console.log('hero selection');
isHeroSelection = true;
}
let isMulligan = !isHeroSelection && mulliganEntities.length > 0;
// // console.log('isMulligan?', isMulligan, mulliganEntities);
// // console.log('previous entities', previousAction && previousAction.entities.toJS());
if (action.activeSpell) {
isMulligan = false;
}
else if (previousAction &&
previousAction.entities.find(entity => entity instanceof GameEntity).getTag(GameTag.STEP) ===
Step.BEGIN_MULLIGAN) {
isMulligan = previousAction.isMulligan;
}
return action.updateAction({ isMulligan, isHeroSelection });
}
}
MulliganParserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: MulliganParserService, deps: [{ token: i1.AllCardsService }], target: i0.ɵɵFactoryTarget.Injectable });
MulliganParserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: MulliganParserService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: MulliganParserService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.AllCardsService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsbGlnYW4tcGFyc2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBsYXktcGFyc2VyL3NyYy9saWIvc2VydmljZXMvZ2FtZXBpcGVsaW5lL211bGxpZ2FuLXBhcnNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQU8zRCxNQUFNLE9BQU8scUJBQXFCO0lBQ2pDLFlBQW9CLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO0lBQUcsQ0FBQztJQUUxQyxjQUFjLENBQUMsSUFBVTtRQUMvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFVLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVU7UUFDNUIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3JFLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDM0I7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBK0IsRUFBVSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsY0FBc0I7UUFDMUQsa0JBQWtCO1FBQ2xCLHVCQUF1QjtRQUN2QixXQUFXO1FBQ1gsMkJBQTJCO1FBQzNCLHdDQUF3QztRQUN4Qyx3Q0FBd0M7UUFDeEMsS0FBSztRQUNMLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFFBQVE7YUFDdEMsUUFBUSxFQUFFO2FBQ1YsT0FBTyxFQUFFO2FBQ1QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQzthQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLDBCQUEwQjthQUN6RSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLDZHQUE2RztRQUM3Ryx1QkFBdUI7UUFDdkIsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFO1lBQ3ZGLG9DQUFvQztZQUNwQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxlQUFlLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqRSwrREFBK0Q7UUFDL0QseUZBQXlGO1FBQ3pGLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN2QixVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ25CO2FBQU0sSUFDTixjQUFjO1lBQ2QsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLFlBQVksVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxjQUFjLEVBQ25CO1lBQ0QsVUFBVSxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUM7U0FDdkM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFZLENBQUMsQ0FBQztJQUN2RSxDQUFDOztrSEF4RFcscUJBQXFCO3NIQUFyQixxQkFBcUIsY0FGckIsTUFBTTsyRkFFTixxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYXJkVHlwZSwgR2FtZVRhZywgU3RlcCwgWm9uZSB9IGZyb20gJ0BmaXJlc3RvbmUtaHMvcmVmZXJlbmNlLWRhdGEnO1xyXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL2FjdGlvbic7XHJcbmltcG9ydCB7IEdhbWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2FtZS9nYW1lJztcclxuaW1wb3J0IHsgR2FtZUVudGl0eSB9IGZyb20gJy4uLy4uL21vZGVscy9nYW1lL2dhbWUtZW50aXR5JztcclxuaW1wb3J0IHsgVHVybiB9IGZyb20gJy4uLy4uL21vZGVscy9nYW1lL3R1cm4nO1xyXG5pbXBvcnQgeyBBbGxDYXJkc1NlcnZpY2UgfSBmcm9tICcuLi9hbGwtY2FyZHMuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsbGlnYW5QYXJzZXJTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGFsbENhcmRzOiBBbGxDYXJkc1NlcnZpY2UpIHt9XHJcblxyXG5cdHB1YmxpYyBhZmZlY3RNdWxsaWdhbihnYW1lOiBHYW1lKTogR2FtZSB7XHJcblx0XHRsZXQgdHVybnMgPSBnYW1lLnR1cm5zO1xyXG5cdFx0Y29uc3QgbXVsbGlnYW5UdXJuID0gZ2FtZS50dXJucy5nZXQoMCk7XHJcblx0XHRjb25zdCBlbnJpY2hlZE11bGxpZ2FuID0gdGhpcy5lbnJpY2hUdXJuKG11bGxpZ2FuVHVybik7XHJcblx0XHR0dXJucyA9IHR1cm5zLnNldCgwLCBlbnJpY2hlZE11bGxpZ2FuKTtcclxuXHRcdHJldHVybiBHYW1lLmNyZWF0ZUdhbWUoZ2FtZSwgeyB0dXJucyB9IGFzIEdhbWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBlbnJpY2hUdXJuKHR1cm46IFR1cm4pOiBUdXJuIHtcclxuXHRcdGNvbnN0IG5ld0FjdGlvbnMgPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdHVybi5hY3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IHByZXZpb3VzQWN0aW9uID0gaSA9PT0gMCA/IG51bGwgOiBuZXdBY3Rpb25zW2kgLSAxXTtcclxuXHRcdFx0Y29uc3QgbmV3QWN0aW9uID0gdGhpcy5lbnJpY2hBY3Rpb24odHVybi5hY3Rpb25zW2ldLCBwcmV2aW91c0FjdGlvbik7XHJcblx0XHRcdG5ld0FjdGlvbnMucHVzaChuZXdBY3Rpb24pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHR1cm4udXBkYXRlKHsgYWN0aW9uczogbmV3QWN0aW9ucyBhcyByZWFkb25seSBBY3Rpb25bXSB9IGFzIFR1cm4pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBlbnJpY2hBY3Rpb24oYWN0aW9uOiBBY3Rpb24sIHByZXZpb3VzQWN0aW9uOiBBY3Rpb24pOiBBY3Rpb24ge1xyXG5cdFx0Ly8gLy8gY29uc29sZS5sb2coXHJcblx0XHQvLyBcdCdlbnJpY2hpbmcgYWN0aW9uJyxcclxuXHRcdC8vIFx0YWN0aW9uLFxyXG5cdFx0Ly8gXHRhY3Rpb24uZW50aXRpZXMudG9KUygpLFxyXG5cdFx0Ly8gXHRhY3Rpb24uZW50aXRpZXMuZ2V0KDczKS50YWdzLnRvSlMoKSxcclxuXHRcdC8vIFx0YWN0aW9uLmVudGl0aWVzLmdldCg3NCkudGFncy50b0pTKCksXHJcblx0XHQvLyApO1xyXG5cdFx0Y29uc3QgbXVsbGlnYW5FbnRpdGllcyA9IGFjdGlvbi5lbnRpdGllc1xyXG5cdFx0XHQudmFsdWVTZXEoKVxyXG5cdFx0XHQudG9BcnJheSgpXHJcblx0XHRcdC5maWx0ZXIoZW50aXR5ID0+IGVudGl0eS5nZXRUYWcoR2FtZVRhZy5aT05FKSA9PT0gWm9uZS5IQU5EKVxyXG5cdFx0XHQuZmlsdGVyKGVudGl0eSA9PiBlbnRpdHkuY2FyZElEICE9PSAnR0FNRV8wMDUnKSAvLyBEb24ndCBzaG93IHRoZSBjb2luIHlldFxyXG5cdFx0XHQuc29ydCgoYSwgYikgPT4gYS5nZXRUYWcoR2FtZVRhZy5aT05FX1BPU0lUSU9OKSAtIGIuZ2V0VGFnKEdhbWVUYWcuWk9ORV9QT1NJVElPTikpO1xyXG5cdFx0Ly8gLy8gY29uc29sZS5sb2coJ211bGxpZ2FuIGVudGl0aWVzJywgbXVsbGlnYW5FbnRpdGllcywgbXVsbGlnYW5FbnRpdGllcy5tYXAoZW50aXR5ID0+IGVudGl0eS50YWdzLnRvSlMoKSkpO1xyXG5cdFx0Ly8gSGVybyBzZWxlY3Rpb24gcGhhc2VcclxuXHRcdGxldCBpc0hlcm9TZWxlY3Rpb24gPSBmYWxzZTtcclxuXHRcdGlmIChtdWxsaWdhbkVudGl0aWVzLmxlbmd0aCA+IDAgJiYgbXVsbGlnYW5FbnRpdGllc1swXS5nZXRDYXJkVHlwZSgpID09PSBDYXJkVHlwZS5IRVJPKSB7XHJcblx0XHRcdC8vIC8vIGNvbnNvbGUubG9nKCdoZXJvIHNlbGVjdGlvbicpO1xyXG5cdFx0XHRpc0hlcm9TZWxlY3Rpb24gPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBpc011bGxpZ2FuID0gIWlzSGVyb1NlbGVjdGlvbiAmJiBtdWxsaWdhbkVudGl0aWVzLmxlbmd0aCA+IDA7XHJcblx0XHQvLyAvLyBjb25zb2xlLmxvZygnaXNNdWxsaWdhbj8nLCBpc011bGxpZ2FuLCBtdWxsaWdhbkVudGl0aWVzKTtcclxuXHRcdC8vIC8vIGNvbnNvbGUubG9nKCdwcmV2aW91cyBlbnRpdGllcycsIHByZXZpb3VzQWN0aW9uICYmIHByZXZpb3VzQWN0aW9uLmVudGl0aWVzLnRvSlMoKSk7XHJcblx0XHRpZiAoYWN0aW9uLmFjdGl2ZVNwZWxsKSB7XHJcblx0XHRcdGlzTXVsbGlnYW4gPSBmYWxzZTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHByZXZpb3VzQWN0aW9uICYmXHJcblx0XHRcdHByZXZpb3VzQWN0aW9uLmVudGl0aWVzLmZpbmQoZW50aXR5ID0+IGVudGl0eSBpbnN0YW5jZW9mIEdhbWVFbnRpdHkpLmdldFRhZyhHYW1lVGFnLlNURVApID09PVxyXG5cdFx0XHRcdFN0ZXAuQkVHSU5fTVVMTElHQU5cclxuXHRcdCkge1xyXG5cdFx0XHRpc011bGxpZ2FuID0gcHJldmlvdXNBY3Rpb24uaXNNdWxsaWdhbjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBhY3Rpb24udXBkYXRlQWN0aW9uKHsgaXNNdWxsaWdhbiwgaXNIZXJvU2VsZWN0aW9uIH0gYXMgQWN0aW9uKTtcclxuXHR9XHJcbn1cclxuIl19