@firestone-hs/replay-parser
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.
84 lines • 14.5 kB
JavaScript
import { GameTag, Zone } from '@firestone-hs/reference-data';
import isEqual from 'lodash-es/isEqual';
import uniq from 'lodash-es/uniq';
import { AttachingEnchantmentAction } from '../../models/action/attaching-enchantment-action';
import { CardTargetAction } from '../../models/action/card-target-action';
import { PowerTargetAction } from '../../models/action/power-target-action';
import { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';
import { ActionHelper } from './action-helper';
export class AttachingEnchantmentParser {
constructor(allCards, config) {
this.allCards = allCards;
this.config = config;
}
applies(item) {
return item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.ZONE && item.tag.value === Zone.PLAY;
}
parse(item, currentTurn, entitiesBeforeAction, history) {
if (!this.config.showEnchantments) {
return [];
}
const entityId = item.tag.entity;
const entity = entitiesBeforeAction.get(entityId);
if (!entity) {
return;
}
// Some specific stuff for Battlegrounds. Not super clean
if (['TB_BaconShop_8P_PlayerE', 'TB_BaconShop_1P_PlayerE'].indexOf(entity.cardID) !== -1) {
return [];
}
const attachedToEntityId = entity.getTag(GameTag.ATTACHED);
if (!attachedToEntityId) {
return;
}
const creatorId = entity.getTag(GameTag.CREATOR);
return [
AttachingEnchantmentAction.create({
timestamp: item.timestamp,
index: item.index,
originId: creatorId,
// Enchantments with the same name are duplicated so we have a 1-1 mapping
// with the card that is enchanted
enchantmentCardId: entity.cardID,
targetIds: [attachedToEntityId],
}, 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 AttachingEnchantmentAction &&
currentAction instanceof AttachingEnchantmentAction) {
const prev = previousAction;
const curr = currentAction;
if (prev.originId === curr.originId && prev.enchantmentCardId === curr.enchantmentCardId) {
return true;
}
}
if ((previousAction instanceof CardTargetAction || previousAction instanceof PowerTargetAction) &&
currentAction instanceof AttachingEnchantmentAction) {
// // console.log('merging enchantment into target?', previousAction, currentAction);
if (previousAction.originId === currentAction.originId &&
isEqual(previousAction.targetIds, currentAction.targetIds)) {
// // console.log('merging enchantment into target', previousAction, currentAction);
return true;
}
}
return false;
}
mergeActions(previousAction, currentAction) {
const targetIds = previousAction instanceof AttachingEnchantmentAction
? uniq([...uniq(previousAction.targetIds || []), ...uniq(currentAction.targetIds || [])])
: uniq(currentAction.targetIds || []);
return AttachingEnchantmentAction.create({
timestamp: previousAction.timestamp,
index: previousAction.index,
entities: currentAction.entities,
originId: currentAction.originId,
enchantmentCardId: currentAction.enchantmentCardId,
targetIds,
}, this.allCards);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoaW5nLWVuY2hhbnRtZW50LXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcGxheS1wYXJzZXIvc3JjL2xpYi9zZXJ2aWNlcy9hY3Rpb24vYXR0YWNoaW5nLWVuY2hhbnRtZW50LXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdELE9BQU8sT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQ3hDLE9BQU8sSUFBSSxNQUFNLGdCQUFnQixDQUFDO0FBRWxDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBR3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxNQUFNLE9BQU8sMEJBQTBCO0lBQ3RDLFlBQTZCLFFBQXlCLEVBQW1CLE1BQTBCO1FBQXRFLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQW1CLFdBQU0sR0FBTixNQUFNLENBQW9CO0lBQUcsQ0FBQztJQUVoRyxPQUFPLENBQUMsSUFBaUI7UUFDL0IsT0FBTyxJQUFJLFlBQVksb0JBQW9CLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzlHLENBQUM7SUFFTSxLQUFLLENBQ1gsSUFBMEIsRUFDMUIsV0FBbUIsRUFDbkIsb0JBQXlDLEVBQ3pDLE9BQStCO1FBRS9CLElBQUksQ0FB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QUFDO1lBQ3pGLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLDBCQUEwQixDQUFDLE1BQU0sQ0FDdkM7WUFDQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLO1lBQzNCLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUTtZQUNoQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVE7WUFDaEMsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLGlCQUFpQjtZQUNsRCxTQUFTO1NBQ1QsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUNiLENBQUM7SUFDSCxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHYW1lVGFnLCBab25lIH0gZnJvbSAnQGZpcmVzdG9uZS1ocy9yZWZlcmVuY2UtZGF0YSc7XHJcbmltcG9ydCB7IE1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XHJcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC1lcy9pc0VxdWFsJztcclxuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLWVzL3VuaXEnO1xyXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL2FjdGlvbic7XHJcbmltcG9ydCB7IEF0dGFjaGluZ0VuY2hhbnRtZW50QWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9hdHRhY2hpbmctZW5jaGFudG1lbnQtYWN0aW9uJztcclxuaW1wb3J0IHsgQ2FyZFRhcmdldEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vY2FyZC10YXJnZXQtYWN0aW9uJztcclxuaW1wb3J0IHsgUG93ZXJUYXJnZXRBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL3Bvd2VyLXRhcmdldC1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2FtZS9lbnRpdHknO1xyXG5pbXBvcnQgeyBIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L2hpc3RvcnktaXRlbSc7XHJcbmltcG9ydCB7IFRhZ0NoYW5nZUhpc3RvcnlJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpc3RvcnkvdGFnLWNoYW5nZS1oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBBY3Rpb25QYXJzZXJDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvbW9kZWxzJztcclxuaW1wb3J0IHsgQWxsQ2FyZHNTZXJ2aWNlIH0gZnJvbSAnLi4vYWxsLWNhcmRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3Rpb25IZWxwZXIgfSBmcm9tICcuL2FjdGlvbi1oZWxwZXInO1xyXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICcuL3BhcnNlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgQXR0YWNoaW5nRW5jaGFudG1lbnRQYXJzZXIgaW1wbGVtZW50cyBQYXJzZXIge1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYWxsQ2FyZHM6IEFsbENhcmRzU2VydmljZSwgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IEFjdGlvblBhcnNlckNvbmZpZykge31cclxuXHJcblx0cHVibGljIGFwcGxpZXMoaXRlbTogSGlzdG9yeUl0ZW0pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBpdGVtIGluc3RhbmNlb2YgVGFnQ2hhbmdlSGlzdG9yeUl0ZW0gJiYgaXRlbS50YWcudGFnID09PSBHYW1lVGFnLlpPTkUgJiYgaXRlbS50YWcudmFsdWUgPT09IFpvbmUuUExBWTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBwYXJzZShcclxuXHRcdGl0ZW06IFRhZ0NoYW5nZUhpc3RvcnlJdGVtLFxyXG5cdFx0Y3VycmVudFR1cm46IG51bWJlcixcclxuXHRcdGVudGl0aWVzQmVmb3JlQWN0aW9uOiBNYXA8bnVtYmVyLCBFbnRpdHk+LFxyXG5cdFx0aGlzdG9yeTogcmVhZG9ubHkgSGlzdG9yeUl0ZW1bXSxcclxuXHQpOiBBY3Rpb25bXSB7XHJcblx0XHRpZiAoIXRoaXMuY29uZmlnLnNob3dFbmNoYW50bWVudHMpIHtcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGVudGl0eUlkID0gaXRlbS50YWcuZW50aXR5O1xyXG5cdFx0Y29uc3QgZW50aXR5ID0gZW50aXRpZXNCZWZvcmVBY3Rpb24uZ2V0KGVudGl0eUlkKTtcclxuXHRcdGlmICghZW50aXR5KSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdC8vIFNvbWUgc3BlY2lmaWMgc3R1ZmYgZm9yIEJhdHRsZWdyb3VuZHMuIE5vdCBzdXBlciBjbGVhblxyXG5cdFx0aWYgKFsnVEJfQmFjb25TaG9wXzhQX1BsYXllckUnLCAnVEJfQmFjb25TaG9wXzFQX1BsYXllckUnXS5pbmRleE9mKGVudGl0eS5jYXJkSUQpICE9PSAtMSkge1xyXG5cdFx0XHRyZXR1cm4gW107XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYXR0YWNoZWRUb0VudGl0eUlkID0gZW50aXR5LmdldFRhZyhHYW1lVGFnLkFUVEFDSEVEKTtcclxuXHRcdGlmICghYXR0YWNoZWRUb0VudGl0eUlkKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGNyZWF0b3JJZCA9IGVudGl0eS5nZXRUYWcoR2FtZVRhZy5DUkVBVE9SKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHRBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbi5jcmVhdGUoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0dGltZXN0YW1wOiBpdGVtLnRpbWVzdGFtcCxcclxuXHRcdFx0XHRcdGluZGV4OiBpdGVtLmluZGV4LFxyXG5cdFx0XHRcdFx0b3JpZ2luSWQ6IGNyZWF0b3JJZCxcclxuXHRcdFx0XHRcdC8vIEVuY2hhbnRtZW50cyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIGR1cGxpY2F0ZWQgc28gd2UgaGF2ZSBhIDEtMSBtYXBwaW5nXHJcblx0XHRcdFx0XHQvLyB3aXRoIHRoZSBjYXJkIHRoYXQgaXMgZW5jaGFudGVkXHJcblx0XHRcdFx0XHRlbmNoYW50bWVudENhcmRJZDogZW50aXR5LmNhcmRJRCxcclxuXHRcdFx0XHRcdHRhcmdldElkczogW2F0dGFjaGVkVG9FbnRpdHlJZF0sXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0aGlzLmFsbENhcmRzLFxyXG5cdFx0XHQpLFxyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyByZWR1Y2UoYWN0aW9uczogcmVhZG9ubHkgQWN0aW9uW10pOiByZWFkb25seSBBY3Rpb25bXSB7XHJcblx0XHRyZXR1cm4gQWN0aW9uSGVscGVyLmNvbWJpbmVBY3Rpb25zPEF0dGFjaGluZ0VuY2hhbnRtZW50QWN0aW9uPihcclxuXHRcdFx0YWN0aW9ucyxcclxuXHRcdFx0KHByZXZpb3VzLCBjdXJyZW50KSA9PiB0aGlzLnNob3VsZE1lcmdlQWN0aW9ucyhwcmV2aW91cywgY3VycmVudCksXHJcblx0XHRcdChwcmV2aW91cywgY3VycmVudCkgPT4gdGhpcy5tZXJnZUFjdGlvbnMocHJldmlvdXMsIGN1cnJlbnQpLFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2hvdWxkTWVyZ2VBY3Rpb25zKHByZXZpb3VzQWN0aW9uOiBBY3Rpb24sIGN1cnJlbnRBY3Rpb246IEFjdGlvbik6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRwcmV2aW91c0FjdGlvbiBpbnN0YW5jZW9mIEF0dGFjaGluZ0VuY2hhbnRtZW50QWN0aW9uICYmXHJcblx0XHRcdGN1cnJlbnRBY3Rpb24gaW5zdGFuY2VvZiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvblxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IHByZXYgPSBwcmV2aW91c0FjdGlvbiBhcyBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbjtcclxuXHRcdFx0Y29uc3QgY3VyciA9IGN1cnJlbnRBY3Rpb24gYXMgQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb247XHJcblx0XHRcdGlmIChwcmV2Lm9yaWdpbklkID09PSBjdXJyLm9yaWdpbklkICYmIHByZXYuZW5jaGFudG1lbnRDYXJkSWQgPT09IGN1cnIuZW5jaGFudG1lbnRDYXJkSWQpIHtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHQocHJldmlvdXNBY3Rpb24gaW5zdGFuY2VvZiBDYXJkVGFyZ2V0QWN0aW9uIHx8IHByZXZpb3VzQWN0aW9uIGluc3RhbmNlb2YgUG93ZXJUYXJnZXRBY3Rpb24pICYmXHJcblx0XHRcdGN1cnJlbnRBY3Rpb24gaW5zdGFuY2VvZiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvblxyXG5cdFx0KSB7XHJcblx0XHRcdC8vIC8vIGNvbnNvbGUubG9nKCdtZXJnaW5nIGVuY2hhbnRtZW50IGludG8gdGFyZ2V0PycsIHByZXZpb3VzQWN0aW9uLCBjdXJyZW50QWN0aW9uKTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHByZXZpb3VzQWN0aW9uLm9yaWdpbklkID09PSBjdXJyZW50QWN0aW9uLm9yaWdpbklkICYmXHJcblx0XHRcdFx0aXNFcXVhbChwcmV2aW91c0FjdGlvbi50YXJnZXRJZHMsIGN1cnJlbnRBY3Rpb24udGFyZ2V0SWRzKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHQvLyAvLyBjb25zb2xlLmxvZygnbWVyZ2luZyBlbmNoYW50bWVudCBpbnRvIHRhcmdldCcsIHByZXZpb3VzQWN0aW9uLCBjdXJyZW50QWN0aW9uKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtZXJnZUFjdGlvbnMoXHJcblx0XHRwcmV2aW91c0FjdGlvbjogQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb24gfCBDYXJkVGFyZ2V0QWN0aW9uIHwgUG93ZXJUYXJnZXRBY3Rpb24sXHJcblx0XHRjdXJyZW50QWN0aW9uOiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbixcclxuXHQpOiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbiB7XHJcblx0XHRjb25zdCB0YXJnZXRJZHMgPVxyXG5cdFx0XHRwcmV2aW91c0FjdGlvbiBpbnN0YW5jZW9mIEF0dGFjaGluZ0VuY2hhbnRtZW50QWN0aW9uXHJcblx0XHRcdFx0PyB1bmlxKFsuLi51bmlxKHByZXZpb3VzQWN0aW9uLnRhcmdldElkcyB8fCBbXSksIC4uLnVuaXEoY3VycmVudEFjdGlvbi50YXJnZXRJZHMgfHwgW10pXSlcclxuXHRcdFx0XHQ6IHVuaXEoY3VycmVudEFjdGlvbi50YXJnZXRJZHMgfHwgW10pO1xyXG5cdFx0cmV0dXJuIEF0dGFjaGluZ0VuY2hhbnRtZW50QWN0aW9uLmNyZWF0ZShcclxuXHRcdFx0e1xyXG5cdFx0XHRcdHRpbWVzdGFtcDogcHJldmlvdXNBY3Rpb24udGltZXN0YW1wLFxyXG5cdFx0XHRcdGluZGV4OiBwcmV2aW91c0FjdGlvbi5pbmRleCxcclxuXHRcdFx0XHRlbnRpdGllczogY3VycmVudEFjdGlvbi5lbnRpdGllcyxcclxuXHRcdFx0XHRvcmlnaW5JZDogY3VycmVudEFjdGlvbi5vcmlnaW5JZCxcclxuXHRcdFx0XHRlbmNoYW50bWVudENhcmRJZDogY3VycmVudEFjdGlvbi5lbmNoYW50bWVudENhcmRJZCxcclxuXHRcdFx0XHR0YXJnZXRJZHMsXHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuYWxsQ2FyZHMsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iXX0=