UNPKG

@firestone-hs/replay-parser

Version:

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

63 lines 11.9 kB
import { BlockType, CardType, GameTag, Zone } from '@firestone-hs/reference-data'; 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[GameTag[GameTag.ZONE]] === Zone.PLAY) .filter((entity) => entity.tags[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: [...(previousAction.entityIds ?? []), ...(currentAction.entityIds ?? [])].filter((id, index, self) => self.indexOf(id) === index), }, this.allCards); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbW9ucy1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBsYXktcGFyc2VyL3NyYy9saWIvc2VydmljZXMvYWN0aW9uL3N1bW1vbnMtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sT0FBTyxhQUFhO0lBQ3pCLFlBQW9CLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO0lBQUcsQ0FBQztJQUUxQyxPQUFPLENBQUMsSUFBaUI7UUFDL0IsT0FBTyxJQUFJLFlBQVkscUJBQXFCLElBQUksSUFBSSxZQUFZLHFCQUFxQixDQUFDO0lBQ3ZGLENBQUM7SUFFTSxLQUFLLENBQ1gsSUFBbUQsRUFDbkQsV0FBbUIsRUFDbkIsb0JBQXlDLEVBQ3pDLE9BQStCO1FBRS9CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQ3hELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLENBQUM7UUFDekYsaUZBQWlGO1FBQ2pGLHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUksQ0FBQyxZQUFZLElBQUksQ0FB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QUFRLENBQ2IsQ0FBQztJQUNILENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJsb2NrVHlwZSwgQ2FyZFR5cGUsIEdhbWVUYWcsIFpvbmUgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9hY3Rpb24nO1xyXG5pbXBvcnQgeyBTdW1tb25BY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL3N1bW1vbi1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2FtZS9lbnRpdHknO1xyXG5pbXBvcnQgeyBBY3Rpb25IaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L2FjdGlvbi1oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L2hpc3RvcnktaXRlbSc7XHJcbmltcG9ydCB7IEZ1bGxFbnRpdHlIaXN0b3J5SXRlbSwgU2hvd0VudGl0eUhpc3RvcnlJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7IEVudGl0eURlZmluaXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcGFyc2VyL2VudGl0eS1kZWZpbml0aW9uJztcclxuaW1wb3J0IHsgQWxsQ2FyZHNTZXJ2aWNlIH0gZnJvbSAnLi4vYWxsLWNhcmRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3Rpb25IZWxwZXIgfSBmcm9tICcuL2FjdGlvbi1oZWxwZXInO1xyXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICcuL3BhcnNlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VtbW9uc1BhcnNlciBpbXBsZW1lbnRzIFBhcnNlciB7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBhbGxDYXJkczogQWxsQ2FyZHNTZXJ2aWNlKSB7fVxyXG5cclxuXHRwdWJsaWMgYXBwbGllcyhpdGVtOiBIaXN0b3J5SXRlbSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGl0ZW0gaW5zdGFuY2VvZiBTaG93RW50aXR5SGlzdG9yeUl0ZW0gfHwgaXRlbSBpbnN0YW5jZW9mIEZ1bGxFbnRpdHlIaXN0b3J5SXRlbTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBwYXJzZShcclxuXHRcdGl0ZW06IFNob3dFbnRpdHlIaXN0b3J5SXRlbSB8IEZ1bGxFbnRpdHlIaXN0b3J5SXRlbSxcclxuXHRcdGN1cnJlbnRUdXJuOiBudW1iZXIsXHJcblx0XHRlbnRpdGllc0JlZm9yZUFjdGlvbjogTWFwPG51bWJlciwgRW50aXR5PixcclxuXHRcdGhpc3Rvcnk6IHJlYWRvbmx5IEhpc3RvcnlJdGVtW10sXHJcblx0KTogQWN0aW9uW10ge1xyXG5cdFx0Y29uc3QgcGFyZW50QWN0aW9uSWQgPSBpdGVtLmVudGl0eURlZmludGlvbi5wYXJlbnRJbmRleDtcclxuXHRcdGNvbnN0IHBhcmVudEFjdGlvbiA9IGhpc3RvcnkuZmluZCgoaGlzdG9yeUl0ZW0pID0+IGhpc3RvcnlJdGVtLmluZGV4ID09PSBwYXJlbnRBY3Rpb25JZCk7XHJcblx0XHQvLyBXZSBtYWtlIHN1cmUgdGhlIGRlYXRoIG9jY3VycyBkdXJpbmcgYSBERUFUSCBwaGFzZSwgc28gdGhhdCB3ZSBkb24ndCBjb3VudCB0aGVcclxuXHRcdC8vIFwiZGVhZCBzcGVsbHNcIiwgaWUgc3BlbGxzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgYW5kIGdvIHRvIHRoZSBncmF2ZXlhcmRcclxuXHRcdGlmICghaXRlbS5lbnRpdHlEZWZpbnRpb24ucGFyZW50SW5kZXggfHwgIXBhcmVudEFjdGlvbiB8fCAhKHBhcmVudEFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkhpc3RvcnlJdGVtKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHBhcnNlSW50KHBhcmVudEFjdGlvbi5ub2RlLmF0dHJpYnV0ZXMudHlwZSkgIT09IEJsb2NrVHlwZS5UUklHR0VSICYmXHJcblx0XHRcdHBhcnNlSW50KHBhcmVudEFjdGlvbi5ub2RlLmF0dHJpYnV0ZXMudHlwZSkgIT09IEJsb2NrVHlwZS5QT1dFUlxyXG5cdFx0KSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZW50aXRpZXM6IHJlYWRvbmx5IEVudGl0eURlZmluaXRpb25bXSA9IFtpdGVtLmVudGl0eURlZmludGlvbl07XHJcblx0XHRpZiAoIWVudGl0aWVzKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZW50aXRpZXNcclxuXHRcdFx0LmZpbHRlcigoZW50aXR5KSA9PiBlbnRpdHkudGFnc1tHYW1lVGFnW0dhbWVUYWcuWk9ORV1dID09PSBab25lLlBMQVkpXHJcblx0XHRcdC5maWx0ZXIoKGVudGl0eSkgPT4gZW50aXR5LnRhZ3NbR2FtZVRhZ1tHYW1lVGFnLkNBUkRUWVBFXV0gPT09IENhcmRUeXBlLk1JTklPTilcclxuXHRcdFx0Lm1hcCgoZW50aXR5KSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIFN1bW1vbkFjdGlvbi5jcmVhdGUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdHRpbWVzdGFtcDogaXRlbS50aW1lc3RhbXAsXHJcblx0XHRcdFx0XHRcdGluZGV4OiBlbnRpdHkuaW5kZXgsXHJcblx0XHRcdFx0XHRcdGVudGl0eUlkczogW2VudGl0eS5pZF0gYXMgcmVhZG9ubHkgbnVtYmVyW10sXHJcblx0XHRcdFx0XHRcdG9yaWdpbklkOiBwYXJzZUludChwYXJlbnRBY3Rpb24ubm9kZS5hdHRyaWJ1dGVzLmVudGl0eSksXHJcblx0XHRcdFx0XHR9IGFzIFN1bW1vbkFjdGlvbixcclxuXHRcdFx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcmVkdWNlKGFjdGlvbnM6IHJlYWRvbmx5IEFjdGlvbltdKTogcmVhZG9ubHkgQWN0aW9uW10ge1xyXG5cdFx0cmV0dXJuIEFjdGlvbkhlbHBlci5jb21iaW5lQWN0aW9uczxTdW1tb25BY3Rpb24+KFxyXG5cdFx0XHRhY3Rpb25zLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHRoaXMuc2hvdWxkTWVyZ2VBY3Rpb25zKHByZXZpb3VzLCBjdXJyZW50KSxcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiB0aGlzLm1lcmdlQWN0aW9ucyhwcmV2aW91cywgY3VycmVudCksXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzaG91bGRNZXJnZUFjdGlvbnMocHJldmlvdXNBY3Rpb246IEFjdGlvbiwgY3VycmVudEFjdGlvbjogQWN0aW9uKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIShwcmV2aW91c0FjdGlvbiBpbnN0YW5jZW9mIFN1bW1vbkFjdGlvbikgfHwgIShjdXJyZW50QWN0aW9uIGluc3RhbmNlb2YgU3VtbW9uQWN0aW9uKSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRpZiAoKHByZXZpb3VzQWN0aW9uIGFzIFN1bW1vbkFjdGlvbikub3JpZ2luSWQgIT09IChjdXJyZW50QWN0aW9uIGFzIFN1bW1vbkFjdGlvbikub3JpZ2luSWQpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1lcmdlQWN0aW9ucyhwcmV2aW91c0FjdGlvbjogU3VtbW9uQWN0aW9uLCBjdXJyZW50QWN0aW9uOiBTdW1tb25BY3Rpb24pOiBTdW1tb25BY3Rpb24ge1xyXG5cdFx0cmV0dXJuIFN1bW1vbkFjdGlvbi5jcmVhdGUoXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0aW1lc3RhbXA6IHByZXZpb3VzQWN0aW9uLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRpbmRleDogcHJldmlvdXNBY3Rpb24uaW5kZXgsXHJcblx0XHRcdFx0ZW50aXRpZXM6IGN1cnJlbnRBY3Rpb24uZW50aXRpZXMsXHJcblx0XHRcdFx0b3JpZ2luSWQ6IGN1cnJlbnRBY3Rpb24ub3JpZ2luSWQsXHJcblx0XHRcdFx0ZW50aXR5SWRzOiBbLi4uKHByZXZpb3VzQWN0aW9uLmVudGl0eUlkcyA/PyBbXSksIC4uLihjdXJyZW50QWN0aW9uLmVudGl0eUlkcyA/PyBbXSldLmZpbHRlcihcclxuXHRcdFx0XHRcdChpZCwgaW5kZXgsIHNlbGYpID0+IHNlbGYuaW5kZXhPZihpZCkgPT09IGluZGV4LFxyXG5cdFx0XHRcdCkgYXMgcmVhZG9ubHkgbnVtYmVyW10sXHJcblx0XHRcdH0gYXMgU3VtbW9uQWN0aW9uLFxyXG5cdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIl19