UNPKG

@firestone-hs/replay-parser

Version:

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

64 lines 11.8 kB
import { BlockType, CardType, GameTag, Zone } from '@firestone-hs/reference-data'; import uniq from 'lodash-es/uniq'; import { SummonAction } from '../../models/action/summon-action'; import { ActionHistoryItem } from '../../models/history/action-history-item'; import { FullEntityHistoryItem, ShowEntityHistoryItem } from '../../models/models'; import { ActionHelper } from './action-helper'; export class SummonsParser { constructor(allCards) { this.allCards = allCards; } applies(item) { return item instanceof ShowEntityHistoryItem || item instanceof FullEntityHistoryItem; } parse(item, currentTurn, entitiesBeforeAction, history) { const parentActionId = item.entityDefintion.parentIndex; const parentAction = history.find(historyItem => historyItem.index === parentActionId); // We make sure the death occurs during a DEATH phase, so that we don't count the // "dead spells", ie spells that have been used and go to the graveyard if (!item.entityDefintion.parentIndex || !parentAction || !(parentAction instanceof ActionHistoryItem)) { return; } if (parseInt(parentAction.node.attributes.type) !== BlockType.TRIGGER && parseInt(parentAction.node.attributes.type) !== BlockType.POWER) { return; } let entities = [item.entityDefintion]; if (!entities) { return; } return entities .filter(entity => entity.tags.get(GameTag[GameTag.ZONE]) === Zone.PLAY) .filter(entity => entity.tags.get(GameTag[GameTag.CARDTYPE]) === CardType.MINION) .map(entity => { return SummonAction.create({ timestamp: item.timestamp, index: entity.index, entityIds: [entity.id], originId: parseInt(parentAction.node.attributes.entity), }, this.allCards); }); } reduce(actions) { return ActionHelper.combineActions(actions, (previous, current) => this.shouldMergeActions(previous, current), (previous, current) => this.mergeActions(previous, current)); } shouldMergeActions(previousAction, currentAction) { if (!(previousAction instanceof SummonAction) || !(currentAction instanceof SummonAction)) { return false; } if (previousAction.originId !== currentAction.originId) { return false; } return true; } mergeActions(previousAction, currentAction) { return SummonAction.create({ timestamp: previousAction.timestamp, index: previousAction.index, entities: currentAction.entities, originId: currentAction.originId, entityIds: uniq([...uniq(previousAction.entityIds || []), ...uniq(currentAction.entityIds || [])]), }, this.allCards); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbW9ucy1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBsYXktcGFyc2VyL3NyYy9saWIvc2VydmljZXMvYWN0aW9uL3N1bW1vbnMtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRixPQUFPLElBQUksTUFBTSxnQkFBZ0IsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sT0FBTyxhQUFhO0lBQ3pCLFlBQW9CLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO0lBQUcsQ0FBQztJQUUxQyxPQUFPLENBQUMsSUFBaUI7UUFDL0IsT0FBTyxJQUFJLFlBQVkscUJBQXFCLElBQUksSUFBSSxZQUFZLHFCQUFxQixDQUFDO0lBQ3ZGLENBQUM7SUFFTSxLQUFLLENBQ1gsSUFBbUQsRUFDbkQsV0FBbUIsRUFDbkIsb0JBQXlDLEVBQ3pDLE9BQStCO1FBRS9CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQ3hELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZGLGlGQUFpRjtRQUNqRix1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMs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ImltcG9ydCB7IEJsb2NrVHlwZSwgQ2FyZFR5cGUsIEdhbWVUYWcsIFpvbmUgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcclxuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLWVzL3VuaXEnO1xyXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL2FjdGlvbic7XHJcbmltcG9ydCB7IFN1bW1vbkFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vc3VtbW9uLWFjdGlvbic7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL21vZGVscy9nYW1lL2VudGl0eSc7XHJcbmltcG9ydCB7IEFjdGlvbkhpc3RvcnlJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpc3RvcnkvYWN0aW9uLWhpc3RvcnktaXRlbSc7XHJcbmltcG9ydCB7IEhpc3RvcnlJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpc3RvcnkvaGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgRnVsbEVudGl0eUhpc3RvcnlJdGVtLCBTaG93RW50aXR5SGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvbW9kZWxzJztcclxuaW1wb3J0IHsgRW50aXR5RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9wYXJzZXIvZW50aXR5LWRlZmluaXRpb24nO1xyXG5pbXBvcnQgeyBBbGxDYXJkc1NlcnZpY2UgfSBmcm9tICcuLi9hbGwtY2FyZHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGlvbkhlbHBlciB9IGZyb20gJy4vYWN0aW9uLWhlbHBlcic7XHJcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gJy4vcGFyc2VyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTdW1tb25zUGFyc2VyIGltcGxlbWVudHMgUGFyc2VyIHtcclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGFsbENhcmRzOiBBbGxDYXJkc1NlcnZpY2UpIHt9XHJcblxyXG5cdHB1YmxpYyBhcHBsaWVzKGl0ZW06IEhpc3RvcnlJdGVtKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIFNob3dFbnRpdHlIaXN0b3J5SXRlbSB8fCBpdGVtIGluc3RhbmNlb2YgRnVsbEVudGl0eUhpc3RvcnlJdGVtO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHBhcnNlKFxyXG5cdFx0aXRlbTogU2hvd0VudGl0eUhpc3RvcnlJdGVtIHwgRnVsbEVudGl0eUhpc3RvcnlJdGVtLFxyXG5cdFx0Y3VycmVudFR1cm46IG51bWJlcixcclxuXHRcdGVudGl0aWVzQmVmb3JlQWN0aW9uOiBNYXA8bnVtYmVyLCBFbnRpdHk+LFxyXG5cdFx0aGlzdG9yeTogcmVhZG9ubHkgSGlzdG9yeUl0ZW1bXSxcclxuXHQpOiBBY3Rpb25bXSB7XHJcblx0XHRjb25zdCBwYXJlbnRBY3Rpb25JZCA9IGl0ZW0uZW50aXR5RGVmaW50aW9uLnBhcmVudEluZGV4O1xyXG5cdFx0Y29uc3QgcGFyZW50QWN0aW9uID0gaGlzdG9yeS5maW5kKGhpc3RvcnlJdGVtID0+IGhpc3RvcnlJdGVtLmluZGV4ID09PSBwYXJlbnRBY3Rpb25JZCk7XHJcblx0XHQvLyBXZSBtYWtlIHN1cmUgdGhlIGRlYXRoIG9jY3VycyBkdXJpbmcgYSBERUFUSCBwaGFzZSwgc28gdGhhdCB3ZSBkb24ndCBjb3VudCB0aGVcclxuXHRcdC8vIFwiZGVhZCBzcGVsbHNcIiwgaWUgc3BlbGxzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgYW5kIGdvIHRvIHRoZSBncmF2ZXlhcmRcclxuXHRcdGlmICghaXRlbS5lbnRpdHlEZWZpbnRpb24ucGFyZW50SW5kZXggfHwgIXBhcmVudEFjdGlvbiB8fCAhKHBhcmVudEFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkhpc3RvcnlJdGVtKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHBhcnNlSW50KHBhcmVudEFjdGlvbi5ub2RlLmF0dHJpYnV0ZXMudHlwZSkgIT09IEJsb2NrVHlwZS5UUklHR0VSICYmXHJcblx0XHRcdHBhcnNlSW50KHBhcmVudEFjdGlvbi5ub2RlLmF0dHJpYnV0ZXMudHlwZSkgIT09IEJsb2NrVHlwZS5QT1dFUlxyXG5cdFx0KSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZW50aXRpZXM6IHJlYWRvbmx5IEVudGl0eURlZmluaXRpb25bXSA9IFtpdGVtLmVudGl0eURlZmludGlvbl07XHJcblx0XHRpZiAoIWVudGl0aWVzKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZW50aXRpZXNcclxuXHRcdFx0LmZpbHRlcihlbnRpdHkgPT4gZW50aXR5LnRhZ3MuZ2V0KEdhbWVUYWdbR2FtZVRhZy5aT05FXSkgPT09IFpvbmUuUExBWSlcclxuXHRcdFx0LmZpbHRlcihlbnRpdHkgPT4gZW50aXR5LnRhZ3MuZ2V0KEdhbWVUYWdbR2FtZVRhZy5DQVJEVFlQRV0pID09PSBDYXJkVHlwZS5NSU5JT04pXHJcblx0XHRcdC5tYXAoZW50aXR5ID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gU3VtbW9uQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0dGltZXN0YW1wOiBpdGVtLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRcdFx0aW5kZXg6IGVudGl0eS5pbmRleCxcclxuXHRcdFx0XHRcdFx0ZW50aXR5SWRzOiBbZW50aXR5LmlkXSBhcyByZWFkb25seSBudW1iZXJbXSxcclxuXHRcdFx0XHRcdFx0b3JpZ2luSWQ6IHBhcnNlSW50KHBhcmVudEFjdGlvbi5ub2RlLmF0dHJpYnV0ZXMuZW50aXR5KSxcclxuXHRcdFx0XHRcdH0gYXMgU3VtbW9uQWN0aW9uLFxyXG5cdFx0XHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyByZWR1Y2UoYWN0aW9uczogcmVhZG9ubHkgQWN0aW9uW10pOiByZWFkb25seSBBY3Rpb25bXSB7XHJcblx0XHRyZXR1cm4gQWN0aW9uSGVscGVyLmNvbWJpbmVBY3Rpb25zPFN1bW1vbkFjdGlvbj4oXHJcblx0XHRcdGFjdGlvbnMsXHJcblx0XHRcdChwcmV2aW91cywgY3VycmVudCkgPT4gdGhpcy5zaG91bGRNZXJnZUFjdGlvbnMocHJldmlvdXMsIGN1cnJlbnQpLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHRoaXMubWVyZ2VBY3Rpb25zKHByZXZpb3VzLCBjdXJyZW50KSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNob3VsZE1lcmdlQWN0aW9ucyhwcmV2aW91c0FjdGlvbjogQWN0aW9uLCBjdXJyZW50QWN0aW9uOiBBY3Rpb24pOiBib29sZWFuIHtcclxuXHRcdGlmICghKHByZXZpb3VzQWN0aW9uIGluc3RhbmNlb2YgU3VtbW9uQWN0aW9uKSB8fCAhKGN1cnJlbnRBY3Rpb24gaW5zdGFuY2VvZiBTdW1tb25BY3Rpb24pKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGlmICgocHJldmlvdXNBY3Rpb24gYXMgU3VtbW9uQWN0aW9uKS5vcmlnaW5JZCAhPT0gKGN1cnJlbnRBY3Rpb24gYXMgU3VtbW9uQWN0aW9uKS5vcmlnaW5JZCkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWVyZ2VBY3Rpb25zKHByZXZpb3VzQWN0aW9uOiBTdW1tb25BY3Rpb24sIGN1cnJlbnRBY3Rpb246IFN1bW1vbkFjdGlvbik6IFN1bW1vbkFjdGlvbiB7XHJcblx0XHRyZXR1cm4gU3VtbW9uQWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHRpbWVzdGFtcDogcHJldmlvdXNBY3Rpb24udGltZXN0YW1wLFxyXG5cdFx0XHRcdGluZGV4OiBwcmV2aW91c0FjdGlvbi5pbmRleCxcclxuXHRcdFx0XHRlbnRpdGllczogY3VycmVudEFjdGlvbi5lbnRpdGllcyxcclxuXHRcdFx0XHRvcmlnaW5JZDogY3VycmVudEFjdGlvbi5vcmlnaW5JZCxcclxuXHRcdFx0XHRlbnRpdHlJZHM6IHVuaXEoWy4uLnVuaXEocHJldmlvdXNBY3Rpb24uZW50aXR5SWRzIHx8IFtdKSwgLi4udW5pcShjdXJyZW50QWN0aW9uLmVudGl0eUlkcyB8fCBbXSldKSxcclxuXHRcdFx0fSBhcyBTdW1tb25BY3Rpb24sXHJcblx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iXX0=