@firestone-hs/replay-parser
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.
83 lines • 14.9 kB
JavaScript
import { GameTag, Zone } from '@firestone-hs/reference-data';
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 { deepEqual } from '../../utils';
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 &&
deepEqual(previousAction.targetIds ?? [], currentAction.targetIds ?? [])) {
// // console.log('merging enchantment into target', previousAction, currentAction);
return true;
}
}
return false;
}
mergeActions(previousAction, currentAction) {
const targetIds = previousAction instanceof AttachingEnchantmentAction
? [...(previousAction.targetIds ?? []), ...(currentAction.targetIds ?? [])].filter((id, index, self) => self.indexOf(id) === index)
: (currentAction.targetIds ?? []).filter((id, index, self) => self.indexOf(id) === index);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoaW5nLWVuY2hhbnRtZW50LXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcGxheS1wYXJzZXIvc3JjL2xpYi9zZXJ2aWNlcy9hY3Rpb24vYXR0YWNoaW5nLWVuY2hhbnRtZW50LXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sT0FBTywwQkFBMEI7SUFDdEMsWUFDa0IsUUFBeUIsRUFDekIsTUFBMEI7UUFEMUIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7SUFDekMsQ0FBQztJQUVHLE9BQU8sQ0FBQyxJQUFpQjtRQUMvQixPQUFPLElBQUksWUFBWSxvQkFBb0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUcsQ0FBQztJQUVNLEtBQUssQ0FDWCxJQUEwQixFQUMxQixXQUFtQixFQUNuQixvQkFBeUMsRUFDekMsT0FBK0I7UUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JB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RUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FDL0M7WUFDRixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQzVGLE9BQU8sMEJBQTBCLENBQUMsTUFBTSxDQUN2QztZQUNDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7WUFDM0IsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO1lBQ2hDLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUTtZQUNoQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsaUJBQWlCO1lBQ2xELFNBQVM7U0FDVCxFQUNELElBQUksQ0FBQyxRQUFRLENBQ2IsQ0FBQztJQUNILENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWVUYWcsIFpvbmUgfSBmcm9tICdAZmlyZXN0b25lLWhzL3JlZmVyZW5jZS1kYXRhJztcclxuaW1wb3J0IHsgTWFwIH0gZnJvbSAnaW1tdXRhYmxlJztcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9hY3Rpb24nO1xyXG5pbXBvcnQgeyBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpb24vYXR0YWNoaW5nLWVuY2hhbnRtZW50LWFjdGlvbic7XHJcbmltcG9ydCB7IENhcmRUYXJnZXRBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uL2NhcmQtdGFyZ2V0LWFjdGlvbic7XHJcbmltcG9ydCB7IFBvd2VyVGFyZ2V0QWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGlvbi9wb3dlci10YXJnZXQtYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dhbWUvZW50aXR5JztcclxuaW1wb3J0IHsgSGlzdG9yeUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlzdG9yeS9oaXN0b3J5LWl0ZW0nO1xyXG5pbXBvcnQgeyBUYWdDaGFuZ2VIaXN0b3J5SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9oaXN0b3J5L3RhZy1jaGFuZ2UtaGlzdG9yeS1pdGVtJztcclxuaW1wb3J0IHsgQWN0aW9uUGFyc2VyQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQWxsQ2FyZHNTZXJ2aWNlIH0gZnJvbSAnLi4vYWxsLWNhcmRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3Rpb25IZWxwZXIgfSBmcm9tICcuL2FjdGlvbi1oZWxwZXInO1xyXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICcuL3BhcnNlcic7XHJcblxyXG5leHBvcnQgY2xhc3MgQXR0YWNoaW5nRW5jaGFudG1lbnRQYXJzZXIgaW1wbGVtZW50cyBQYXJzZXIge1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBhbGxDYXJkczogQWxsQ2FyZHNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBjb25maWc6IEFjdGlvblBhcnNlckNvbmZpZyxcclxuXHQpIHt9XHJcblxyXG5cdHB1YmxpYyBhcHBsaWVzKGl0ZW06IEhpc3RvcnlJdGVtKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gaXRlbSBpbnN0YW5jZW9mIFRhZ0NoYW5nZUhpc3RvcnlJdGVtICYmIGl0ZW0udGFnLnRhZyA9PT0gR2FtZVRhZy5aT05FICYmIGl0ZW0udGFnLnZhbHVlID09PSBab25lLlBMQVk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcGFyc2UoXHJcblx0XHRpdGVtOiBUYWdDaGFuZ2VIaXN0b3J5SXRlbSxcclxuXHRcdGN1cnJlbnRUdXJuOiBudW1iZXIsXHJcblx0XHRlbnRpdGllc0JlZm9yZUFjdGlvbjogTWFwPG51bWJlciwgRW50aXR5PixcclxuXHRcdGhpc3Rvcnk6IHJlYWRvbmx5IEhpc3RvcnlJdGVtW10sXHJcblx0KTogQWN0aW9uW10ge1xyXG5cdFx0aWYgKCF0aGlzLmNvbmZpZy5zaG93RW5jaGFudG1lbnRzKSB7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBlbnRpdHlJZCA9IGl0ZW0udGFnLmVudGl0eTtcclxuXHRcdGNvbnN0IGVudGl0eSA9IGVudGl0aWVzQmVmb3JlQWN0aW9uLmdldChlbnRpdHlJZCk7XHJcblx0XHRpZiAoIWVudGl0eSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHQvLyBTb21lIHNwZWNpZmljIHN0dWZmIGZvciBCYXR0bGVncm91bmRzLiBOb3Qgc3VwZXIgY2xlYW5cclxuXHRcdGlmIChbJ1RCX0JhY29uU2hvcF84UF9QbGF5ZXJFJywgJ1RCX0JhY29uU2hvcF8xUF9QbGF5ZXJFJ10uaW5kZXhPZihlbnRpdHkuY2FyZElEKSAhPT0gLTEpIHtcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGF0dGFjaGVkVG9FbnRpdHlJZCA9IGVudGl0eS5nZXRUYWcoR2FtZVRhZy5BVFRBQ0hFRCk7XHJcblx0XHRpZiAoIWF0dGFjaGVkVG9FbnRpdHlJZCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBjcmVhdG9ySWQgPSBlbnRpdHkuZ2V0VGFnKEdhbWVUYWcuQ1JFQVRPUik7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0QXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHRpbWVzdGFtcDogaXRlbS50aW1lc3RhbXAsXHJcblx0XHRcdFx0XHRpbmRleDogaXRlbS5pbmRleCxcclxuXHRcdFx0XHRcdG9yaWdpbklkOiBjcmVhdG9ySWQsXHJcblx0XHRcdFx0XHQvLyBFbmNoYW50bWVudHMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBkdXBsaWNhdGVkIHNvIHdlIGhhdmUgYSAxLTEgbWFwcGluZ1xyXG5cdFx0XHRcdFx0Ly8gd2l0aCB0aGUgY2FyZCB0aGF0IGlzIGVuY2hhbnRlZFxyXG5cdFx0XHRcdFx0ZW5jaGFudG1lbnRDYXJkSWQ6IGVudGl0eS5jYXJkSUQsXHJcblx0XHRcdFx0XHR0YXJnZXRJZHM6IFthdHRhY2hlZFRvRW50aXR5SWRdLFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdFx0KSxcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcmVkdWNlKGFjdGlvbnM6IHJlYWRvbmx5IEFjdGlvbltdKTogcmVhZG9ubHkgQWN0aW9uW10ge1xyXG5cdFx0cmV0dXJuIEFjdGlvbkhlbHBlci5jb21iaW5lQWN0aW9uczxBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbj4oXHJcblx0XHRcdGFjdGlvbnMsXHJcblx0XHRcdChwcmV2aW91cywgY3VycmVudCkgPT4gdGhpcy5zaG91bGRNZXJnZUFjdGlvbnMocHJldmlvdXMsIGN1cnJlbnQpLFxyXG5cdFx0XHQocHJldmlvdXMsIGN1cnJlbnQpID0+IHRoaXMubWVyZ2VBY3Rpb25zKHByZXZpb3VzLCBjdXJyZW50KSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNob3VsZE1lcmdlQWN0aW9ucyhwcmV2aW91c0FjdGlvbjogQWN0aW9uLCBjdXJyZW50QWN0aW9uOiBBY3Rpb24pOiBib29sZWFuIHtcclxuXHRcdGlmIChcclxuXHRcdFx0cHJldmlvdXNBY3Rpb24gaW5zdGFuY2VvZiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbiAmJlxyXG5cdFx0XHRjdXJyZW50QWN0aW9uIGluc3RhbmNlb2YgQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb25cclxuXHRcdCkge1xyXG5cdFx0XHRjb25zdCBwcmV2ID0gcHJldmlvdXNBY3Rpb24gYXMgQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb247XHJcblx0XHRcdGNvbnN0IGN1cnIgPSBjdXJyZW50QWN0aW9uIGFzIEF0dGFjaGluZ0VuY2hhbnRtZW50QWN0aW9uO1xyXG5cdFx0XHRpZiAocHJldi5vcmlnaW5JZCA9PT0gY3Vyci5vcmlnaW5JZCAmJiBwcmV2LmVuY2hhbnRtZW50Q2FyZElkID09PSBjdXJyLmVuY2hhbnRtZW50Q2FyZElkKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0KHByZXZpb3VzQWN0aW9uIGluc3RhbmNlb2YgQ2FyZFRhcmdldEFjdGlvbiB8fCBwcmV2aW91c0FjdGlvbiBpbnN0YW5jZW9mIFBvd2VyVGFyZ2V0QWN0aW9uKSAmJlxyXG5cdFx0XHRjdXJyZW50QWN0aW9uIGluc3RhbmNlb2YgQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb25cclxuXHRcdCkge1xyXG5cdFx0XHQvLyAvLyBjb25zb2xlLmxvZygnbWVyZ2luZyBlbmNoYW50bWVudCBpbnRvIHRhcmdldD8nLCBwcmV2aW91c0FjdGlvbiwgY3VycmVudEFjdGlvbik7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRwcmV2aW91c0FjdGlvbi5vcmlnaW5JZCA9PT0gY3VycmVudEFjdGlvbi5vcmlnaW5JZCAmJlxyXG5cdFx0XHRcdGRlZXBFcXVhbChwcmV2aW91c0FjdGlvbi50YXJnZXRJZHMgPz8gW10sIGN1cnJlbnRBY3Rpb24udGFyZ2V0SWRzID8/IFtdKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHQvLyAvLyBjb25zb2xlLmxvZygnbWVyZ2luZyBlbmNoYW50bWVudCBpbnRvIHRhcmdldCcsIHByZXZpb3VzQWN0aW9uLCBjdXJyZW50QWN0aW9uKTtcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtZXJnZUFjdGlvbnMoXHJcblx0XHRwcmV2aW91c0FjdGlvbjogQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb24gfCBDYXJkVGFyZ2V0QWN0aW9uIHwgUG93ZXJUYXJnZXRBY3Rpb24sXHJcblx0XHRjdXJyZW50QWN0aW9uOiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbixcclxuXHQpOiBBdHRhY2hpbmdFbmNoYW50bWVudEFjdGlvbiB7XHJcblx0XHRjb25zdCB0YXJnZXRJZHMgPVxyXG5cdFx0XHRwcmV2aW91c0FjdGlvbiBpbnN0YW5jZW9mIEF0dGFjaGluZ0VuY2hhbnRtZW50QWN0aW9uXHJcblx0XHRcdFx0PyBbLi4uKHByZXZpb3VzQWN0aW9uLnRhcmdldElkcyA/PyBbXSksIC4uLihjdXJyZW50QWN0aW9uLnRhcmdldElkcyA/PyBbXSldLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KGlkLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKGlkKSA9PT0gaW5kZXgsXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdFx0OiAoY3VycmVudEFjdGlvbi50YXJnZXRJZHMgPz8gW10pLmZpbHRlcigoaWQsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YoaWQpID09PSBpbmRleCk7XHJcblx0XHRyZXR1cm4gQXR0YWNoaW5nRW5jaGFudG1lbnRBY3Rpb24uY3JlYXRlKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0dGltZXN0YW1wOiBwcmV2aW91c0FjdGlvbi50aW1lc3RhbXAsXHJcblx0XHRcdFx0aW5kZXg6IHByZXZpb3VzQWN0aW9uLmluZGV4LFxyXG5cdFx0XHRcdGVudGl0aWVzOiBjdXJyZW50QWN0aW9uLmVudGl0aWVzLFxyXG5cdFx0XHRcdG9yaWdpbklkOiBjdXJyZW50QWN0aW9uLm9yaWdpbklkLFxyXG5cdFx0XHRcdGVuY2hhbnRtZW50Q2FyZElkOiBjdXJyZW50QWN0aW9uLmVuY2hhbnRtZW50Q2FyZElkLFxyXG5cdFx0XHRcdHRhcmdldElkcyxcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5hbGxDYXJkcyxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiJdfQ==