@firestone-hs/replay-parser
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.9.
80 lines • 11.3 kB
JavaScript
import { GameTag } from '@firestone-hs/reference-data';
import { Map } from 'immutable';
export class Entity {
constructor() {
this.tags = Map();
}
static create(base, newAttributes) {
// Merge tags
const newTags = newAttributes && newAttributes.tags ? newAttributes.tags : Map();
const tags = base.tags ? base.tags.merge(newTags) : newTags;
const newEntity = Object.assign(new Entity(), base, newAttributes, { tags });
return newEntity;
}
static fromJS(base) {
const tags = Map(base.tags);
return Object.assign(new Entity(), base, {
tags: tags,
});
}
static default(card) {
let tags = Map();
for (const strTag of card?.mechanics ?? []) {
const tag = GameTag[strTag];
if (tag) {
tags = tags.set(strTag, 1);
}
}
return Entity.create({
cardID: card.id,
tags: tags,
});
}
getCardType() {
return this.getTag(GameTag.CARDTYPE);
}
getZone() {
return this.getTag(GameTag.ZONE);
}
getTag(tag) {
return !this.tags ? -1 : this.tags.get(GameTag[tag]);
}
isRevealed() {
// There are many tags that are set only when ShowEntity triggers. This is only
// one of the possible choices
const revealed = (this.getTag(GameTag.COST) && this.getTag(GameTag.COST) !== -1) ||
// For some reasons it happens that the cost is not always set?
(this.getTag(GameTag.CARDTYPE) && this.getTag(GameTag.CARDTYPE) !== -1);
// // console.log('revealed', revealed, this.id, this.cardID, this.tags.toJS());
return revealed;
}
zone() {
return this.getTag(GameTag.ZONE);
}
updateDamage(damage) {
const base = this;
return Object.assign(new Entity(), this, { damageForThisAction: damage });
}
update(definition) {
const newAttributes = {};
if (definition.cardID) {
newAttributes.cardID = definition.cardID;
}
if (definition.name) {
newAttributes.name = definition.name;
}
if (definition.tags) {
newAttributes.tags = definition.tags;
if (newAttributes.tags.PLAYSTATE === 8) {
newAttributes.tags.CONCEDED = 1;
}
}
return Entity.create(this, newAttributes);
}
updateTag(tag, value) {
const newTags = this.tags.set(GameTag[tag], value);
const base = this;
return Object.assign(new Entity(), base, { tags: newTags });
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwbGF5LXBhcnNlci9zcmMvbGliL21vZGVscy9nYW1lL2VudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHaEMsTUFBTSxPQUFPLE1BQU07SUFDbEI7UUFLUyxTQUFJLEdBQXdCLEdBQUcsRUFBRSxDQUFDO0lBTDVCLENBQUM7SUFPVCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQVksRUFBRSxhQUFnQztRQUNsRSxhQUFhO1FBQ2IsTUFBTSxPQUFPLEdBQXdCLGFBQWEsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0RyxNQUFNLElBQUksR0FBd0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNqRixNQUFNLFNBQVMsR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckYsT0FBTyxTQUFTLENBQUM7SUFDbEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBZ0I7UUFDcEMsTUFBTSxJQUFJLEdBQXdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFO1lBQ3hDLElBQUksRUFBRSxJQUFJO1NBQ0EsQ0FB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d0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxHQUFXLElBQUksQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHYW1lVGFnLCBSZWZlcmVuY2VDYXJkIH0gZnJvbSAnQGZpcmVzdG9uZS1ocy9yZWZlcmVuY2UtZGF0YSc7XHJcbmltcG9ydCB7IE1hcCB9IGZyb20gJ2ltbXV0YWJsZSc7XHJcbmltcG9ydCB7IEVudGl0eURlZmluaXRpb24gfSBmcm9tICcuLi9wYXJzZXIvZW50aXR5LWRlZmluaXRpb24nO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVudGl0eSB7XHJcblx0Y29uc3RydWN0b3IoKSB7fVxyXG5cclxuXHRyZWFkb25seSBpZDogbnVtYmVyO1xyXG5cdHJlYWRvbmx5IGNhcmRJRDogc3RyaW5nO1xyXG5cdHJlYWRvbmx5IGRhbWFnZUZvclRoaXNBY3Rpb246IG51bWJlcjtcclxuXHRyZWFkb25seSB0YWdzOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gTWFwKCk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgY3JlYXRlKGJhc2U6IEVudGl0eSwgbmV3QXR0cmlidXRlcz86IEVudGl0eURlZmluaXRpb24pOiBFbnRpdHkge1xyXG5cdFx0Ly8gTWVyZ2UgdGFnc1xyXG5cdFx0Y29uc3QgbmV3VGFnczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ld0F0dHJpYnV0ZXMgJiYgbmV3QXR0cmlidXRlcy50YWdzID8gbmV3QXR0cmlidXRlcy50YWdzIDogTWFwKCk7XHJcblx0XHRjb25zdCB0YWdzOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gYmFzZS50YWdzID8gYmFzZS50YWdzLm1lcmdlKG5ld1RhZ3MpIDogbmV3VGFncztcclxuXHRcdGNvbnN0IG5ld0VudGl0eTogRW50aXR5ID0gT2JqZWN0LmFzc2lnbihuZXcgRW50aXR5KCksIGJhc2UsIG5ld0F0dHJpYnV0ZXMsIHsgdGFncyB9KTtcclxuXHRcdHJldHVybiBuZXdFbnRpdHk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIGZyb21KUyhiYXNlOiBFbnRpdHlBc0pTKTogRW50aXR5IHtcclxuXHRcdGNvbnN0IHRhZ3M6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBNYXAoYmFzZS50YWdzKTtcclxuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBFbnRpdHkoKSwgYmFzZSwge1xyXG5cdFx0XHR0YWdzOiB0YWdzLFxyXG5cdFx0fSBhcyBFbnRpdHkpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHN0YXRpYyBkZWZhdWx0KGNhcmQ6IFJlZmVyZW5jZUNhcmQpOiBFbnRpdHkge1xyXG5cdFx0bGV0IHRhZ3M6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBNYXAoKTtcclxuXHRcdGZvciAoY29uc3Qgc3RyVGFnIG9mIGNhcmQ/Lm1lY2hhbmljcyA/PyBbXSkge1xyXG5cdFx0XHRjb25zdCB0YWc6IEdhbWVUYWcgPSBHYW1lVGFnW3N0clRhZ107XHJcblx0XHRcdGlmICh0YWcpIHtcclxuXHRcdFx0XHR0YWdzID0gdGFncy5zZXQoc3RyVGFnLCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIEVudGl0eS5jcmVhdGUoe1xyXG5cdFx0XHRjYXJkSUQ6IGNhcmQuaWQsXHJcblx0XHRcdHRhZ3M6IHRhZ3MsXHJcblx0XHR9IGFzIEVudGl0eSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Q2FyZFR5cGUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRUYWcoR2FtZVRhZy5DQVJEVFlQRSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0Wm9uZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLmdldFRhZyhHYW1lVGFnLlpPTkUpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFRhZyh0YWc6IEdhbWVUYWcpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuICF0aGlzLnRhZ3MgPyAtMSA6IHRoaXMudGFncy5nZXQoR2FtZVRhZ1t0YWddKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBpc1JldmVhbGVkKCk6IGJvb2xlYW4ge1xyXG5cdFx0Ly8gVGhlcmUgYXJlIG1hbnkgdGFncyB0aGF0IGFyZSBzZXQgb25seSB3aGVuIFNob3dFbnRpdHkgdHJpZ2dlcnMuIFRoaXMgaXMgb25seVxyXG5cdFx0Ly8gb25lIG9mIHRoZSBwb3NzaWJsZSBjaG9pY2VzXHJcblx0XHRjb25zdCByZXZlYWxlZCA9XHJcblx0XHRcdCh0aGlzLmdldFRhZyhHYW1lVGFnLkNPU1QpICYmIHRoaXMuZ2V0VGFnKEdhbWVUYWcuQ09TVCkgIT09IC0xKSB8fFxyXG5cdFx0XHQvLyBGb3Igc29tZSByZWFzb25zIGl0IGhhcHBlbnMgdGhhdCB0aGUgY29zdCBpcyBub3QgYWx3YXlzIHNldD9cclxuXHRcdFx0KHRoaXMuZ2V0VGFnKEdhbWVUYWcuQ0FSRFRZUEUpICYmIHRoaXMuZ2V0VGFnKEdhbWVUYWcuQ0FSRFRZUEUpICE9PSAtMSk7XHJcblx0XHQvLyAvLyBjb25zb2xlLmxvZygncmV2ZWFsZWQnLCByZXZlYWxlZCwgdGhpcy5pZCwgdGhpcy5jYXJkSUQsIHRoaXMudGFncy50b0pTKCkpO1xyXG5cdFx0cmV0dXJuIHJldmVhbGVkO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHpvbmUoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLmdldFRhZyhHYW1lVGFnLlpPTkUpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHVwZGF0ZURhbWFnZShkYW1hZ2U6IG51bWJlcik6IEVudGl0eSB7XHJcblx0XHRjb25zdCBiYXNlOiBFbnRpdHkgPSB0aGlzO1xyXG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IEVudGl0eSgpLCB0aGlzLCB7IGRhbWFnZUZvclRoaXNBY3Rpb246IGRhbWFnZSB9KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB1cGRhdGUoZGVmaW5pdGlvbjogRW50aXR5RGVmaW5pdGlvbik6IEVudGl0eSB7XHJcblx0XHRjb25zdCBuZXdBdHRyaWJ1dGVzOiBhbnkgPSB7fTtcclxuXHRcdGlmIChkZWZpbml0aW9uLmNhcmRJRCkge1xyXG5cdFx0XHRuZXdBdHRyaWJ1dGVzLmNhcmRJRCA9IGRlZmluaXRpb24uY2FyZElEO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGRlZmluaXRpb24ubmFtZSkge1xyXG5cdFx0XHRuZXdBdHRyaWJ1dGVzLm5hbWUgPSBkZWZpbml0aW9uLm5hbWU7XHJcblx0XHR9XHJcblx0XHRpZiAoZGVmaW5pdGlvbi50YWdzKSB7XHJcblx0XHRcdG5ld0F0dHJpYnV0ZXMudGFncyA9IGRlZmluaXRpb24udGFncztcclxuXHRcdFx0aWYgKG5ld0F0dHJpYnV0ZXMudGFncy5QTEFZU1RBVEUgPT09IDgpIHtcclxuXHRcdFx0XHRuZXdBdHRyaWJ1dGVzLnRhZ3MuQ09OQ0VERUQgPSAxO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gRW50aXR5LmNyZWF0ZSh0aGlzLCBuZXdBdHRyaWJ1dGVzKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB1cGRhdGVUYWcodGFnOiBHYW1lVGFnLCB2YWx1ZTogbnVtYmVyKTogRW50aXR5IHtcclxuXHRcdGNvbnN0IG5ld1RhZ3M6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSB0aGlzLnRhZ3Muc2V0KEdhbWVUYWdbdGFnXSwgdmFsdWUpO1xyXG5cdFx0Y29uc3QgYmFzZTogRW50aXR5ID0gdGhpcztcclxuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBFbnRpdHkoKSwgYmFzZSwgeyB0YWdzOiBuZXdUYWdzIH0pO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlBc0pTIHtcclxuXHRyZWFkb25seSBpZDogbnVtYmVyO1xyXG5cdHJlYWRvbmx5IGNhcmRJRDogc3RyaW5nO1xyXG5cdHJlYWRvbmx5IGRhbWFnZUZvclRoaXNBY3Rpb246IG51bWJlcjtcclxuXHRyZWFkb25seSB0YWdzOiB7IFt0YWdOYW1lOiBzdHJpbmddOiBudW1iZXIgfTtcclxufVxyXG4iXX0=