{"version":3,"file":"firestone-hs-replay-parser.mjs","sources":["../../../projects/replay-parser/src/lib/models/action-parser-config.ts","../../../projects/replay-parser/src/lib/models/game/entity.ts","../../../projects/replay-parser/src/lib/models/game/player-entity.ts","../../../projects/replay-parser/src/lib/utils.ts","../../../projects/replay-parser/src/lib/services/action/action-helper.ts","../../../projects/replay-parser/src/lib/models/action/action.ts","../../../projects/replay-parser/src/lib/models/action/action-button-used-action.ts","../../../projects/replay-parser/src/lib/models/action/attaching-enchantment-action.ts","../../../projects/replay-parser/src/lib/models/action/attack-action.ts","../../../projects/replay-parser/src/lib/models/action/battlegrounds/bacon-battle-over-action.ts","../../../projects/replay-parser/src/lib/models/action/battlegrounds/bacon-board-visual-state-action.ts","../../../projects/replay-parser/src/lib/models/action/battlegrounds/bacon-opponent-revealed-action.ts","../../../projects/replay-parser/src/lib/models/action/card-burn-action.ts","../../../projects/replay-parser/src/lib/models/action/card-discard-action.ts","../../../projects/replay-parser/src/lib/models/action/card-draw-action.ts","../../../projects/replay-parser/src/lib/models/action/card-played-from-hand-action.ts","../../../projects/replay-parser/src/lib/models/action/card-target-action.ts","../../../projects/replay-parser/src/lib/models/action/damage.ts","../../../projects/replay-parser/src/lib/models/action/damage-action.ts","../../../projects/replay-parser/src/lib/models/action/discover-action.ts","../../../projects/replay-parser/src/lib/models/action/discovery-pick-action.ts","../../../projects/replay-parser/src/lib/models/action/end-game-action.ts","../../../projects/replay-parser/src/lib/models/action/fatigue-damage-action.ts","../../../projects/replay-parser/src/lib/models/action/healing-action.ts","../../../projects/replay-parser/src/lib/models/action/location-activated-action.ts","../../../projects/replay-parser/src/lib/models/action/minion-death-action.ts","../../../projects/replay-parser/src/lib/models/action/mulligan-card-action.ts","../../../projects/replay-parser/src/lib/models/action/mulligan-card-choice-action.ts","../../../projects/replay-parser/src/lib/models/action/options-action.ts","../../../projects/replay-parser/src/lib/models/action/power-target-action.ts","../../../projects/replay-parser/src/lib/models/action/quest-completed-action.ts","../../../projects/replay-parser/src/lib/models/action/secret-played-from-hand-action.ts","../../../projects/replay-parser/src/lib/models/action/secret-revealed-action.ts","../../../projects/replay-parser/src/lib/models/action/start-turn-action.ts","../../../projects/replay-parser/src/lib/models/action/summon-action.ts","../../../projects/replay-parser/src/lib/models/action/trade-action.ts","../../../projects/replay-parser/src/lib/models/game/turn.ts","../../../projects/replay-parser/src/lib/models/game/action-turn.ts","../../../projects/replay-parser/src/lib/models/game/game.ts","../../../projects/replay-parser/src/lib/models/game/game-entity.ts","../../../projects/replay-parser/src/lib/models/game/game-helper.ts","../../../projects/replay-parser/src/lib/models/game/mulligan-turn.ts","../../../projects/replay-parser/src/lib/models/history/history-item.ts","../../../projects/replay-parser/src/lib/models/history/action-history-item.ts","../../../projects/replay-parser/src/lib/models/history/change-entity-history-item.ts","../../../projects/replay-parser/src/lib/models/history/choices-history-item.ts","../../../projects/replay-parser/src/lib/models/history/chosen-entities-history-item.ts","../../../projects/replay-parser/src/lib/models/history/full-entity-history-item.ts","../../../projects/replay-parser/src/lib/models/history/game-history-item.ts","../../../projects/replay-parser/src/lib/models/history/metadata-history-item.ts","../../../projects/replay-parser/src/lib/models/history/options-history-item.ts","../../../projects/replay-parser/src/lib/models/history/player-history-item.ts","../../../projects/replay-parser/src/lib/models/history/show-entity-history-item.ts","../../../projects/replay-parser/src/lib/models/history/tag-change-history-item.ts","../../../projects/replay-parser/src/lib/models/models.ts","../../../projects/replay-parser/src/lib/services/all-cards.service.ts","../../../projects/replay-parser/src/lib/services/gamepipeline/narrator.service.ts","../../../projects/replay-parser/src/lib/services/battlegrounds-simulation/battlegrounds-simulation-parser.service.ts","../../../projects/replay-parser/src/lib/models/history/hide-entity-history-item.ts","../../../projects/replay-parser/src/lib/services/xml-parser.service.ts","../../../projects/replay-parser/src/lib/services/action/action-button-used-parser.ts","../../../projects/replay-parser/src/lib/services/action/attaching-enchantment-parser.ts","../../../projects/replay-parser/src/lib/services/action/attack-parser.ts","../../../projects/replay-parser/src/lib/services/action/battlegrounds/bacon-battle-over-parser.ts","../../../projects/replay-parser/src/lib/services/action/battlegrounds/bacon-board-visual-state-parser.ts","../../../projects/replay-parser/src/lib/services/action/battlegrounds/bacon-opponent-revealed-parser.ts","../../../projects/replay-parser/src/lib/services/action/card-burn-parser.ts","../../../projects/replay-parser/src/lib/services/action/card-discard-parser.ts","../../../projects/replay-parser/src/lib/services/action/card-draw-parser.ts","../../../projects/replay-parser/src/lib/services/action/card-played-from-hand-parser.ts","../../../projects/replay-parser/src/lib/services/action/card-target-parser.ts","../../../projects/replay-parser/src/lib/services/action/damage-parser.ts","../../../projects/replay-parser/src/lib/services/action/discover-parser.ts","../../../projects/replay-parser/src/lib/services/action/discovery-pick-parser.ts","../../../projects/replay-parser/src/lib/services/action/end-game-parser.ts","../../../projects/replay-parser/src/lib/services/action/fatigue-damage-parser.ts","../../../projects/replay-parser/src/lib/services/action/location-activated-parser.ts","../../../projects/replay-parser/src/lib/services/action/minion-death-parser.ts","../../../projects/replay-parser/src/lib/services/action/mulligan-card-choice-parser.ts","../../../projects/replay-parser/src/lib/services/action/mulligan-card-parser.ts","../../../projects/replay-parser/src/lib/services/action/options-parser.ts","../../../projects/replay-parser/src/lib/services/action/power-target-parser.ts","../../../projects/replay-parser/src/lib/services/action/quest-completed-parser.ts","../../../projects/replay-parser/src/lib/services/action/secret-played-from-hand-parser.ts","../../../projects/replay-parser/src/lib/services/action/secret-revealed-parser.ts","../../../projects/replay-parser/src/lib/services/action/start-of-mulligan-parser.ts","../../../projects/replay-parser/src/lib/services/action/start-turn-parser.ts","../../../projects/replay-parser/src/lib/services/action/summons-parser.ts","../../../projects/replay-parser/src/lib/services/action/trade-parser.ts","../../../projects/replay-parser/src/lib/services/state-processor.service.ts","../../../projects/replay-parser/src/lib/services/gamepipeline/action-parser.service.ts","../../../projects/replay-parser/src/lib/services/gamepipeline/turn-parser.service.ts","../../../projects/replay-parser/src/lib/services/image-preloader.service.ts","../../../projects/replay-parser/src/lib/services/entitiespipeline/game-population.service.ts","../../../projects/replay-parser/src/lib/services/entitiespipeline/game-state-parser.service.ts","../../../projects/replay-parser/src/lib/services/gamepipeline/game-initializer.service.ts","../../../projects/replay-parser/src/lib/services/gamepipeline/active-player-parser.service.ts","../../../projects/replay-parser/src/lib/services/gamepipeline/active-spell-parser.service.ts","../../../projects/replay-parser/src/lib/services/gamepipeline/targets-parser.service.ts","../../../projects/replay-parser/src/lib/services/gamepipeline/mulligan-parser.service.ts","../../../projects/replay-parser/src/lib/services/gamepipeline/end-game-parser.service.ts","../../../projects/replay-parser/src/lib/services/game-parser.service.ts","../../../projects/replay-parser/src/lib/services/replay-parser.module.ts","../../../projects/replay-parser/src/public-api.ts","../../../projects/replay-parser/src/firestone-hs-replay-parser.ts"],"sourcesContent":["export class ActionParserConfig {\r\n\treadonly showEnchantments: boolean = false;\r\n}\r\n","import { GameTag, ReferenceCard } from '@firestone-hs/reference-data';\r\nimport { EntityDefinition } from '../parser/entity-definition';\r\n\r\nexport class Entity {\r\n\tconstructor() {}\r\n\r\n\treadonly id: number;\r\n\treadonly cardID: string;\r\n\treadonly damageForThisAction: number;\r\n\treadonly tags: { [tagName: string]: number } = {};\r\n\r\n\tpublic static create(base: Entity, newAttributes?: EntityDefinition): Entity {\r\n\t\t// Merge tags\r\n\t\tconst newTags: { [tagName: string]: number } = newAttributes && newAttributes.tags ? newAttributes.tags : {};\r\n\t\tconst tags: { [tagName: string]: number } = base.tags ? { ...base.tags, ...newTags } : newTags;\r\n\t\tconst newEntity: Entity = Object.assign(new Entity(), base, newAttributes, { tags });\r\n\t\treturn newEntity;\r\n\t}\r\n\r\n\tpublic static default(card: ReferenceCard): Entity {\r\n\t\tlet tags: { [tagName: string]: number } = {};\r\n\t\tfor (const strTag of card?.mechanics ?? []) {\r\n\t\t\tconst tag: GameTag = GameTag[strTag];\r\n\t\t\tif (tag) {\r\n\t\t\t\ttags[strTag] = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn Entity.create({\r\n\t\t\tcardID: card.id,\r\n\t\t\ttags: tags,\r\n\t\t} as Entity);\r\n\t}\r\n\r\n\tpublic getCardType() {\r\n\t\treturn this.getTag(GameTag.CARDTYPE);\r\n\t}\r\n\r\n\tpublic getZone() {\r\n\t\treturn this.getTag(GameTag.ZONE);\r\n\t}\r\n\r\n\tpublic getTag(tag: GameTag): number {\r\n\t\treturn !this.tags ? -1 : this.tags[GameTag[tag]];\r\n\t}\r\n\r\n\tpublic isRevealed(): boolean {\r\n\t\t// There are many tags that are set only when ShowEntity triggers. This is only\r\n\t\t// one of the possible choices\r\n\t\tconst revealed =\r\n\t\t\t(this.getTag(GameTag.COST) && this.getTag(GameTag.COST) !== -1) ||\r\n\t\t\t// For some reasons it happens that the cost is not always set?\r\n\t\t\t(this.getTag(GameTag.CARDTYPE) && this.getTag(GameTag.CARDTYPE) !== -1);\r\n\t\t// // console.log('revealed', revealed, this.id, this.cardID, this.tags.toJS());\r\n\t\treturn revealed;\r\n\t}\r\n\r\n\tpublic zone(): number {\r\n\t\treturn this.getTag(GameTag.ZONE);\r\n\t}\r\n\r\n\tpublic updateDamage(damage: number): Entity {\r\n\t\tconst base: Entity = this;\r\n\t\treturn Object.assign(new Entity(), this, { damageForThisAction: damage });\r\n\t}\r\n\r\n\tpublic update(definition: EntityDefinition): Entity {\r\n\t\tconst newAttributes: any = {};\r\n\t\tif (definition.cardID) {\r\n\t\t\tnewAttributes.cardID = definition.cardID;\r\n\t\t}\r\n\t\tif (definition.name) {\r\n\t\t\tnewAttributes.name = definition.name;\r\n\t\t}\r\n\t\tif (definition.tags) {\r\n\t\t\tnewAttributes.tags = definition.tags;\r\n\t\t\tif (newAttributes.tags.PLAYSTATE === 8) {\r\n\t\t\t\tnewAttributes.tags.CONCEDED = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn Entity.create(this, newAttributes);\r\n\t}\r\n\r\n\tpublic updateTag(tag: GameTag, value: number): Entity {\r\n\t\tconst newTags: { [tagName: string]: number } = { ...this.tags, [GameTag[tag]]: value };\r\n\t\tconst base: Entity = this;\r\n\t\treturn Object.assign(new Entity(), base, { tags: newTags });\r\n\t}\r\n}\r\n","import { GameTag } from '@firestone-hs/reference-data';\r\nimport { EntityDefinition } from '../parser/entity-definition';\r\nimport { Entity } from './entity';\r\n\r\nexport class PlayerEntity extends Entity {\r\n\treadonly playerId: number;\r\n\treadonly name: string;\r\n\treadonly accountHi: string;\r\n\treadonly accountLo: string;\r\n\treadonly isMainPlayer: boolean;\r\n\r\n\tpublic static create(base: PlayerEntity, newAttributes?: EntityDefinition): PlayerEntity {\r\n\t\t// Merge tags\r\n\t\tconst newTags: { [tagName: string]: number } = newAttributes && newAttributes.tags ? newAttributes.tags : {};\r\n\t\tconst tags: { [tagName: string]: number } = base.tags ? { ...base.tags, ...newTags } : newTags;\r\n\t\tconst newEntity: PlayerEntity = Object.assign(new PlayerEntity(), base, newAttributes, { tags });\r\n\t\treturn newEntity;\r\n\t}\r\n\r\n\tpublic update(definition: EntityDefinition): PlayerEntity {\r\n\t\tconst newAttributes: any = {};\r\n\t\tif (definition.cardID) {\r\n\t\t\tnewAttributes.cardID = definition.cardID;\r\n\t\t}\r\n\t\tif (definition.name) {\r\n\t\t\tnewAttributes.name = definition.name;\r\n\t\t}\r\n\t\tif (definition.tags) {\r\n\t\t\tnewAttributes.tags = definition.tags;\r\n\t\t\tif (newAttributes.tags.PLAYSTATE === 8) {\r\n\t\t\t\tnewAttributes.tags.CONCEDED = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn PlayerEntity.create(this, newAttributes);\r\n\t}\r\n\r\n\tpublic updateDamage(damage: number): PlayerEntity {\r\n\t\tconst base: PlayerEntity = this;\r\n\t\treturn Object.assign(new PlayerEntity(), base, { damageForThisAction: damage });\r\n\t}\r\n\r\n\tpublic updateTag(tag: GameTag, value: number): PlayerEntity {\r\n\t\tconst newTags: { [tagName: string]: number } = { ...this.tags, [GameTag[tag]]: value };\r\n\t\tconst base: PlayerEntity = this;\r\n\t\treturn Object.assign(new PlayerEntity(), base, { tags: newTags });\r\n\t}\r\n}\r\n","import equal from 'deep-equal';\r\n\r\nexport const deepEqual = (a, b) =>\r\n\tequal(a, b, {\r\n\t\tstrict: false,\r\n\t});\r\n","import { GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { PlayerEntity } from '../../models/game/player-entity';\r\nimport { EntityTag } from '../../models/parser/entity-tag';\r\nimport { deepEqual } from '../../utils';\r\n\r\nexport class ActionHelper {\r\n\tpublic static getOwner(entities: Map<number, Entity>, entityId: number): PlayerEntity {\r\n\t\tconst ownerId = entityId;\r\n\t\tlet owner = entities.get(ownerId);\r\n\t\tif (!(owner instanceof PlayerEntity)) {\r\n\t\t\tconst controllerId = entities.get(entityId).getTag(GameTag.CONTROLLER);\r\n\t\t\towner = entities\r\n\t\t\t\t.filter((entity: Entity) => entity instanceof PlayerEntity)\r\n\t\t\t\t.filter((entity: PlayerEntity) => entity.playerId === controllerId)\r\n\t\t\t\t.first();\r\n\t\t}\r\n\t\treturn owner as PlayerEntity;\r\n\t}\r\n\r\n\tpublic static getCardId(\r\n\t\tentities: Map<number, Entity>,\r\n\t\tentityId: number,\r\n\t\tallEntitiesSoFar: Map<number, Entity>,\r\n\t): string {\r\n\t\tconst entity = entities.get(entityId);\r\n\t\tif (entity && entity.cardID) {\r\n\t\t\treturn entity.cardID;\r\n\t\t}\r\n\r\n\t\tif (allEntitiesSoFar) {\r\n\t\t\tconst entitySoFar = allEntitiesSoFar.get(entityId);\r\n\t\t\tif (entitySoFar && entitySoFar.cardID) {\r\n\t\t\t\treturn entitySoFar.cardID;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Otherwise, this can happen when we're targeting a player entity, which doesn't have a card id\r\n\t\tif (!(entity instanceof PlayerEntity)) {\r\n\t\t\t// Since we don't always know the entity id, it is often correct to say we don't know\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst heroEntityId = entity.getTag(GameTag.HERO_ENTITY);\r\n\t\treturn entities.get(heroEntityId).cardID;\r\n\t}\r\n\r\n\tpublic static combineActions<T extends Action>(\r\n\t\tactions: readonly Action[],\r\n\t\tshouldMerge: (a: Action, b: Action) => boolean,\r\n\t\tcombiner: (a: T, b: T) => T,\r\n\t\tshouldSwap?: (a: Action, b: Action) => boolean,\r\n\t): readonly Action[] {\r\n\t\tlet previousResult = actions;\r\n\t\tlet result: readonly Action[] = ActionHelper.doCombine(previousResult, shouldMerge, combiner, shouldSwap);\r\n\t\twhile (!deepEqual(result, previousResult)) {\r\n\t\t\tpreviousResult = result;\r\n\t\t\tresult = ActionHelper.doCombine(previousResult, shouldMerge, combiner);\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic static getTag(tags: readonly EntityTag[], name: GameTag): number {\r\n\t\tif (!tags) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst defender = tags?.find((tag) => tag.tag === name);\r\n\t\treturn defender ? defender.value : 0;\r\n\t}\r\n\r\n\tpublic static mergeIntoFirstAction<T extends Action>(first: T, second: Action, newElements: T): T {\r\n\t\tconst result = first.updateAction(newElements);\r\n\t\t// const concat = [...(first.damages || []), ...(second.damages || [])] as ReadonlyArray<Damage>;\r\n\t\tconst finalDamages = first.damages.mergeWith((prev, next) => prev + next, second.damages);\r\n\t\treturn result.updateAction({\r\n\t\t\tdamages: finalDamages,\r\n\t\t} as T) as T;\r\n\t}\r\n\r\n\tprivate static doCombine<T extends Action>(\r\n\t\tactions: readonly Action[],\r\n\t\tshouldMerge: (a: Action, b: Action) => boolean,\r\n\t\tcombiner: (a: T, b: T) => T,\r\n\t\tshouldSwap?: (a: Action, b: Action) => boolean,\r\n\t): readonly Action[] {\r\n\t\tconst result: Action[] = [];\r\n\t\tlet previousAction: Action;\r\n\t\t// // console.log('considering actions to merge', actions);\r\n\t\tfor (let i = 0; i < actions.length; i++) {\r\n\t\t\tconst currentAction = actions[i];\r\n\t\t\t// // console.log(\r\n\t\t\t// \t'reduce 150',\r\n\t\t\t// \tpreviousAction && previousAction.entities.get(150) && previousAction.entities.get(150).tags.toJS(),\r\n\t\t\t// \tcurrentAction && currentAction.entities.get(150) && currentAction.entities.get(150).tags.toJS(),\r\n\t\t\t// \tpreviousAction,\r\n\t\t\t// \tcurrentAction,\r\n\t\t\t// );\r\n\t\t\tif (shouldMerge(previousAction, currentAction)) {\r\n\t\t\t\t// // console.log('merging');\r\n\t\t\t\tconst index = result.indexOf(previousAction);\r\n\t\t\t\tpreviousAction = combiner(previousAction as T, currentAction as T);\r\n\t\t\t\t// // console.log(\r\n\t\t\t\t// \t'new previous action',\r\n\t\t\t\t// \tpreviousAction.entities.get(150) && previousAction.entities.get(150).tags.toJS(),\r\n\t\t\t\t// \tpreviousAction,\r\n\t\t\t\t// );\r\n\t\t\t\tresult[index] = previousAction;\r\n\t\t\t} else if (shouldSwap && shouldSwap(previousAction, currentAction)) {\r\n\t\t\t\t// // console.log('swapping', previousAction, currentAction);\r\n\t\t\t\tconst index = result.indexOf(previousAction);\r\n\t\t\t\tconst previousEntities = previousAction.entities;\r\n\t\t\t\tconst previousIndex = previousAction.index;\r\n\t\t\t\tconst previousTs = previousAction.timestamp;\r\n\t\t\t\tconst currentEntities = currentAction.entities;\r\n\t\t\t\tconst currentIndex = currentAction.index;\r\n\t\t\t\tconst currentTs = currentAction.timestamp;\r\n\t\t\t\tresult[index] = Object.assign(currentAction, {\r\n\t\t\t\t\tentities: previousEntities,\r\n\t\t\t\t\tindex: previousIndex,\r\n\t\t\t\t\ttimestamp: previousTs,\r\n\t\t\t\t} as Action);\r\n\t\t\t\tresult[index + 1] = Object.assign(previousAction, {\r\n\t\t\t\t\tentities: currentEntities,\r\n\t\t\t\t\tindex: currentIndex,\r\n\t\t\t\t\ttimestamp: currentTs,\r\n\t\t\t\t} as Action);\r\n\t\t\t} else {\r\n\t\t\t\t// // console.log('doing nothing');\r\n\t\t\t\tpreviousAction = currentAction;\r\n\t\t\t\tresult.push(currentAction);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// // console.log(\r\n\t\t// \t'finished',\r\n\t\t// \tresult[result.length - 1].entities.get(150) && result[result.length - 1].entities.get(150).tags.toJS(),\r\n\t\t// );\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { PlayState } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\n\r\nexport abstract class Action {\r\n\treadonly timestamp: number;\r\n\treadonly index: number;\r\n\treadonly textRaw: string;\r\n\r\n\treadonly playerId?: number;\r\n\treadonly opponentId?: number;\r\n\r\n\t// Since we want to make actions more compact and show everything at once, we store\r\n\t// this data in possibly any action\r\n\treadonly originId: number;\r\n\treadonly targetIds: readonly number[];\r\n\r\n\t// Game state information\r\n\treadonly entities: Map<number, Entity>;\r\n\treadonly crossedEntities: readonly number[] = [];\r\n\treadonly highlightedEntities: readonly number[];\r\n\treadonly activeSpell: number;\r\n\treadonly activePlayer: number;\r\n\treadonly isMulligan: boolean;\r\n\treadonly isHeroSelection: boolean;\r\n\treadonly isEndGame: boolean;\r\n\treadonly endGameStatus: PlayState;\r\n\treadonly targets: readonly [number, number][];\r\n\treadonly options: readonly number[] = [];\r\n\t// This is part of the global action, because damage actions can be merged\r\n\t// into non-damage ones\r\n\treadonly damages: Map<number, number> = Map();\r\n\r\n\tprotected abstract getInstance(): Action;\r\n\tabstract update(entities: Map<number, Entity>): Action;\r\n\t// The list of entities is useful when trying to find the name of an entity that died,\r\n\t// but whose deathrattle effect triggers and is logged in text\r\n\tabstract enrichWithText(allEntitiesSoFar: Map<number, Entity>): Action;\r\n\r\n\tconstructor(protected readonly allCards?: AllCardsService) {}\r\n\r\n\tpublic updateAction<T extends Action>(newAction: T): T {\r\n\t\treturn Object.assign(this.getInstance(), this, newAction);\r\n\t}\r\n\r\n\tprotected generateTargetsText(allEntitiesSoFar: Map<number, Entity>): string {\r\n\t\tif (!this.targetIds || this.targetIds.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst originCardId = ActionHelper.getCardId(this.entities, this.originId, allEntitiesSoFar);\r\n\t\tconst originCardName = this.allCards.getCard(originCardId).name;\r\n\t\tconst targetCardIds = this.targetIds.map((entityId) =>\r\n\t\t\tActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar),\r\n\t\t);\r\n\t\tconst cardIds = targetCardIds.map((cardId) => this.allCards.getCard(cardId));\r\n\t\tconst targetCardNames = cardIds.some((card) => !card || !card.name)\r\n\t\t\t? `${cardIds.length} cards`\r\n\t\t\t: cardIds.map((card) => card.name).join(', ');\r\n\t\tlet damageText = '';\r\n\t\tif (this.damages) {\r\n\t\t\tdamageText = this.damages\r\n\t\t\t\t.map((amount, entityId) => {\r\n\t\t\t\t\tconst entityCardId = ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar);\r\n\t\t\t\t\tconst entityCard = this.allCards.getCard(entityCardId);\r\n\t\t\t\t\treturn `${entityCard.name} takes ${amount} damage`;\r\n\t\t\t\t})\r\n\t\t\t\t.join(', ');\r\n\t\t}\r\n\t\tconst textRaw = `\\t${originCardName} targets ${targetCardNames}. \\n${damageText}`;\r\n\t\treturn textRaw;\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class ActionButtonUsedAction extends Action {\r\n\treadonly entityId: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): ActionButtonUsedAction {\r\n\t\treturn Object.assign(new ActionButtonUsedAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): ActionButtonUsedAction {\r\n\t\treturn Object.assign(new ActionButtonUsedAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): ActionButtonUsedAction {\r\n\t\tconst ownerName: string = ActionHelper.getOwner(this.entities, this.entityId).name;\r\n\t\tconst cardId: string = ActionHelper.getCardId(this.entities, this.entityId, allEntitiesSoFar);\r\n\t\tconst card = this.allCards.getCard(cardId);\r\n\t\tconst verb = this.buildVerb(card);\r\n\t\tlet actionTarget = '';\r\n\t\tif (this.targetIds && this.targetIds.length > 0) {\r\n\t\t\tconst targetCardIds = this.targetIds.map((entityId) =>\r\n\t\t\t\tActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar),\r\n\t\t\t);\r\n\t\t\tconst cardIds = targetCardIds.map((cardId) => this.allCards.getCard(cardId));\r\n\t\t\tconst targetCardNames = cardIds.some((card) => !card || !card.name)\r\n\t\t\t\t? `${cardIds.length} cards`\r\n\t\t\t\t: cardIds.map((card) => card.name).join(', ');\r\n\t\t\tactionTarget = ` on ${targetCardNames}`;\r\n\t\t}\r\n\t\tconst textRaw = `\\t${ownerName} ${verb} ${card.name}${actionTarget}`\r\n\t\t\t// Sugar for Battlegrounds\r\n\t\t\t.replace('uses Drag To Buy on', 'buys')\r\n\t\t\t.replace('uses Drag To Buy Spell on', 'buys')\r\n\t\t\t.replace('uses Drag To Sell on', 'sells');\r\n\t\treturn Object.assign(new ActionButtonUsedAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new ActionButtonUsedAction(this.allCards);\r\n\t}\r\n\r\n\tprivate buildVerb(card): string {\r\n\t\t// // console.log('building verb for', card, card.name && card.name.toLowerCase().indexOf('tavern tier'));\r\n\t\tif (!card.name) {\r\n\t\t\treturn 'uses';\r\n\t\t}\r\n\t\tif (card.name.toLowerCase().indexOf('tavern tier') !== -1) {\r\n\t\t\treturn 'upgrades to';\r\n\t\t}\r\n\t\treturn 'uses';\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { PlayerEntity } from '../game/player-entity';\r\nimport { Action } from './action';\r\nimport { HasTargets } from './has-targets';\r\n\r\nexport class AttachingEnchantmentAction extends Action implements HasTargets {\r\n\treadonly originId: number;\r\n\treadonly enchantmentCardId: string;\r\n\treadonly targetIds: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): AttachingEnchantmentAction {\r\n\t\treturn Object.assign(new AttachingEnchantmentAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): AttachingEnchantmentAction {\r\n\t\treturn Object.assign(new AttachingEnchantmentAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): AttachingEnchantmentAction {\r\n\t\tconst creatorCardId = ActionHelper.getCardId(this.entities, this.originId, allEntitiesSoFar);\r\n\t\tconst creatorCard = this.allCards.getCard(creatorCardId);\r\n\t\tconst enchantmentCard = this.allCards.getCard(this.enchantmentCardId);\r\n\t\tconst targetCardNames = this.targetIds\r\n\t\t\t.map(targetId => this.entities.get(targetId))\r\n\t\t\t// There are some weird cases where the entity is not defined in the XML itself\r\n\t\t\t.filter(targetEntity => targetEntity)\r\n\t\t\t.map(targetEntity =>\r\n\t\t\t\ttargetEntity.cardID\r\n\t\t\t\t\t? this.allCards.getCard(targetEntity.cardID).name\r\n\t\t\t\t\t: // Enchantments sometimes target the player itself, not the hero\r\n\t\t\t\t\t  (targetEntity as PlayerEntity).name,\r\n\t\t\t)\r\n\t\t\t.join(', ');\r\n\t\tconst textRaw = `\\t${creatorCard.name} enchants ${targetCardNames} with ${enchantmentCard.name}`;\r\n\t\treturn Object.assign(new AttachingEnchantmentAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new AttachingEnchantmentAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\nimport { HasTarget } from './has-target';\r\n\r\nexport class AttackAction extends Action implements HasTarget {\r\n\treadonly originId: number;\r\n\treadonly targetId: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): AttackAction {\r\n\t\treturn Object.assign(new AttackAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): AttackAction {\r\n\t\treturn Object.assign(new AttackAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): AttackAction {\r\n\t\tconst originCardId = ActionHelper.getCardId(this.entities, this.originId, allEntitiesSoFar);\r\n\t\tconst targetCardId = ActionHelper.getCardId(this.entities, this.targetId, allEntitiesSoFar);\r\n\t\tconst originCard = this.allCards.getCard(originCardId);\r\n\t\tconst targetCard = this.allCards.getCard(targetCardId);\r\n\t\tlet damageText = '';\r\n\t\tif (this.damages) {\r\n\t\t\tdamageText = this.damages\r\n\t\t\t\t.map((amount, entityId) => {\r\n\t\t\t\t\tconst entityCardId = ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar);\r\n\t\t\t\t\tconst entityCard = this.allCards.getCard(entityCardId);\r\n\t\t\t\t\treturn `${entityCard.name} takes ${amount} damage`;\r\n\t\t\t\t})\r\n\t\t\t\t.join(', ');\r\n\t\t}\r\n\t\tconst textRaw = `\\t${originCard.name} attacks ${targetCard.name}. ${damageText}`;\r\n\t\treturn Object.assign(new AttackAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new AttackAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { AllCardsService } from '../../../services/all-cards.service';\r\nimport { Entity } from '../../game/entity';\r\nimport { Action } from '../action';\r\n\r\nexport class BaconBattleOverAction extends Action {\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): BaconBattleOverAction {\r\n\t\treturn Object.assign(new BaconBattleOverAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): BaconBattleOverAction {\r\n\t\treturn Object.assign(this.getInstance(), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): BaconBattleOverAction {\r\n\t\treturn Object.assign(new BaconBattleOverAction(this.allCards), this, {\r\n\t\t\ttextRaw: 'Battle over',\r\n\t\t} as BaconBattleOverAction);\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new BaconBattleOverAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { AllCardsService } from '../../../services/all-cards.service';\r\nimport { Entity } from '../../game/entity';\r\nimport { Action } from '../action';\r\n\r\nexport class BaconBoardVisualStateAction extends Action {\r\n\treadonly newState: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): BaconBoardVisualStateAction {\r\n\t\treturn Object.assign(new BaconBoardVisualStateAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): BaconBoardVisualStateAction {\r\n\t\treturn Object.assign(this.getInstance(), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): BaconBoardVisualStateAction {\r\n\t\tconst textRaw = this.newState === 1 ? 'Recruit' : 'Combat';\r\n\t\treturn Object.assign(new BaconBoardVisualStateAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t} as BaconBoardVisualStateAction);\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new BaconBoardVisualStateAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { AllCardsService } from '../../../services/all-cards.service';\r\nimport { Entity } from '../../game/entity';\r\nimport { Action } from '../action';\r\n\r\nexport class BaconOpponentRevealedAction extends Action {\r\n\treadonly opponentIds: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): BaconOpponentRevealedAction {\r\n\t\treturn Object.assign(new BaconOpponentRevealedAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): BaconOpponentRevealedAction {\r\n\t\treturn Object.assign(this.getInstance(), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(): BaconOpponentRevealedAction {\r\n\t\treturn Object.assign(new BaconOpponentRevealedAction(this.allCards), this, {\r\n\t\t\ttextRaw: 'Opponents revealed!',\r\n\t\t} as BaconOpponentRevealedAction);\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new BaconOpponentRevealedAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class CardBurnAction extends Action {\r\n\treadonly controller: number;\r\n\treadonly burnedCardIds: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): CardBurnAction {\r\n\t\treturn Object.assign(new CardBurnAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): CardBurnAction {\r\n\t\treturn Object.assign(this.getInstance(), this, { entities });\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): CardBurnAction {\r\n\t\tconst ownerNames: string[] = this.burnedCardIds\r\n\t\t\t.map((entityId) => ActionHelper.getOwner(this.entities, entityId))\r\n\t\t\t.map((playerEntity) => {\r\n\t\t\t\tif (!playerEntity) {\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t'[card-burn-action] no player entity',\r\n\t\t\t\t\t\tplayerEntity,\r\n\t\t\t\t\t\tthis.burnedCardIds,\r\n\t\t\t\t\t\tthis.entities.get(this.burnedCardIds[0]).tags,\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t}\r\n\t\t\t\treturn playerEntity.name;\r\n\t\t\t})\r\n\t\t\t.filter((name, index, self) => self.indexOf(name) === index);\r\n\r\n\t\tif (ownerNames.length !== 1) {\r\n\t\t\tconsole.warn('[card-burn-action] Invalid grouping of cards ' + ownerNames + ', ' + this.burnedCardIds);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tconst ownerName = ownerNames[0];\r\n\t\tconst drawnCards = this.burnedCardIds\r\n\t\t\t.map((entityId) => ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar))\r\n\t\t\t.map((cardId) => this.allCards.getCard(cardId));\r\n\t\tlet drawInfo = '';\r\n\t\t// We don't have the mulligan info, so we just display the amount of cards being mulliganed\r\n\t\tif (drawnCards.some((card) => !card || !card.name)) {\r\n\t\t\tdrawInfo = `${drawnCards.length} cards`;\r\n\t\t} else {\r\n\t\t\tdrawInfo = drawnCards.map((card) => card.name).join(', ');\r\n\t\t}\r\n\r\n\t\tconst textRaw = `\\t${ownerName} burns ` + drawInfo;\r\n\t\treturn Object.assign(new CardBurnAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new CardBurnAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class CardDiscardAction extends Action {\r\n\treadonly data: readonly number[];\r\n\treadonly controller: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): CardDiscardAction {\r\n\t\treturn Object.assign(new CardDiscardAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): CardDiscardAction {\r\n\t\treturn Object.assign(this.getInstance(), this, { entities });\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): CardDiscardAction {\r\n\t\tconst playerEntity = this.data.map((entityId) => ActionHelper.getOwner(this.entities, entityId));\r\n\t\tif (!playerEntity || playerEntity.length === 0) {\r\n\t\t\tconsole.warn('[discard-action] could not find player owner', this.data);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tconst ownerNames: string[] = this.data\r\n\t\t\t.map((entityId) => ActionHelper.getOwner(this.entities, entityId))\r\n\t\t\t.map((entity) => {\r\n\t\t\t\tif (!entity) {\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t'[discard-action] no player entity',\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\tthis.data,\r\n\t\t\t\t\t\tthis.entities.get(this.data[0]).tags,\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t}\r\n\t\t\t\treturn entity.name;\r\n\t\t\t})\r\n\t\t\t.filter((name, index, self) => self.indexOf(name) === index);\r\n\t\tif (ownerNames.length !== 1) {\r\n\t\t\tconsole.warn('[discard-action] Invalid grouping of cards ' + ownerNames + ', ' + this.data);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tconst ownerName = ownerNames[0];\r\n\t\tconst discardedCards = this.data\r\n\t\t\t.map((entityId) => ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar))\r\n\t\t\t.map((cardId) => this.allCards.getCard(cardId));\r\n\t\tlet discardInfo = '';\r\n\t\tif (discardedCards.some((card) => !card || !card.name)) {\r\n\t\t\tdiscardInfo = `${discardedCards.length} cards`;\r\n\t\t} else {\r\n\t\t\tdiscardInfo = discardedCards.map((card) => card.name).join(', ');\r\n\t\t}\r\n\r\n\t\tconst textRaw = `\\t${ownerName} discards ` + discardInfo;\r\n\t\treturn Object.assign(this.getInstance(), this, { textRaw });\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new CardDiscardAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class CardDrawAction extends Action {\r\n\treadonly data: readonly number[];\r\n\treadonly controller: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): CardDrawAction {\r\n\t\treturn Object.assign(new CardDrawAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): CardDrawAction {\r\n\t\treturn Object.assign(new CardDrawAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): CardDrawAction {\r\n\t\tconst playerEntity = this.data.map((entityId) => ActionHelper.getOwner(this.entities, entityId));\r\n\t\tif (!playerEntity || playerEntity.length === 0) {\r\n\t\t\tconsole.warn('[card-draw-action] could not find player owner', this.data);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tconst ownerNames: string[] = this.data\r\n\t\t\t.map((entityId) => ActionHelper.getOwner(this.entities, entityId))\r\n\t\t\t.map((entity) => {\r\n\t\t\t\tif (!entity) {\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t'[card-draw-action] no player entity',\r\n\t\t\t\t\t\tentity,\r\n\t\t\t\t\t\tthis.data,\r\n\t\t\t\t\t\tthis.entities.get(this.data[0]).tags,\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t}\r\n\t\t\t\treturn entity.name;\r\n\t\t\t})\r\n\t\t\t.filter((name, index, self) => self.indexOf(name) === index);\r\n\t\tif (ownerNames.length !== 1) {\r\n\t\t\tconsole.warn('[card-draw-action] Invalid grouping of cards ' + ownerNames + ', ' + this.data);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tconst ownerName = ownerNames[0];\r\n\t\tconst drawnCards = this.data\r\n\t\t\t.map((entityId) => ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar))\r\n\t\t\t.map((cardId) => this.allCards.getCard(cardId));\r\n\t\tlet drawInfo = '';\r\n\t\t// We don't have the mulligan info, so we just display the amount of cards being mulliganed\r\n\t\tif (drawnCards.some((card) => !card || !card.name)) {\r\n\t\t\tdrawInfo = `${drawnCards.length} cards`;\r\n\t\t} else {\r\n\t\t\tdrawInfo = drawnCards.map((card) => card.name).join(', ');\r\n\t\t}\r\n\r\n\t\tconst textRaw = `\\t${ownerName} draws ` + drawInfo;\r\n\t\treturn Object.assign(new CardDrawAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new CardDrawAction(this.allCards);\r\n\t}\r\n}\r\n","import { CardType, GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class CardPlayedFromHandAction extends Action {\r\n\treadonly entityId: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): CardPlayedFromHandAction {\r\n\t\treturn Object.assign(new CardPlayedFromHandAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): CardPlayedFromHandAction {\r\n\t\treturn Object.assign(new CardPlayedFromHandAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): CardPlayedFromHandAction {\r\n\t\tconst ownerName: string = ActionHelper.getOwner(this.entities, this.entityId).name;\r\n\t\tconst cardEntity = this.entities.get(this.entityId);\r\n\t\tconst cardId: string = ActionHelper.getCardId(this.entities, this.entityId, allEntitiesSoFar);\r\n\t\tconst card = this.allCards.getCard(cardId);\r\n\t\tconst cardName = card ? card.name : 'one card';\r\n\t\tlet playVerb = 'plays';\r\n\t\tif (cardEntity.getTag(GameTag.CARDTYPE) === CardType.WEAPON) {\r\n\t\t\tplayVerb = 'equips';\r\n\t\t}\r\n\t\tconst targetText = super.generateTargetsText(allEntitiesSoFar);\r\n\t\tconst targetTextToDisplay = targetText && targetText.length > 0 ? `\\n${targetText}` : '';\r\n\t\tconst textRaw = `\\t${ownerName} ${playVerb} ${cardName}${targetTextToDisplay}`;\r\n\t\t// if (this.entityId === 38) {\r\n\t\t// \tconsole.warn('defile action', ownerName, cardEntity, cardId, card, cardName, targetText);\r\n\t\t// }\r\n\t\t// // console.log('enriching card played from hand action text', targetText, textRaw);\r\n\t\treturn Object.assign(new CardPlayedFromHandAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new CardPlayedFromHandAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\nimport { HasTargets } from './has-targets';\r\n\r\nexport class CardTargetAction extends Action implements HasTargets {\r\n\treadonly originId: number;\r\n\treadonly targetIds: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): CardTargetAction {\r\n\t\treturn Object.assign(new CardTargetAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): CardTargetAction {\r\n\t\treturn Object.assign(new CardTargetAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): CardTargetAction {\r\n\t\tconst originCardId = ActionHelper.getCardId(this.entities, this.originId, allEntitiesSoFar);\r\n\t\tconst targetCardIds = this.targetIds.map(entityId =>\r\n\t\t\tActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar),\r\n\t\t);\r\n\t\tconst originCardName = this.allCards.getCard(originCardId).name;\r\n\t\tconst targetCardNames = targetCardIds\r\n\t\t\t.map(cardId => this.allCards.getCard(cardId))\r\n\t\t\t// There are some weird cases where the entity is not defined in the XML itself\r\n\t\t\t.filter(card => card)\r\n\t\t\t.map(card => card.name)\r\n\t\t\t.join(', ');\r\n\t\tconst textRaw = `\\t${originCardName} targets ${targetCardNames}`;\r\n\t\treturn Object.assign(new CardTargetAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new CardTargetAction(this.allCards);\r\n\t}\r\n}\r\n","export class Damage {\r\n\treadonly entity: number;\r\n\treadonly amount: number;\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class DamageAction extends Action {\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): DamageAction {\r\n\t\treturn Object.assign(new DamageAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): DamageAction {\r\n\t\treturn Object.assign(new DamageAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): DamageAction {\r\n\t\tconst textRaw =\r\n\t\t\t'\\t' +\r\n\t\t\tthis.damages\r\n\t\t\t\t.map((amount, entityId) => {\r\n\t\t\t\t\tconst entityCardId = ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar);\r\n\t\t\t\t\tconst entityCard = this.allCards.getCard(entityCardId);\r\n\t\t\t\t\treturn `${entityCard.name} takes ${amount} damage`;\r\n\t\t\t\t})\r\n\t\t\t\t.join(', ');\r\n\t\treturn Object.assign(new DamageAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new DamageAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { PlayerEntity } from '../game/player-entity';\r\nimport { Action } from './action';\r\n\r\nexport class DiscoverAction extends Action {\r\n\treadonly ownerId: number;\r\n\treadonly choices: readonly number[];\r\n\treadonly chosen: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): DiscoverAction {\r\n\t\treturn Object.assign(new DiscoverAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): DiscoverAction {\r\n\t\treturn Object.assign(new DiscoverAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): DiscoverAction {\r\n\t\tconst owner = this.entities.get(this.ownerId) as PlayerEntity;\r\n\r\n\t\tconst offeredCards = this.choices\r\n\t\t\t.map(entityId => ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar))\r\n\t\t\t.map(cardId => this.allCards.getCard(cardId));\r\n\t\tlet offerInfo = '';\r\n\t\t// We don't have the mulligan info, so we just display the amount of cards being mulliganed\r\n\t\tif (offeredCards.some(card => !card || !card.name)) {\r\n\t\t\tofferInfo = `${offeredCards.length} cards`;\r\n\t\t} else {\r\n\t\t\tofferInfo = offeredCards.map(card => card.name).join(', ');\r\n\t\t}\r\n\r\n\t\tconst chosenCards =\r\n\t\t\tthis.chosen &&\r\n\t\t\tthis.chosen.length > 0 &&\r\n\t\t\tthis.chosen\r\n\t\t\t\t.map(entityId => ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar))\r\n\t\t\t\t.map(cardId => this.allCards.getCard(cardId));\r\n\t\tif (!chosenCards) {\r\n\t\t\tconsole.warn(\r\n\t\t\t\t'Trying to do a discover action with an empty chosen array, aborting',\r\n\t\t\t\tthis.originId,\r\n\t\t\t\tthis.ownerId,\r\n\t\t\t\tthis.choices,\r\n\t\t\t\tthis.chosen,\r\n\t\t\t);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tlet choiceInfo;\r\n\t\t// We don't have the mulligan info, so we just display the amount of cards being mulliganed\r\n\t\tif (chosenCards.some(card => !card || !card.name)) {\r\n\t\t\tchoiceInfo = `${chosenCards.length} cards`;\r\n\t\t} else {\r\n\t\t\tchoiceInfo = chosenCards.map(card => card.name).join(', ');\r\n\t\t}\r\n\t\tconst chosenText = choiceInfo && ` and picks ${choiceInfo}`;\r\n\t\tconst textRaw = `\\t${owner.name} discovers ${offerInfo}${chosenText}`;\r\n\t\treturn Object.assign(new DiscoverAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new DiscoverAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\nexport class DiscoveryPickAction extends Action {\r\n\treadonly owner: number;\r\n\treadonly choice: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): DiscoveryPickAction {\r\n\t\treturn Object.assign(new DiscoveryPickAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): DiscoveryPickAction {\r\n\t\treturn Object.assign(new DiscoveryPickAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): DiscoveryPickAction {\r\n\t\tconst ownerEntity = ActionHelper.getOwner(this.entities, this.owner);\r\n\t\tconst choiceCardId = ActionHelper.getCardId(this.entities, this.choice, allEntitiesSoFar);\r\n\t\tlet chosenCardText = 'one card';\r\n\t\tif (choiceCardId) {\r\n\t\t\tchosenCardText = this.allCards.getCard(choiceCardId).name;\r\n\t\t}\r\n\t\tconst textRaw = `\\t${ownerEntity.name} picks ${chosenCardText}`;\r\n\t\treturn Object.assign(new DiscoveryPickAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new DiscoveryPickAction(this.allCards);\r\n\t}\r\n}\r\n","import { PlayState } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class EndGameAction extends Action {\r\n\treadonly winStatus: readonly [number, number][];\r\n\treadonly entityId: number;\r\n\treadonly opponentId: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): EndGameAction {\r\n\t\treturn Object.assign(new EndGameAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): EndGameAction {\r\n\t\treturn Object.assign(this.getInstance(), this, { entities });\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): EndGameAction {\r\n\t\tlet concededText = '';\r\n\t\tfor (const status of this.winStatus) {\r\n\t\t\tif (status[1] === PlayState.CONCEDED) {\r\n\t\t\t\tconst name = ActionHelper.getOwner(this.entities, status[0]).name;\r\n\t\t\t\tconcededText = `${name} conceded, `;\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet winText = '';\r\n\t\tfor (const status of this.winStatus) {\r\n\t\t\tif (status[1] !== PlayState.CONCEDED && status[1] !== PlayState.TIED && status[0] === this.entityId) {\r\n\t\t\t\tconst name = ActionHelper.getOwner(this.entities, this.entityId).name;\r\n\t\t\t\tconst statusString = status[1] === PlayState.WON ? 'won' : 'lost';\r\n\t\t\t\twinText = `${name} ${statusString}!`;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet textRaw = '';\r\n\t\tif (!winText && this.winStatus.some(status => status[1] === PlayState.TIED)) {\r\n\t\t\ttextRaw = 'Both players tied';\r\n\t\t} else {\r\n\t\t\ttextRaw = `${concededText}${winText}`;\r\n\t\t}\r\n\t\treturn Object.assign(this.getInstance(), this, { textRaw });\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new EndGameAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class FatigueDamageAction extends Action {\r\n\treadonly controller: number;\r\n\treadonly amount: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): FatigueDamageAction {\r\n\t\treturn Object.assign(new FatigueDamageAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): FatigueDamageAction {\r\n\t\treturn Object.assign(this.getInstance(), this, { entities });\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): FatigueDamageAction {\r\n\t\tconst playerName = ActionHelper.getOwner(this.entities, this.controller).name;\r\n\t\tconst textRaw = `\\t${playerName} takes ${this.amount} fatigue damage`;\r\n\t\treturn Object.assign(this.getInstance(), this, { textRaw });\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new FatigueDamageAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class HealingAction extends Action {\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): HealingAction {\r\n\t\treturn Object.assign(new HealingAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): HealingAction {\r\n\t\treturn Object.assign(new HealingAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): HealingAction {\r\n\t\tconst textRaw =\r\n\t\t\t'\\t' +\r\n\t\t\tthis.damages\r\n\t\t\t\t.map((amount, entityId) => {\r\n\t\t\t\t\tconst entityCardId = ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar);\r\n\t\t\t\t\tconst entityCard = this.allCards.getCard(entityCardId);\r\n\t\t\t\t\treturn `${entityCard.name} heals for ${-amount}`;\r\n\t\t\t\t})\r\n\t\t\t\t.join(', ');\r\n\t\treturn Object.assign(new HealingAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new HealingAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class LocationActivatedAction extends Action {\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): LocationActivatedAction {\r\n\t\treturn Object.assign(new LocationActivatedAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): LocationActivatedAction {\r\n\t\treturn Object.assign(new LocationActivatedAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): LocationActivatedAction {\r\n\t\tconst playerEntity = ActionHelper.getOwner(this.entities, this.originId);\r\n\t\tif (!playerEntity) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tconst ownerName: string = playerEntity.name;\r\n\t\tconst drawnCard = ActionHelper.getCardId(this.entities, this.originId, allEntitiesSoFar);\r\n\t\tconst cardName = this.allCards.getCard(drawnCard)?.name || 'Unknown Card';\r\n\t\tconst textRaw = `\\t${ownerName} activates ${cardName}`;\r\n\t\treturn Object.assign(new LocationActivatedAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new LocationActivatedAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class MinionDeathAction extends Action {\r\n\treadonly deadMinions: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): MinionDeathAction {\r\n\t\treturn Object.assign(new MinionDeathAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): MinionDeathAction {\r\n\t\treturn Object.assign(new MinionDeathAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): MinionDeathAction {\r\n\t\tconst deadMinionNames = this.deadMinions\r\n\t\t\t.map(entityId => ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar))\r\n\t\t\t.map(cardId => this.allCards.getCard(cardId))\r\n\t\t\t.map(card => card.name)\r\n\t\t\t.join(', ');\r\n\t\tconst textRaw = `\\t${deadMinionNames} die`;\r\n\t\treturn Object.assign(new MinionDeathAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new MinionDeathAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class MulliganCardAction extends Action {\r\n\treadonly playerMulligan: readonly number[];\r\n\treadonly opponentMulligan: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): MulliganCardAction {\r\n\t\treturn Object.assign(new MulliganCardAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): MulliganCardAction {\r\n\t\treturn Object.assign(new MulliganCardAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): MulliganCardAction {\r\n\t\tconst textRaw =\r\n\t\t\tthis.buildMulliganText(this.playerMulligan, allEntitiesSoFar) +\r\n\t\t\t'\\n' +\r\n\t\t\tthis.buildMulliganText(this.opponentMulligan, allEntitiesSoFar);\r\n\t\treturn Object.assign(new MulliganCardAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprivate buildMulliganText(cards: readonly number[], allEntitiesSoFar: Map<number, Entity>): string {\r\n\t\tif (!cards || cards.length === 0) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\t\tconst ownerNames: string[] = cards\r\n\t\t\t.map((entityId) => ActionHelper.getOwner(this.entities, entityId))\r\n\t\t\t.map((playerEntity) => playerEntity.name)\r\n\t\t\t.filter((name, index, self) => self.indexOf(name) === index);\r\n\t\tif (ownerNames.length !== 1) {\r\n\t\t\tconsole.warn('Invalid grouping of cards ' + ownerNames + ', ' + cards);\r\n\t\t\treturn '';\r\n\t\t}\r\n\t\tconst ownerName = ownerNames[0];\r\n\t\tconst mulliganedCards = cards\r\n\t\t\t.map((entityId) => ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar))\r\n\t\t\t.map((cardId) => this.allCards.getCard(cardId));\r\n\t\tlet mulliganInfo = '';\r\n\t\t// We don't have the mulligan info, so we just display the amount of cards being mulliganed\r\n\t\tif (mulliganedCards.some((card) => !card || !card.name)) {\r\n\t\t\tmulliganInfo = `${mulliganedCards.length} cards`;\r\n\t\t} else {\r\n\t\t\tmulliganInfo = mulliganedCards.map((card) => card.name).join(', ');\r\n\t\t}\r\n\t\tconst textRaw = `\\t${ownerName} mulligans ${mulliganInfo}`;\r\n\t\treturn textRaw;\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new MulliganCardAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class MulliganCardChoiceAction extends Action {\r\n\treadonly playerMulligan: readonly number[];\r\n\treadonly opponentMulligan: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): MulliganCardChoiceAction {\r\n\t\treturn Object.assign(new MulliganCardChoiceAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): MulliganCardChoiceAction {\r\n\t\treturn Object.assign(new MulliganCardChoiceAction(this.allCards), this, { entities });\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): MulliganCardChoiceAction {\r\n\t\tconst textRaw = '';\r\n\t\treturn Object.assign(new MulliganCardChoiceAction(this.allCards), this, { textRaw });\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new MulliganCardChoiceAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class OptionsAction extends Action {\r\n\treadonly options: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): OptionsAction {\r\n\t\treturn Object.assign(new OptionsAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): OptionsAction {\r\n\t\treturn Object.assign(this.getInstance(), this, { entities });\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): OptionsAction {\r\n\t\tconst textRaw = '';\r\n\t\treturn Object.assign(this.getInstance(), this, { textRaw });\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new OptionsAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\nimport { HasTargets } from './has-targets';\r\n\r\nexport class PowerTargetAction extends Action implements HasTargets {\r\n\treadonly originId: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): PowerTargetAction {\r\n\t\treturn Object.assign(new PowerTargetAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): PowerTargetAction {\r\n\t\treturn Object.assign(new PowerTargetAction(this.allCards), this, { entities });\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): PowerTargetAction {\r\n\t\tconst originCardId = ActionHelper.getCardId(this.entities, this.originId, allEntitiesSoFar);\r\n\t\tconst targetCardIds = this.targetIds.map(entityId =>\r\n\t\t\tActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar),\r\n\t\t);\r\n\t\tconst originCardName = this.allCards.getCard(originCardId).name;\r\n\t\tconst cardIds = targetCardIds.map(cardId => this.allCards.getCard(cardId));\r\n\t\tconst targetCardNames = cardIds.some(card => !card || !card.name)\r\n\t\t\t? `${cardIds.length} cards`\r\n\t\t\t: cardIds.map(card => card.name).join(', ');\r\n\t\tlet damageText = '';\r\n\t\tif (this.damages) {\r\n\t\t\tdamageText = this.damages\r\n\t\t\t\t.map((amount, entityId) => {\r\n\t\t\t\t\tconst entityCardId = ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar);\r\n\t\t\t\t\tconst entityCard = this.allCards.getCard(entityCardId);\r\n\t\t\t\t\treturn `${entityCard.name} takes ${amount} damage`;\r\n\t\t\t\t})\r\n\t\t\t\t.join(', ');\r\n\t\t}\r\n\t\tconst textRaw = `\\t${originCardName} targets ${targetCardNames}. ${damageText}`;\r\n\t\treturn Object.assign(new PowerTargetAction(this.allCards), this, { textRaw });\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new PowerTargetAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class QuestCompletedAction extends Action {\r\n\treadonly originId: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): QuestCompletedAction {\r\n\t\treturn Object.assign(new QuestCompletedAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): QuestCompletedAction {\r\n\t\treturn Object.assign(this.getInstance(), this, { entities });\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): QuestCompletedAction {\r\n\t\tconst questCardId = ActionHelper.getCardId(this.entities, this.originId, allEntitiesSoFar);\r\n\t\tconst questName = this.allCards.getCard(questCardId).name;\r\n\t\tconst playerName = ActionHelper.getOwner(this.entities, this.originId).name;\r\n\t\tconst textRaw = `\\t${playerName} completes ${questName}!`;\r\n\t\treturn Object.assign(this.getInstance(), this, { textRaw });\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new QuestCompletedAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class SecretPlayedFromHandAction extends Action {\r\n\treadonly entityId: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): SecretPlayedFromHandAction {\r\n\t\treturn Object.assign(new SecretPlayedFromHandAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): SecretPlayedFromHandAction {\r\n\t\treturn Object.assign(new SecretPlayedFromHandAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): SecretPlayedFromHandAction {\r\n\t\tconst owner = ActionHelper.getOwner(this.entities, this.entityId);\r\n\t\tconst ownerName: string = owner ? owner.name : '';\r\n\t\tconst cardId: string = ActionHelper.getCardId(this.entities, this.entityId, allEntitiesSoFar);\r\n\t\tconst card = this.allCards.getCard(cardId);\r\n\t\tconst textRaw = `\\t${ownerName} plays a secret! ${card.name}`;\r\n\t\treturn Object.assign(new SecretPlayedFromHandAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new SecretPlayedFromHandAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class SecretRevealedAction extends Action {\r\n\treadonly entityId: number;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): SecretRevealedAction {\r\n\t\treturn Object.assign(new SecretRevealedAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): SecretRevealedAction {\r\n\t\treturn Object.assign(new SecretRevealedAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): SecretRevealedAction {\r\n\t\tconst cardId = ActionHelper.getCardId(this.entities, this.entityId, allEntitiesSoFar);\r\n\t\tconst cardName = this.allCards.getCard(cardId).name;\r\n\t\tconst textRaw = `\\t... which triggers ${cardName}!`;\r\n\t\treturn Object.assign(new SecretRevealedAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new SecretRevealedAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class StartTurnAction extends Action {\r\n\treadonly turn: number;\r\n\treadonly isStartOfMulligan: boolean;\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): StartTurnAction {\r\n\t\treturn Object.assign(new StartTurnAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): StartTurnAction {\r\n\t\treturn Object.assign(this.getInstance(), this, { entities });\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): StartTurnAction {\r\n\t\tconst textRaw = this.isHeroSelection\r\n\t\t\t? 'Hero selection'\r\n\t\t\t: this.isMulligan\r\n\t\t\t? 'Start of mulligan'\r\n\t\t\t: 'Start of turn ' + this.turn;\r\n\t\treturn Object.assign(this.getInstance(), this, { textRaw });\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new StartTurnAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class SummonAction extends Action {\r\n\treadonly entityIds: readonly number[];\r\n\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): SummonAction {\r\n\t\treturn Object.assign(new SummonAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): SummonAction {\r\n\t\treturn Object.assign(new SummonAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): SummonAction {\r\n\t\tconst originCardId = ActionHelper.getCardId(this.entities, this.originId, allEntitiesSoFar);\r\n\t\t// // console.log('enriching summon', this.originId, originCardId);\r\n\t\tconst originCardName = this.allCards.getCard(originCardId).name;\r\n\t\tconst summonCardNames = this.entityIds\r\n\t\t\t.map(entityId => ActionHelper.getCardId(this.entities, entityId, allEntitiesSoFar))\r\n\t\t\t.map(cardId => this.allCards.getCard(cardId).name)\r\n\t\t\t.join(', ');\r\n\t\tconst textRaw = `\\t${originCardName} summons ${summonCardNames}`;\r\n\t\treturn Object.assign(new SummonAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new SummonAction(this.allCards);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { ActionHelper } from '../../services/action/action-helper';\r\nimport { AllCardsService } from '../../services/all-cards.service';\r\nimport { Entity } from '../game/entity';\r\nimport { Action } from './action';\r\n\r\nexport class TradeAction extends Action {\r\n\tconstructor(allCards: AllCardsService) {\r\n\t\tsuper(allCards);\r\n\t}\r\n\r\n\tpublic static create(newAction, allCards: AllCardsService): TradeAction {\r\n\t\treturn Object.assign(new TradeAction(allCards), newAction);\r\n\t}\r\n\r\n\tpublic update(entities: Map<number, Entity>): TradeAction {\r\n\t\treturn Object.assign(new TradeAction(this.allCards), this, {\r\n\t\t\tentities,\r\n\t\t});\r\n\t}\r\n\r\n\tpublic enrichWithText(allEntitiesSoFar: Map<number, Entity>): TradeAction {\r\n\t\tconst playerEntity = ActionHelper.getOwner(this.entities, this.originId);\r\n\t\tif (!playerEntity) {\r\n\t\t\tconsole.warn('[card-draw-action] could not find player owner', this.originId);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tconst ownerName: string = playerEntity.name;\r\n\t\tconst drawnCard = ActionHelper.getCardId(this.entities, this.originId, allEntitiesSoFar);\r\n\t\tconst cardName = this.allCards.getCard(drawnCard)?.name || 'Unknown Card';\r\n\t\tconst textRaw = `\\t${ownerName} trades ${cardName}`;\r\n\t\treturn Object.assign(new TradeAction(this.allCards), this, {\r\n\t\t\ttextRaw,\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getInstance(): Action {\r\n\t\treturn new TradeAction(this.allCards);\r\n\t}\r\n}\r\n","import { Action } from '../action/action';\r\n\r\nexport abstract class Turn {\r\n\treadonly turn: string;\r\n\treadonly timestamp: number;\r\n\treadonly index: number;\r\n\treadonly actions: readonly Action[];\r\n\r\n\tabstract update(newTurn): Turn;\r\n}\r\n","import { Turn } from './turn';\r\n\r\nexport class ActionTurn extends Turn {\r\n\treadonly activePlayer: number;\r\n\r\n\tpublic static create(base: ActionTurn): ActionTurn {\r\n\t\treturn Object.assign(new ActionTurn(), base);\r\n\t}\r\n\r\n\tpublic update(newTurn): ActionTurn {\r\n\t\treturn Object.assign(new ActionTurn(), this, newTurn);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { Entity } from './entity';\r\nimport { PlayerEntity } from './player-entity';\r\nimport { Turn } from './turn';\r\n\r\nexport class Game {\r\n\treadonly players: readonly PlayerEntity[] = [];\r\n\treadonly turns: Map<number, Turn> = Map<number, Turn>();\r\n\treadonly fullStoryRaw: string;\r\n\treadonly buildNumber: number;\r\n\treadonly gameType: number;\r\n\treadonly formatType: number;\r\n\treadonly scenarioID: number;\r\n\r\n\treadonly entitiesBeforeMulligan: Map<number, Entity> = Map();\r\n\r\n\tprivate constructor() {}\r\n\r\n\tpublic static createGame(baseGame: Game, newAttributes?: any): Game {\r\n\t\treturn Object.assign(new Game(), baseGame, newAttributes);\r\n\t}\r\n\r\n\tpublic update(base: Game): Game {\r\n\t\treturn Object.assign(new Game(), this, base);\r\n\t}\r\n\r\n\tpublic getLatestParsedState(): Map<number, Entity> {\r\n\t\tif (this.turns.size === 0 || this.turns.last().actions.length === 0) {\r\n\t\t\treturn this.entitiesBeforeMulligan;\r\n\t\t}\r\n\t\tconst lastTurn = this.turns.get(this.turns.size - 1);\r\n\t\t// // console.log('last turn', lastTurn, this.turns.toJS());\r\n\t\treturn lastTurn.actions[lastTurn.actions.length - 1].entities;\r\n\t}\r\n}\r\n","import { GameTag } from '@firestone-hs/reference-data';\r\nimport { EntityDefinition } from '../parser/entity-definition';\r\nimport { Entity } from './entity';\r\n\r\nexport class GameEntity extends Entity {\r\n\tpublic static create(base: GameEntity, newAttributes?: EntityDefinition): GameEntity {\r\n\t\t// Merge tags\r\n\t\tconst newTags: { [tagName: string]: number } = newAttributes && newAttributes.tags ? newAttributes.tags : {};\r\n\t\tconst tags: { [tagName: string]: number } = base.tags ? { ...base.tags, ...newTags } : newTags;\r\n\t\tconst newEntity: GameEntity = Object.assign(new GameEntity(), base, newAttributes, { tags });\r\n\t\treturn newEntity;\r\n\t}\r\n\r\n\tpublic update(definition: EntityDefinition): GameEntity {\r\n\t\tconst newAttributes: any = {};\r\n\t\tif (definition.cardID) {\r\n\t\t\tnewAttributes.cardID = definition.cardID;\r\n\t\t}\r\n\t\tif (definition.name) {\r\n\t\t\tnewAttributes.name = definition.name;\r\n\t\t}\r\n\t\tif (definition.tags) {\r\n\t\t\tnewAttributes.tags = definition.tags;\r\n\t\t\tif (newAttributes.tags.PLAYSTATE === 8) {\r\n\t\t\t\tnewAttributes.tags.CONCEDED = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn GameEntity.create(this, newAttributes);\r\n\t}\r\n\r\n\tpublic updateTag(tag: GameTag, value: number): GameEntity {\r\n\t\tconst newTags: { [tagName: string]: number } = { ...this.tags, [GameTag[tag]]: value };\r\n\t\tconst base: GameEntity = this;\r\n\t\treturn Object.assign(new GameEntity(), base, { tags: newTags });\r\n\t}\r\n\r\n\tpublic updateDamage(damage: number): GameEntity {\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic isBattlegrounds(): boolean {\r\n\t\treturn this.getTag(GameTag.TECH_LEVEL_MANA_GEM) === 1;\r\n\t}\r\n}\r\n","import { GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Entity } from './entity';\r\nimport { GameEntity } from './game-entity';\r\nimport { PlayerEntity } from './player-entity';\r\n\r\n// Avoid \"Lambda not supported\" error\r\n// @dynamic\r\nexport class GameHepler {\r\n\tprivate constructor() {}\r\n\r\n\tpublic static getPlayerHand(entities: Map<number, Entity>, playerId: number): readonly Entity[] {\r\n\t\treturn entities\r\n\t\t\t.filter((entity: Entity) => entity.getTag(GameTag.CONTROLLER) === playerId)\r\n\t\t\t.filter((entity: Entity) => entity.getTag(GameTag.ZONE) === Zone.HAND)\r\n\t\t\t.sortBy((entity: Entity) => entity.getTag(GameTag.ZONE_POSITION))\r\n\t\t\t.valueSeq()\r\n\t\t\t.toArray();\r\n\t}\r\n\r\n\tpublic static isPlayerEntity(entityId: number, entities: Map<number, Entity>) {\r\n\t\treturn entities.get(entityId) instanceof PlayerEntity;\r\n\t}\r\n\r\n\tpublic static getGameEntity(entities: Map<number, Entity>): Entity {\r\n\t\treturn entities\r\n\t\t\t? entities\r\n\t\t\t\t\t.valueSeq()\r\n\t\t\t\t\t.toArray()\r\n\t\t\t\t\t.find(entity => entity instanceof GameEntity)\r\n\t\t\t: null;\r\n\t}\r\n}\r\n","import { Turn } from './turn';\r\n\r\nexport class MulliganTurn extends Turn {\r\n\tpublic update(newTurn): MulliganTurn {\r\n\t\treturn Object.assign(new MulliganTurn(), this, newTurn);\r\n\t}\r\n}\r\n","export abstract class HistoryItem {\r\n\treadonly timestamp: number;\r\n\treadonly index: number;\r\n\r\n\tconstructor(timestamp: number, index: number) {\r\n\t\tthis.timestamp = timestamp;\r\n\t\tthis.index = index;\r\n\t}\r\n}\r\n","import { HistoryItem } from './history-item';\r\nimport { EnrichedTag } from '../parser/enriched-tag';\r\n\r\nexport class ActionHistoryItem extends HistoryItem {\r\n\treadonly node: EnrichedTag;\r\n\r\n\tconstructor(node: EnrichedTag, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.node = node;\r\n\t}\r\n}\r\n","import { HistoryItem } from './history-item';\r\nimport { EntityDefinition } from '../parser/entity-definition';\r\n\r\nexport class ChangeEntityHistoryItem extends HistoryItem {\r\n\treadonly entityDefintion: EntityDefinition;\r\n\r\n\tconstructor(entityDefintion: EntityDefinition, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.entityDefintion = entityDefintion;\r\n\t}\r\n}\r\n","import { HistoryItem } from './history-item';\r\nimport { Choices } from '../parser/choices';\r\n\r\nexport class ChoicesHistoryItem extends HistoryItem {\r\n\treadonly choices: Choices;\r\n\r\n\tconstructor(choices: Choices, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.choices = choices;\r\n\t}\r\n}\r\n","import { HistoryItem } from './history-item';\r\nimport { ChosenTag } from '../parser/chosen-tag';\r\n\r\nexport class ChosenEntityHistoryItem extends HistoryItem {\r\n\treadonly tag: ChosenTag;\r\n\r\n\tconstructor(tag: ChosenTag, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.tag = tag;\r\n\t}\r\n}\r\n","import { HistoryItem } from './history-item';\r\nimport { EntityDefinition } from '../parser/entity-definition';\r\n\r\nexport class FullEntityHistoryItem extends HistoryItem {\r\n\treadonly entityDefintion: EntityDefinition;\r\n\r\n\tconstructor(entityDefintion: EntityDefinition, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.entityDefintion = entityDefintion;\r\n\t}\r\n}\r\n","import { EntityDefinition } from '../parser/entity-definition';\r\nimport { HistoryItem } from './history-item';\r\n\r\nexport class GameHistoryItem extends HistoryItem {\r\n\treadonly entityDefintion: EntityDefinition;\r\n\treadonly buildNumber: number;\r\n\treadonly gameType: number;\r\n\treadonly formatType: number;\r\n\treadonly scenarioID: number;\r\n\r\n\tconstructor(entityDefintion: EntityDefinition, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.entityDefintion = entityDefintion;\r\n\t}\r\n}\r\n","import { HistoryItem } from './history-item';\r\nimport { MetaData } from '../parser/metadata';\r\n\r\nexport class MetadataHistoryItem extends HistoryItem {\r\n\treadonly meta: MetaData;\r\n\r\n\tconstructor(meta: MetaData, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.meta = meta;\r\n\t}\r\n}\r\n","import { HistoryItem } from './history-item';\r\nimport { EnrichedTag } from '../parser/enriched-tag';\r\n\r\nexport class OptionsHistoryItem extends HistoryItem {\r\n\treadonly tag: EnrichedTag;\r\n\r\n\tconstructor(tag: EnrichedTag, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.tag = tag;\r\n\t}\r\n}\r\n","import { EntityDefinition } from '../parser/entity-definition';\r\nimport { HistoryItem } from './history-item';\r\n\r\nexport class PlayerHistoryItem extends HistoryItem {\r\n\treadonly entityDefintion: EntityDefinition;\r\n\treadonly accountHi: string;\r\n\treadonly accountLo: string;\r\n\treadonly isMainPlayer: boolean;\r\n\r\n\tconstructor(\r\n\t\tentityDefintion: EntityDefinition,\r\n\t\taccountHi: string,\r\n\t\taccountLo: string,\r\n\t\tisMainPlayer: string,\r\n\t\ttimestamp: number,\r\n\t\tindex: number,\r\n\t) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.entityDefintion = entityDefintion;\r\n\t\tthis.accountHi = accountHi;\r\n\t\tthis.accountLo = accountLo;\r\n\t\tthis.isMainPlayer = isMainPlayer === 'true';\r\n\t}\r\n}\r\n","import { HistoryItem } from './history-item';\r\nimport { EntityDefinition } from '../parser/entity-definition';\r\n\r\nexport class ShowEntityHistoryItem extends HistoryItem {\r\n\treadonly entityDefintion: EntityDefinition;\r\n\r\n\tconstructor(entityDefintion: EntityDefinition, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.entityDefintion = entityDefintion;\r\n\t}\r\n}\r\n","import { HistoryItem } from './history-item';\r\nimport { EntityTag } from '../parser/entity-tag';\r\n\r\nexport class TagChangeHistoryItem extends HistoryItem {\r\n\treadonly tag: EntityTag;\r\n\r\n\tconstructor(tag: EntityTag, timestamp: number, index: number) {\r\n\t\tsuper(timestamp, index);\r\n\t\tthis.tag = tag;\r\n\t}\r\n}\r\n","/*\n * Public API Surface of replay-parser\n */\n\nexport * from './action-parser-config';\nexport * from './action/action';\nexport * from './action/action-button-used-action';\nexport * from './action/attaching-enchantment-action';\nexport * from './action/attack-action';\nexport * from './action/battlegrounds/bacon-battle-over-action';\nexport * from './action/battlegrounds/bacon-board-visual-state-action';\nexport * from './action/battlegrounds/bacon-opponent-revealed-action';\nexport * from './action/card-burn-action';\nexport * from './action/card-discard-action';\nexport * from './action/card-draw-action';\nexport * from './action/card-played-from-hand-action';\nexport * from './action/card-target-action';\nexport * from './action/damage';\nexport * from './action/damage-action';\nexport * from './action/discover-action';\nexport * from './action/discovery-pick-action';\nexport * from './action/end-game-action';\nexport * from './action/fatigue-damage-action';\nexport * from './action/has-target';\nexport * from './action/has-targets';\nexport * from './action/healing-action';\nexport * from './action/location-activated-action';\nexport * from './action/minion-death-action';\nexport * from './action/mulligan-card-action';\nexport * from './action/mulligan-card-choice-action';\nexport * from './action/options-action';\nexport * from './action/power-target-action';\nexport * from './action/quest-completed-action';\nexport * from './action/secret-played-from-hand-action';\nexport * from './action/secret-revealed-action';\nexport * from './action/start-turn-action';\nexport * from './action/summon-action';\nexport * from './action/trade-action';\nexport * from './game/action-turn';\nexport * from './game/entity';\nexport * from './game/game';\nexport * from './game/game-entity';\nexport * from './game/game-helper';\nexport * from './game/mulligan-turn';\nexport * from './game/player-entity';\nexport * from './game/turn';\nexport * from './history/action-history-item';\nexport * from './history/change-entity-history-item';\nexport * from './history/choices-history-item';\nexport * from './history/chosen-entities-history-item';\nexport * from './history/full-entity-history-item';\nexport * from './history/game-history-item';\nexport * from './history/history-item';\nexport * from './history/metadata-history-item';\nexport * from './history/options-history-item';\nexport * from './history/player-history-item';\nexport * from './history/show-entity-history-item';\nexport * from './history/tag-change-history-item';\nexport * from './parser/choices';\nexport * from './parser/chosen-tag';\nexport * from './parser/enriched-tag';\nexport * from './parser/entity-definition';\nexport * from './parser/entity-definition-attribute';\nexport * from './parser/entity-tag';\nexport * from './parser/info';\nexport * from './parser/metadata';\nexport * from './parser/option';\n","import { Injectable } from '@angular/core';\r\nimport { AllCardsService as BaseService, ReferenceCard } from '@firestone-hs/reference-data';\r\n\r\n// Here to act as cache\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class AllCardsService {\r\n\tpublic service: BaseService;\r\n\r\n\tconstructor() {\r\n\t\tthis.service = new BaseService();\r\n\t\t// We don't call it in the constructor because we want the app to be in control\r\n\t\t// of how they load the cards, and for it to be aware of when cards have been loaded\r\n\t\t// this.retrieveAllCards();\r\n\t}\r\n\r\n\t// We keep this synchronous because we ensure, in the game init pipeline, that loading cards\r\n\t// is the first thing we do\r\n\tpublic getCard(id: string, errorWhenUndefined = true): ReferenceCard {\r\n\t\treturn this.service.getCard(id, errorWhenUndefined);\r\n\t}\r\n\r\n\tpublic getCardFromDbfId(dbfId: number): ReferenceCard {\r\n\t\treturn this.service.getCardFromDbfId(dbfId);\r\n\t}\r\n\r\n\tpublic getCardsFromDbfIds(dbfIds: number[]): ReferenceCard[] {\r\n\t\treturn this.service.getCardsFromDbfIds(dbfIds);\r\n\t}\r\n\r\n\tpublic getCards(): ReferenceCard[] {\r\n\t\treturn this.service.getCards();\r\n\t}\r\n\r\n\tpublic async initializeCardsDb(version?: string): Promise<void> {\r\n\t\treturn this.service.initializeCardsDb(version);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Map } from 'immutable';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { Game } from '../../models/game/game';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class NarratorService {\r\n\tconstructor() {}\r\n\r\n\tpublic populateActionTextForLastTurn(game: Game) {\r\n\t\tlet turnsWithActions = game.turns;\r\n\t\tconst numberOfTurns = turnsWithActions.size;\r\n\t\t// // // console.log('getting turn', i, game.turns.toJS());\r\n\t\tconst turn = game.turns.get(numberOfTurns - 1);\r\n\t\tlet allEntitiesSoFar: Map<number, Entity> = Map();\r\n\t\tconst enrichedActions = turn.actions.map(action => {\r\n\t\t\ttry {\r\n\t\t\t\tallEntitiesSoFar = allEntitiesSoFar.merge(action.entities);\r\n\t\t\t\treturn action.enrichWithText(allEntitiesSoFar);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.warn('Could not enrich action with text', e, action);\r\n\t\t\t\treturn action;\r\n\t\t\t}\r\n\t\t});\r\n\t\tconst enrichedTurn = turn.update({ actions: enrichedActions });\r\n\t\tturnsWithActions = turnsWithActions.set(numberOfTurns - 1, enrichedTurn);\r\n\t\treturn Game.createGame(game, { turns: turnsWithActions } as Game);\r\n\t}\r\n\r\n\tpublic createGameStoryForLastTurn(game: Game): Game {\r\n\t\tconst allActionsInLastTurn = game.turns.last().actions;\r\n\t\tconst fullStoryRawForLastTurn: string = allActionsInLastTurn.map(action => action.textRaw).join('\\n');\r\n\t\t// // // console.log('[narrator] full story', fullStoryRaw);\r\n\t\treturn Game.createGame(game, { fullStoryRaw: game.fullStoryRaw + '\\n' + fullStoryRawForLastTurn } as Game);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CardType, GameTag, GameType, Zone } from '@firestone-hs/reference-data';\r\nimport { BoardEntity } from '@firestone-hs/simulate-bgs-battle/dist/board-entity';\r\nimport { BoardSecret } from '@firestone-hs/simulate-bgs-battle/dist/board-secret';\r\nimport { Damage, GameAction } from '@firestone-hs/simulate-bgs-battle/dist/simulation/spectator/game-action';\r\nimport { GameSample } from '@firestone-hs/simulate-bgs-battle/dist/simulation/spectator/game-sample';\r\nimport { Map } from 'immutable';\r\nimport { Game } from '../../models/game/game';\r\nimport {\r\n\tAction,\r\n\tActionParserConfig,\r\n\tActionTurn,\r\n\tAttackAction,\r\n\tDamageAction,\r\n\tEntity,\r\n\tMinionDeathAction,\r\n\tPlayerEntity,\r\n\tPowerTargetAction,\r\n\tStartTurnAction,\r\n\tSummonAction,\r\n\tTurn,\r\n} from '../../models/models';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { NarratorService } from '../gamepipeline/narrator.service';\r\nimport { ExtendedGameSample } from './extended-game-sample';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class BattlegroundsSimulationParserService {\r\n\tconstructor(\r\n\t\tprivate allCards: AllCardsService,\r\n\t\tprivate narrator: NarratorService,\r\n\t) {}\r\n\r\n\tpublic async parse(\r\n\t\tbgsSimulation: GameSample,\r\n\t\tconfig: ActionParserConfig = new ActionParserConfig(),\r\n\t): Promise<Game> {\r\n\t\tawait this.allCards.initializeCardsDb();\r\n\t\tconst bgsSimulationWithIds: ExtendedGameSample = {\r\n\t\t\t...bgsSimulation,\r\n\t\t\tplayerEntityId: bgsSimulation.actions[0].playerEntityId,\r\n\t\t\tplayerHeroPowerEntityId: 100000002,\r\n\t\t\tplayerCardId: bgsSimulation.actions[0].playerCardId,\r\n\t\t\tplayerHeroPowerCardId: bgsSimulation.actions[0].playerHeroPowerCardId,\r\n\t\t\tplayerHeroPowerUsed: bgsSimulation.actions[0].playerHeroPowerUsed,\r\n\t\t\topponentEntityId: bgsSimulation.actions[0].opponentEntityId,\r\n\t\t\topponentHeroPowerEntityId: 200000002,\r\n\t\t\topponentCardId: bgsSimulation.actions[0].opponentCardId,\r\n\t\t\topponentHeroPowerCardId: bgsSimulation.actions[0].opponentHeroPowerCardId,\r\n\t\t\topponentHeroPowerUsed: bgsSimulation.actions[0].opponentHeroPowerUsed,\r\n\t\t};\r\n\r\n\t\tconst playerEntity: PlayerEntity = this.buildPlayerEntity(bgsSimulationWithIds);\r\n\t\tconst opponentEntity: PlayerEntity = this.buildOpponentEntity(bgsSimulationWithIds);\r\n\t\tconst playerHeroPowerEntity: Entity = this.buildPlayerHeroPowerEntity(bgsSimulationWithIds, playerEntity);\r\n\t\tconst opponentHeroPowerEntity: Entity = this.buildOpponentHeroPowerEntity(bgsSimulationWithIds, opponentEntity);\r\n\t\tlet game: Game = Game.createGame({\r\n\t\t\tplayers: [playerEntity, opponentEntity] as readonly PlayerEntity[],\r\n\t\t\tturns: Map.of(\r\n\t\t\t\t0,\r\n\t\t\t\tthis.buildSingleBgsTurn(\r\n\t\t\t\t\tbgsSimulationWithIds,\r\n\t\t\t\t\tplayerEntity,\r\n\t\t\t\t\topponentEntity,\r\n\t\t\t\t\tplayerHeroPowerEntity,\r\n\t\t\t\t\topponentHeroPowerEntity,\r\n\t\t\t\t),\r\n\t\t\t),\r\n\t\t\tgameType: GameType.GT_BATTLEGROUNDS,\r\n\t\t} as Game);\r\n\t\tgame = this.narrator.populateActionTextForLastTurn(game);\r\n\t\tgame = this.narrator.createGameStoryForLastTurn(game);\r\n\t\t// console.log('built game', game, game.turns.toJS(), 'from', bgsSimulationWithIds);\r\n\t\treturn game;\r\n\t}\r\n\r\n\tprivate buildSingleBgsTurn(\r\n\t\tbgsSimulation: ExtendedGameSample,\r\n\t\tplayerEntity: PlayerEntity,\r\n\t\topponentEntity: PlayerEntity,\r\n\t\tplayerHeroPowerEntity: Entity,\r\n\t\topponentHeroPowerEntity: Entity,\r\n\t): Turn {\r\n\t\treturn ActionTurn.create({\r\n\t\t\tturn: 'battle',\r\n\t\t\tactivePlayer: undefined,\r\n\t\t\tactions: bgsSimulation.actions.map((action) =>\r\n\t\t\t\tthis.buildGameAction(action, playerEntity, opponentEntity, bgsSimulation.anomalies),\r\n\t\t\t),\r\n\t\t} as any as ActionTurn);\r\n\t}\r\n\r\n\tprivate buildGameAction(\r\n\t\taction: GameAction,\r\n\t\tplayerEntity: PlayerEntity,\r\n\t\topponentEntity: PlayerEntity,\r\n\t\tanomalies: readonly string[],\r\n\t): Action {\r\n\t\tconst damages = this.buildDamages(action.type, action.damages, playerEntity, opponentEntity);\r\n\t\tconst playerRewardEntity: Entity = this.buildPlayerRewardEntity(action, playerEntity);\r\n\t\tconst opponentRewardEntity: Entity = this.buildOpponentRewardEntity(action, opponentEntity);\r\n\t\tif (action.type === 'start-of-combat') {\r\n\t\t\tconst result = StartTurnAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\tplayerId: action.playerEntityId,\r\n\t\t\t\t\topponentId: action.opponentEntityId,\r\n\t\t\t\t\tentities: this.buildEntities(action, playerRewardEntity, opponentRewardEntity, anomalies, damages),\r\n\t\t\t\t} as StartTurnAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t\t// // console.log('built attack action', result, result.entities.toJS());\r\n\t\t\treturn result;\r\n\t\t} else if (action.type === 'player-attack') {\r\n\t\t\tconst result = AttackAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\tplayerId: action.playerEntityId,\r\n\t\t\t\t\topponentId: action.opponentEntityId,\r\n\t\t\t\t\tentities: this.buildEntities(action, playerRewardEntity, opponentRewardEntity, anomalies, damages),\r\n\t\t\t\t\toriginId: playerEntity.id,\r\n\t\t\t\t\ttargetId: opponentEntity.id,\r\n\t\t\t\t\ttargets: [[playerEntity.id, opponentEntity.id]] as readonly number[][],\r\n\t\t\t\t\tdamages: damages,\r\n\t\t\t\t} as AttackAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t\t// // console.log('built attack action', result, result.entities.toJS());\r\n\t\t\treturn result;\r\n\t\t} else if (action.type === 'opponent-attack') {\r\n\t\t\tconst result = AttackAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\tplayerId: action.playerEntityId,\r\n\t\t\t\t\topponentId: action.opponentEntityId,\r\n\t\t\t\t\tentities: this.buildEntities(action, playerRewardEntity, opponentRewardEntity, anomalies, damages),\r\n\t\t\t\t\toriginId: opponentEntity.id,\r\n\t\t\t\t\ttargetId: playerEntity.id,\r\n\t\t\t\t\ttargets: [[opponentEntity.id, playerEntity.id]] as readonly number[][],\r\n\t\t\t\t\tdamages: damages,\r\n\t\t\t\t} as AttackAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t\t// // console.log('built attack action', result, result.entities.toJS());\r\n\t\t\treturn result;\r\n\t\t} else if (action.type === 'attack') {\r\n\t\t\tconst result = AttackAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\tplayerId: action.playerEntityId,\r\n\t\t\t\t\topponentId: action.opponentEntityId,\r\n\t\t\t\t\tentities: this.buildEntities(action, playerRewardEntity, opponentRewardEntity, anomalies, damages),\r\n\t\t\t\t\toriginId: action.sourceEntityId,\r\n\t\t\t\t\ttargetId: action.targetEntityId,\r\n\t\t\t\t\ttargets: [[action.sourceEntityId, action.targetEntityId]] as readonly number[][],\r\n\t\t\t\t\tdamages: damages,\r\n\t\t\t\t} as AttackAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t\t// // console.log('built attack action', result, result.entities.toJS());\r\n\t\t\treturn result;\r\n\t\t} else if (action.type === 'damage') {\r\n\t\t\treturn DamageAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\tplayerId: action.playerEntityId,\r\n\t\t\t\t\topponentId: action.opponentEntityId,\r\n\t\t\t\t\tentities: this.buildEntities(action, playerRewardEntity, opponentRewardEntity, anomalies, damages),\r\n\t\t\t\t\tdamages: damages,\r\n\t\t\t\t} as DamageAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t} else if (action.type === 'power-target') {\r\n\t\t\t// // console.log('parsing powertargetaction', action);\r\n\t\t\tconst targetIds: readonly number[] = action.targetEntityIds ?? [action.targetEntityId];\r\n\t\t\treturn PowerTargetAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\tplayerId: action.playerEntityId,\r\n\t\t\t\t\topponentId: action.opponentEntityId,\r\n\t\t\t\t\tentities: this.buildEntities(action, playerRewardEntity, opponentRewardEntity, anomalies, damages),\r\n\t\t\t\t\toriginId: action.sourceEntityId,\r\n\t\t\t\t\ttargetIds: targetIds,\r\n\t\t\t\t\ttargets: targetIds.map((targetId) => [action.sourceEntityId, targetId]) as readonly [\r\n\t\t\t\t\t\tnumber,\r\n\t\t\t\t\t\tnumber,\r\n\t\t\t\t\t][],\r\n\t\t\t\t} as PowerTargetAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t} else if (action.type === 'spawn') {\r\n\t\t\treturn SummonAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\tplayerId: action.playerEntityId,\r\n\t\t\t\t\topponentId: action.opponentEntityId,\r\n\t\t\t\t\toriginId: action.sourceEntityId,\r\n\t\t\t\t\tentities: this.buildEntities(action, playerRewardEntity, opponentRewardEntity, anomalies, null),\r\n\t\t\t\t\tentityIds: action.spawns.map((entity) => entity.entityId) as readonly number[],\r\n\t\t\t\t} as SummonAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t} else if (action.type === 'minion-death') {\r\n\t\t\treturn MinionDeathAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\tplayerId: action.playerEntityId,\r\n\t\t\t\t\topponentId: action.opponentEntityId,\r\n\t\t\t\t\tentities: this.buildEntities(action, playerRewardEntity, opponentRewardEntity, anomalies, null),\r\n\t\t\t\t\tdeadMinions: action.deaths.map((entity) => entity.entityId) as readonly number[],\r\n\t\t\t\t} as MinionDeathAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate buildDamages(\r\n\t\tactionType: string,\r\n\t\tdamages: Damage[],\r\n\t\tplayerEntity: PlayerEntity,\r\n\t\topponentEntity: PlayerEntity,\r\n\t): Map<number, number> {\r\n\t\tif (!damages || damages.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (actionType === 'player-attack') {\r\n\t\t\tconst damage = !!damages?.length ? damages[0].damage ?? 0! : 0;\r\n\t\t\treturn Map([[opponentEntity.id, damage]]);\r\n\t\t} else if (actionType === 'opponent-attack') {\r\n\t\t\tconst damage = !!damages?.length ? damages[0].damage ?? 0! : 0;\r\n\t\t\treturn Map([[playerEntity.id, damage]]);\r\n\t\t}\r\n\r\n\t\tconst result: { [damagedEntityId: number]: number } = {};\r\n\t\tfor (const damage of damages) {\r\n\t\t\tresult[damage.targetEntityId] = (result[damage.targetEntityId] || 0) + damage.damage;\r\n\t\t}\r\n\t\tconst arrayFromWhichToBuildMap: readonly [number, number][] = Object.keys(result).map((damagedEntityId) => [\r\n\t\t\tparseInt(damagedEntityId),\r\n\t\t\tresult[damagedEntityId],\r\n\t\t]);\r\n\t\t// // console.log('building damage array', arrayFromWhichToBuildMap, result, damages);\r\n\t\treturn Map(arrayFromWhichToBuildMap);\r\n\t}\r\n\r\n\tprivate buildEntities(\r\n\t\taction: GameAction,\r\n\t\tplayerRewardEntity: Entity,\r\n\t\topponentRewardEntity: Entity,\r\n\t\tanomalies: readonly string[],\r\n\t\tdamages: Map<number, number>,\r\n\t): Map<number, Entity> {\r\n\t\tconst playerEntity = this.buildGenericPlayerEntity(\r\n\t\t\t'Player',\r\n\t\t\taction.playerEntityId,\r\n\t\t\taction.playerEntityId,\r\n\t\t\taction.playerCardId,\r\n\t\t);\r\n\t\tconst opponentEntity = this.buildGenericPlayerEntity(\r\n\t\t\t'Opponent',\r\n\t\t\taction.opponentEntityId,\r\n\t\t\taction.opponentEntityId,\r\n\t\t\taction.opponentCardId,\r\n\t\t);\r\n\t\tconst playerHeroPowerEntity = this.buildGenericHeroPowerEntity(\r\n\t\t\taction.playerHeroPowerCardId,\r\n\t\t\taction.playerHeroPowerEntityId,\r\n\t\t\taction.playerHeroPowerUsed,\r\n\t\t\tplayerEntity.playerId,\r\n\t\t);\r\n\t\tconst opponentHeroPowerEntity = this.buildGenericHeroPowerEntity(\r\n\t\t\taction.opponentHeroPowerCardId,\r\n\t\t\taction.opponentHeroPowerEntityId,\r\n\t\t\taction.opponentHeroPowerUsed,\r\n\t\t\topponentEntity.playerId,\r\n\t\t);\r\n\t\tconst anomalyEntities = (anomalies ?? []).map((anomaly) => this.buildAnomalyEntity(anomaly));\r\n\t\tconst allSourceEntities = [\r\n\t\t\t...(action.playerBoard || []),\r\n\t\t\t...(action.opponentBoard || []),\r\n\t\t\t// ...(action.spawns || []), // They are already present on the board\r\n\t\t\t...(action.deaths || []),\r\n\t\t];\r\n\t\t// // console.log('parsing action', action.type, allSourceEntities, action);\r\n\t\tconst friendlyBoardEntities: readonly Entity[] = allSourceEntities\r\n\t\t\t.filter((entity) => entity.friendly)\r\n\t\t\t.map((boardEntity, index) =>\r\n\t\t\t\tthis.buildEntity(\r\n\t\t\t\t\tboardEntity,\r\n\t\t\t\t\tthis.findPositionOnBoard(action, boardEntity.entityId) ?? index,\r\n\t\t\t\t\tplayerEntity,\r\n\t\t\t\t\tdamages,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\tconst opponentBoardEntities: readonly Entity[] = allSourceEntities\r\n\t\t\t.filter((entity) => !entity.friendly)\r\n\t\t\t.map((boardEntity, index) =>\r\n\t\t\t\tthis.buildEntity(\r\n\t\t\t\t\tboardEntity,\r\n\t\t\t\t\tthis.findPositionOnBoard(action, boardEntity.entityId) ?? index,\r\n\t\t\t\t\topponentEntity,\r\n\t\t\t\t\tdamages,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\tconst allHandEntities = [...(action.playerHand || []), ...(action.opponentHand || [])];\r\n\t\tconst friendlyHandEntities: readonly Entity[] = allHandEntities\r\n\t\t\t.filter((entity) => entity.friendly)\r\n\t\t\t.map((entity, index) => this.buildEntity(entity, index, playerEntity, damages, Zone.HAND));\r\n\t\tconst opponentHandEntities: readonly Entity[] = allHandEntities\r\n\t\t\t.filter((entity) => !entity.friendly)\r\n\t\t\t.map((entity, index) => this.buildEntity(entity, index, opponentEntity, damages, Zone.HAND));\r\n\t\tconst playerSecretEntities: readonly Entity[] = (action.playerSecrets || []).map((entity, index) =>\r\n\t\t\tthis.buildSecretEntity(entity, index, playerEntity, damages),\r\n\t\t);\r\n\t\tconst opponentSecretEntities: readonly Entity[] = (action.opponentSecrets || []).map((entity, index) =>\r\n\t\t\tthis.buildSecretEntity(entity, index, opponentEntity, damages),\r\n\t\t);\r\n\t\tconst playerTrinketEntities: readonly Entity[] = (action.playerTrinkets || []).map((entity, index) =>\r\n\t\t\tthis.buildTrinketEntity(entity, playerEntity, index),\r\n\t\t);\r\n\t\tconst opponentTrinketEntities: readonly Entity[] = (action.opponentTrinkets || []).map((entity, index) =>\r\n\t\t\tthis.buildTrinketEntity(entity, opponentEntity, index),\r\n\t\t);\r\n\r\n\t\t// // console.log('split entities', friendlyEntities, opponentEntities);\r\n\t\tconst allEntities: readonly Entity[] = [\r\n\t\t\tObject.assign(new PlayerEntity(), playerEntity, {\r\n\t\t\t\tdamageForThisAction: damages && damages.get(playerEntity.id) ? damages.get(playerEntity.id) : undefined,\r\n\t\t\t} as PlayerEntity),\r\n\t\t\tObject.assign(new PlayerEntity(), opponentEntity, {\r\n\t\t\t\tdamageForThisAction:\r\n\t\t\t\t\tdamages && damages.get(opponentEntity.id) ? damages.get(opponentEntity.id) : undefined,\r\n\t\t\t} as PlayerEntity),\r\n\t\t\tplayerHeroPowerEntity,\r\n\t\t\topponentHeroPowerEntity,\r\n\t\t\tplayerRewardEntity,\r\n\t\t\topponentRewardEntity,\r\n\t\t\t...anomalyEntities,\r\n\t\t\t...friendlyBoardEntities,\r\n\t\t\t...opponentBoardEntities,\r\n\t\t\t...friendlyHandEntities,\r\n\t\t\t...opponentHandEntities,\r\n\t\t\t...playerSecretEntities,\r\n\t\t\t...opponentSecretEntities,\r\n\t\t\t...playerTrinketEntities,\r\n\t\t\t...opponentTrinketEntities,\r\n\t\t].filter((e) => !!e);\r\n\t\tconst mapEntries: readonly [number, Entity][] = allEntities.map((entity) => [entity.id, entity]);\r\n\t\t// // console.log('map entries', mapEntries);\r\n\t\tconst result: Map<number, Entity> = Map(mapEntries);\r\n\t\t// // console.log('built entities', result.get(1), result);\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate findPositionOnBoard(action: GameAction, entityId: number): number {\r\n\t\tif (!action.deaths) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < action.deaths.length; i++) {\r\n\t\t\tif (action.deaths[i].entityId === entityId) {\r\n\t\t\t\treturn action.deadMinionsPositionsOnBoard[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tprivate buildEntity(\r\n\t\tboardEntity: BoardEntity,\r\n\t\tboardPosition: number,\r\n\t\tplayerEntity: PlayerEntity,\r\n\t\tdamages: Map<number, number>,\r\n\t\tzone = Zone.PLAY,\r\n\t): Entity {\r\n\t\tconst refCard = this.allCards.getCard(boardEntity.cardId);\r\n\t\tconst tags: { [tagName: string]: number } = {\r\n\t\t\t[GameTag[GameTag.CONTROLLER]]: playerEntity.playerId,\r\n\t\t\t[GameTag[GameTag.CARDTYPE]]: CardType.MINION,\r\n\t\t\t[GameTag[GameTag.ZONE]]: zone ?? Zone.PLAY,\r\n\t\t\t[GameTag[GameTag.ZONE_POSITION]]: boardPosition,\r\n\t\t\t[GameTag[GameTag.ATK]]: boardEntity.attack,\r\n\t\t\t[GameTag[GameTag.HEALTH]]: boardEntity.maxHealth ?? boardEntity.health,\r\n\t\t\t[GameTag[GameTag.DAMAGE]]: (boardEntity.maxHealth ?? boardEntity.health) - boardEntity.health,\r\n\t\t\t[GameTag[GameTag.TAUNT]]: boardEntity.taunt ? 1 : 0,\r\n\t\t\t[GameTag[GameTag.POISONOUS]]: boardEntity.poisonous || boardEntity.venomous ? 1 : 0,\r\n\t\t\t[GameTag[GameTag.DIVINE_SHIELD]]: boardEntity.divineShield ? 1 : 0,\r\n\t\t\t[GameTag[GameTag.REBORN]]: boardEntity.reborn ? 1 : 0,\r\n\t\t\t[GameTag[GameTag.WINDFURY]]: boardEntity.windfury ? 1 : 0,\r\n\t\t\t[GameTag[GameTag.DEATHRATTLE]]: refCard.mechanics?.includes(GameTag[GameTag.DEATHRATTLE]) ? 1 : 0,\r\n\t\t\t[GameTag[GameTag.TRIGGER_VISUAL]]: refCard.mechanics?.includes(GameTag[GameTag.TRIGGER_VISUAL]) ? 1 : 0,\r\n\t\t\t[GameTag[GameTag.STEALTH]]: boardEntity.stealth ? 1 : 0,\r\n\t\t\t[GameTag[GameTag.PREMIUM]]: refCard.battlegroundsNormalDbfId || refCard.premium ? 1 : 0,\r\n\t\t\t[GameTag[GameTag.TECH_LEVEL]]: refCard.techLevel,\r\n\t\t};\r\n\t\treturn Entity.create({\r\n\t\t\tid: boardEntity.entityId,\r\n\t\t\tcardID: boardEntity.cardId,\r\n\t\t\ttags: tags,\r\n\t\t\tdamageForThisAction:\r\n\t\t\t\tdamages && damages.get(boardEntity.entityId) ? damages.get(boardEntity.entityId) : undefined,\r\n\t\t} as Entity);\r\n\t}\r\n\r\n\tprivate buildSecretEntity(\r\n\t\tboardEntity: BoardSecret,\r\n\t\tboardPosition: number,\r\n\t\tplayerEntity: PlayerEntity,\r\n\t\tdamages: Map<number, number>,\r\n\t): Entity {\r\n\t\tconst refCard = this.allCards.getCard(boardEntity.cardId);\r\n\t\tconst tags: { [tagName: string]: number } = {\r\n\t\t\t[GameTag[GameTag.CONTROLLER]]: playerEntity.playerId,\r\n\t\t\t[GameTag[GameTag.CARDTYPE]]: CardType.SPELL,\r\n\t\t\t[GameTag[GameTag.ZONE]]: Zone.SECRET,\r\n\t\t\t[GameTag[GameTag.CLASS]]: GameTag[refCard.classes?.[0].toUpperCase() ?? 'NEUTRAL'],\r\n\t\t\t[GameTag[GameTag.ZONE_POSITION]]: boardPosition,\r\n\t\t};\r\n\t\treturn Entity.create({\r\n\t\t\tid: boardEntity.entityId,\r\n\t\t\tcardID: boardEntity.cardId,\r\n\t\t\ttags: tags,\r\n\t\t\tdamageForThisAction:\r\n\t\t\t\tdamages && damages.get(boardEntity.entityId) ? damages.get(boardEntity.entityId) : undefined,\r\n\t\t} as Entity);\r\n\t}\r\n\r\n\tprivate buildTrinketEntity(boardEntity: BoardSecret, playerEntity: PlayerEntity, index: number): Entity {\r\n\t\tconst refCard = this.allCards.getCard(boardEntity.cardId);\r\n\t\tconst tags: { [tagName: string]: number } = {\r\n\t\t\t[GameTag[GameTag.CONTROLLER]]: playerEntity.playerId,\r\n\t\t\t[GameTag[GameTag.CARDTYPE]]: CardType.BATTLEGROUND_TRINKET,\r\n\t\t\t[GameTag[GameTag.ZONE]]: Zone.PLAY,\r\n\t\t\t[GameTag[GameTag.TAG_SCRIPT_DATA_NUM_6]]: index + 1,\r\n\t\t};\r\n\t\treturn Entity.create({\r\n\t\t\tid: boardEntity.entityId,\r\n\t\t\tcardID: boardEntity.cardId,\r\n\t\t\ttags: tags,\r\n\t\t} as Entity);\r\n\t}\r\n\r\n\tprivate buildPlayerEntity(bgsSimulation: ExtendedGameSample): PlayerEntity {\r\n\t\treturn this.buildGenericPlayerEntity(\r\n\t\t\t'Player',\r\n\t\t\tbgsSimulation.playerEntityId,\r\n\t\t\tbgsSimulation.playerEntityId,\r\n\t\t\tbgsSimulation.playerCardId,\r\n\t\t);\r\n\t}\r\n\r\n\tprivate buildPlayerHeroPowerEntity(bgsSimulation: ExtendedGameSample, playerEntity: PlayerEntity): Entity {\r\n\t\treturn this.buildGenericHeroPowerEntity(\r\n\t\t\tbgsSimulation.playerHeroPowerCardId,\r\n\t\t\tbgsSimulation.playerHeroPowerEntityId,\r\n\t\t\tbgsSimulation.playerHeroPowerUsed,\r\n\t\t\tplayerEntity.playerId,\r\n\t\t);\r\n\t}\r\n\r\n\tprivate buildGenericHeroPowerEntity(cardId: string, entityId: number, used: boolean, playerId: number): Entity {\r\n\t\tif (!cardId) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst tags: { [tagName: string]: number } = {\r\n\t\t\t[GameTag[GameTag.CONTROLLER]]: playerId,\r\n\t\t\t[GameTag[GameTag.CARDTYPE]]: CardType.HERO_POWER,\r\n\t\t\t[GameTag[GameTag.ZONE]]: Zone.PLAY,\r\n\t\t\t[GameTag[GameTag.ENTITY_ID]]: Zone.PLAY,\r\n\t\t\t[GameTag[GameTag.EXHAUSTED]]: used ? 1 : 0,\r\n\t\t};\r\n\t\treturn Entity.create({\r\n\t\t\tid: entityId,\r\n\t\t\tcardID: cardId,\r\n\t\t\ttags: tags,\r\n\t\t} as Entity);\r\n\t}\r\n\r\n\tprivate buildAnomalyEntity(cardId: string): Entity {\r\n\t\tif (!cardId) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst tags: { [tagName: string]: number } = {\r\n\t\t\t[GameTag[GameTag.CARDTYPE]]: CardType.BATTLEGROUND_ANOMALY,\r\n\t\t\t[GameTag[GameTag.ZONE]]: Zone.PLAY,\r\n\t\t\t[GameTag[GameTag.ENTITY_ID]]: Zone.PLAY,\r\n\t\t};\r\n\t\treturn Entity.create({\r\n\t\t\tid: 6666666661,\r\n\t\t\tcardID: cardId,\r\n\t\t\ttags: tags,\r\n\t\t} as Entity);\r\n\t}\r\n\r\n\tprivate buildPlayerRewardEntity(action: GameAction, playerEntity: PlayerEntity): Entity {\r\n\t\tconst cardId = action.playerRewardCardId ?? action.playerHeroPowers?.[1]?.cardId;\r\n\t\tconst entityId = action.playerRewardEntityId ?? action.playerHeroPowers?.[1]?.entityId;\r\n\t\tconsole.debug('player quest reward card id', cardId);\r\n\t\tif (!cardId) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst tags: { [tagName: string]: number } = {\r\n\t\t\t[GameTag[GameTag.CONTROLLER]]: playerEntity.playerId,\r\n\t\t\t[GameTag[GameTag.CARDTYPE]]: CardType.BATTLEGROUND_QUEST_REWARD,\r\n\t\t\t[GameTag[GameTag.ZONE]]: Zone.PLAY,\r\n\t\t\t[GameTag[GameTag.ENTITY_ID]]: entityId,\r\n\t\t\t[GameTag[GameTag.TAG_SCRIPT_DATA_NUM_1]]: action.playerRewardData,\r\n\t\t};\r\n\t\tconsole.debug('player quest reward tags', tags);\r\n\t\treturn Entity.create({\r\n\t\t\tid: entityId,\r\n\t\t\tcardID: cardId,\r\n\t\t\ttags: tags,\r\n\t\t} as Entity);\r\n\t}\r\n\r\n\tprivate buildOpponentRewardEntity(action: GameAction, playerEntity: PlayerEntity): Entity {\r\n\t\tconst cardId = action.opponentRewardCardId ?? action.opponentHeroPowers?.[1]?.cardId;\r\n\t\tconst entityId = action.opponentRewardEntityId ?? action.opponentHeroPowers?.[1]?.entityId;\r\n\t\tif (!cardId) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst tags: { [tagName: string]: number } = {\r\n\t\t\t[GameTag[GameTag.CONTROLLER]]: playerEntity.playerId,\r\n\t\t\t[GameTag[GameTag.CARDTYPE]]: CardType.BATTLEGROUND_QUEST_REWARD,\r\n\t\t\t[GameTag[GameTag.ZONE]]: Zone.PLAY,\r\n\t\t\t[GameTag[GameTag.ENTITY_ID]]: entityId,\r\n\t\t\t[GameTag[GameTag.TAG_SCRIPT_DATA_NUM_1]]: action.opponentRewardData,\r\n\t\t};\r\n\t\treturn Entity.create({\r\n\t\t\tid: entityId,\r\n\t\t\tcardID: cardId,\r\n\t\t\ttags: tags,\r\n\t\t} as Entity);\r\n\t}\r\n\r\n\tprivate buildOpponentHeroPowerEntity(bgsSimulation: ExtendedGameSample, playerEntity: PlayerEntity): Entity {\r\n\t\treturn this.buildGenericHeroPowerEntity(\r\n\t\t\tbgsSimulation.opponentHeroPowerCardId,\r\n\t\t\tbgsSimulation.opponentHeroPowerEntityId,\r\n\t\t\tbgsSimulation.opponentHeroPowerUsed,\r\n\t\t\tplayerEntity.playerId,\r\n\t\t);\r\n\t}\r\n\r\n\tprivate buildOpponentEntity(bgsSimulation: ExtendedGameSample): PlayerEntity {\r\n\t\treturn this.buildGenericPlayerEntity(\r\n\t\t\t'Opponent',\r\n\t\t\tbgsSimulation.opponentEntityId,\r\n\t\t\tbgsSimulation.opponentEntityId,\r\n\t\t\tbgsSimulation.opponentCardId,\r\n\t\t);\r\n\t}\r\n\r\n\tprivate buildGenericPlayerEntity(\r\n\t\tname: string,\r\n\t\tplayerId: number,\r\n\t\tplayerEntityId: number,\r\n\t\tplayerCardId: string,\r\n\t): PlayerEntity {\r\n\t\tconst tags: { [tagName: string]: number } = {\r\n\t\t\t[GameTag[GameTag.PLAYER_ID]]: playerId,\r\n\t\t\t[GameTag[GameTag.CARDTYPE]]: CardType.PLAYER,\r\n\t\t\t// Cheating here: using the same entity for player and hero\r\n\t\t\t[GameTag[GameTag.HERO_ENTITY]]: playerEntityId,\r\n\t\t\t[GameTag[GameTag.ZONE]]: Zone.PLAY,\r\n\t\t};\r\n\t\treturn PlayerEntity.create({\r\n\t\t\tid: playerEntityId,\r\n\t\t\tplayerId: playerId,\r\n\t\t\tcardID: playerCardId,\r\n\t\t\tname: name,\r\n\t\t\ttags: tags,\r\n\t\t} as PlayerEntity);\r\n\t}\r\n}\r\n","import { Zone } from '@firestone-hs/reference-data';\r\nimport { HistoryItem } from './history-item';\r\n\r\nexport class HideEntityHistoryItem extends HistoryItem {\r\n\treadonly entity: number;\r\n\treadonly zone: Zone;\r\n}\r\n","import { GameTag, MetaTags, Mulligan, Step, Zone } from '@firestone-hs/reference-data';\r\nimport { SaxesParser, SaxesTagPlain } from 'saxes';\r\nimport { ActionHistoryItem } from '../models/history/action-history-item';\r\nimport { ChangeEntityHistoryItem } from '../models/history/change-entity-history-item';\r\nimport { ChoicesHistoryItem } from '../models/history/choices-history-item';\r\nimport { ChosenEntityHistoryItem } from '../models/history/chosen-entities-history-item';\r\nimport { FullEntityHistoryItem } from '../models/history/full-entity-history-item';\r\nimport { GameHistoryItem } from '../models/history/game-history-item';\r\nimport { HideEntityHistoryItem } from '../models/history/hide-entity-history-item';\r\nimport { HistoryItem } from '../models/history/history-item';\r\nimport { MetadataHistoryItem } from '../models/history/metadata-history-item';\r\nimport { OptionsHistoryItem } from '../models/history/options-history-item';\r\nimport { PlayerHistoryItem } from '../models/history/player-history-item';\r\nimport { ShowEntityHistoryItem } from '../models/history/show-entity-history-item';\r\nimport { TagChangeHistoryItem } from '../models/history/tag-change-history-item';\r\nimport { Choices } from '../models/parser/choices';\r\nimport { ChosenTag } from '../models/parser/chosen-tag';\r\nimport { EnrichedTag } from '../models/parser/enriched-tag';\r\nimport { EntityDefinition } from '../models/parser/entity-definition';\r\nimport { EntityDefinitionAttribute } from '../models/parser/entity-definition-attribute';\r\nimport { EntityTag } from '../models/parser/entity-tag';\r\nimport { Info } from '../models/parser/info';\r\nimport { MetaData } from '../models/parser/metadata';\r\nimport { Option } from '../models/parser/option';\r\n\r\n// Don't inject it, because of the global state\r\nexport class XmlParserService {\r\n\tprivate stack: EnrichedTag[];\r\n\tprivate state: string[];\r\n\tprivate index: number;\r\n\tprivate initialTimestamp: number;\r\n\tprivate history: HistoryItem[];\r\n\tprivate entityDefinition: EntityDefinition;\r\n\tprivate accountHi: string;\r\n\tprivate accountLo: string;\r\n\tprivate isMainPlayer: string;\r\n\tprivate choices: Choices;\r\n\tprivate chosen: ChosenTag;\r\n\tprivate metaData: MetaData;\r\n\tprivate timestamp: number;\r\n\r\n\tprivate buildNumber: number;\r\n\tprivate gameType: number;\r\n\tprivate formatType: number;\r\n\tprivate scenarioID: number;\r\n\r\n\tconstructor() {}\r\n\r\n\tpublic *parseXml(xmlAsString: string): IterableIterator<readonly HistoryItem[]> {\r\n\t\tthis.reset();\r\n\t\tif (!xmlAsString) {\r\n\t\t\tconsole.error('[game-parser] [xml-parser] no xmlAsString provided');\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\t// console.debug('[game-parser] [xml-parser] parsing', xmlAsString);\r\n\t\tconst saxesParser = new SaxesParser({\r\n\t\t\t// fragment: true,\r\n\t\t});\r\n\t\tsaxesParser.on('opentag', (tag) => this.onOpenTag(tag));\r\n\t\tsaxesParser.on('closetag', (tag) => this.onCloseTag());\r\n\t\t// saxesParser.on('end', () => console.debug('parsing over'));\r\n\t\t// saxesParser.on('error', error => console.error('Error while parsing xml', error));\r\n\r\n\t\t// We want to have:\r\n\t\t// - a chunk with pre-mulligan stuff, to setup the board\r\n\t\t// - one chunk with both mulligans\r\n\t\t// - one chunk for each turn\r\n\t\tconst mulliganSplits = xmlAsString.split(\r\n\t\t\tnew RegExp(`(?=<TagChange.*tag=\"${GameTag.MULLIGAN_STATE}\" value=\"${Mulligan.INPUT}\".*/>)`),\r\n\t\t);\r\n\t\t// We isolate the pre-mulligan stuff\r\n\t\tconst [setupChunk, ...gameChunks] = mulliganSplits;\r\n\t\t// console.debug('[game-parser] [xml-parser] setupChunk', setupChunk, gameChunks.length);\r\n\t\t// Then the other chunks are handled only on a turn-by-turn basis\r\n\t\t// This logic is here to handle the case where there is no mulligan info. It should usually not happen,\r\n\t\t// but I've seen it at least once\r\n\t\tconst gameXml = gameChunks && gameChunks.length > 0 ? gameChunks.join('') : setupChunk;\r\n\t\t// console.log('[game-parser] [xml-parser] gameXml', gameXml);\r\n\t\t// https://stackoverflow.com/questions/12001953/javascript-and-regex-split-string-and-keep-the-separator\r\n\t\tconst chunks = gameXml.split(\r\n\t\t\tnew RegExp(`(?=<TagChange.*tag=\"${GameTag.STEP}\" value=\"${Step.MAIN_READY}\".*/>)`),\r\n\t\t);\r\n\t\t// console.log('[game-parser] [xml-parser] chunks', chunks.length);\r\n\t\tconst splitChunks = gameChunks && gameChunks.length > 0 ? [setupChunk, ...chunks] : [...chunks];\r\n\t\tfor (const chunk of splitChunks) {\r\n\t\t\t// console.log('[game-parser] [xml-parser] writing chunk', chunk.length);\r\n\t\t\tsaxesParser.write(chunk);\r\n\t\t\tyield this.history;\r\n\t\t\tthis.history = [];\r\n\t\t}\r\n\t\t// console.log('[game-parser] [xml-parser] parsing over');\r\n\t\tsaxesParser.close();\r\n\t\treturn null;\r\n\t}\r\n\r\n\tonOpenTag(tag: SaxesTagPlain) {\r\n\t\tthis.stack.push(tag as SaxesTagPlain);\r\n\t\tif (this[`${this.state[this.state.length - 1]}State`]) {\r\n\t\t\tthis[`${this.state[this.state.length - 1]}State`](tag);\r\n\t\t}\r\n\t}\r\n\r\n\tonCloseTag() {\r\n\t\tconst tag = this.stack.pop();\r\n\t\tif (this[`${this.state[this.state.length - 1]}StateClose`]) {\r\n\t\t\tthis[`${this.state[this.state.length - 1]}StateClose`](tag);\r\n\t\t}\r\n\t}\r\n\r\n\trootState(node: EnrichedTag) {\r\n\t\tnode.index = this.index++;\r\n\t\tlet name;\r\n\t\tlet ts;\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'Game':\r\n\t\t\t\tthis.initialTimestamp = this.tsToSeconds(node.attributes.ts);\r\n\t\t\t\tthis.timestamp = 0;\r\n\t\t\t\tthis.buildNumber = parseInt(node.attributes.buildNumber);\r\n\t\t\t\tthis.gameType = parseInt(node.attributes.gameType);\r\n\t\t\t\tthis.formatType = parseInt(node.attributes.formatType);\r\n\t\t\t\tthis.scenarioID = parseInt(node.attributes.scenarioID);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Action':\r\n\t\t\tcase 'Block':\r\n\t\t\t\tts = this.tsToSeconds(node.attributes.ts);\r\n\t\t\t\tconst item: ActionHistoryItem = new ActionHistoryItem(node, this.buildTimestamp(ts), node.index);\r\n\t\t\t\tthis.enqueueHistoryItem(item);\r\n\t\t\t\tthis.state.push('action');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ShowEntity':\r\n\t\t\t\tlet showEntities: EntityDefinition[] = this.stack[this.stack.length - 2].showEntities || [];\r\n\t\t\t\tshowEntities.push(this.entityDefinition);\r\n\t\t\t\tthis.stack[this.stack.length - 2].showEntities = showEntities;\r\n\t\t\t/* falls through */\r\n\t\t\tcase 'Player':\r\n\t\t\t\t// Remove the battle tag, if present\r\n\t\t\t\tname =\r\n\t\t\t\t\tnode.attributes.name && node.attributes.name.indexOf('#') !== -1\r\n\t\t\t\t\t\t? node.attributes.name.split('#')[0]\r\n\t\t\t\t\t\t: node.attributes.name;\r\n\t\t\t\tthis.accountHi = node.attributes.accountHi;\r\n\t\t\t\tthis.accountLo = node.attributes.accountLo;\r\n\t\t\t\tthis.isMainPlayer = node.attributes.isMainPlayer;\r\n\t\t\t/* falls through */\r\n\t\t\tcase 'GameEntity':\r\n\t\t\tcase 'FullEntity':\r\n\t\t\tcase 'ChangeEntity':\r\n\t\t\t\tname = name || node.attributes.name;\r\n\t\t\t\tthis.state.push('entity');\r\n\t\t\t\tconst attributes = Object.assign({}, this.entityDefinition.attributes, {\r\n\t\t\t\t\tts: this.tsToSeconds(node.attributes.ts),\r\n\t\t\t\t});\r\n\t\t\t\tconst newAttributes: EntityDefinition = {\r\n\t\t\t\t\tid: parseInt(node.attributes.entity || node.attributes.id),\r\n\t\t\t\t\tattributes,\r\n\t\t\t\t\tindex: this.index++,\r\n\t\t\t\t\tcardID: node.attributes.cardID,\r\n\t\t\t\t\tname,\r\n\t\t\t\t\ttags: this.entityDefinition.tags, // Avoid the hassle of merging tags, just get the ones from source\r\n\t\t\t\t\tplayerID: parseInt(node.attributes.playerID),\r\n\t\t\t\t};\r\n\t\t\t\tObject.assign(this.entityDefinition, newAttributes);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'TagChange':\r\n\t\t\t\tconst tag: EntityTag = {\r\n\t\t\t\t\tindex: this.index++,\r\n\t\t\t\t\tentity: parseInt(node.attributes.entity),\r\n\t\t\t\t\ttag: parseInt(node.attributes.tag) as GameTag,\r\n\t\t\t\t\tvalue: parseInt(node.attributes.value),\r\n\t\t\t\t\tparentIndex: this.stack[this.stack.length - 2].index,\r\n\t\t\t\t};\r\n\t\t\t\tlet parentTags: EntityTag[] = this.stack[this.stack.length - 2].tags || [];\r\n\t\t\t\tparentTags.push(tag);\r\n\t\t\t\tthis.stack[this.stack.length - 2].tags = parentTags;\r\n\t\t\t\tconst tagItem: TagChangeHistoryItem = new TagChangeHistoryItem(\r\n\t\t\t\t\ttag,\r\n\t\t\t\t\tthis.buildTimestamp(ts),\r\n\t\t\t\t\tnode.index,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(tagItem);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Options':\r\n\t\t\t\tthis.state.push('options');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ChosenEntities':\r\n\t\t\t\tthis.chosen = {\r\n\t\t\t\t\tentity: parseInt(node.attributes.entity),\r\n\t\t\t\t\tplayerID: parseInt(node.attributes.playerID),\r\n\t\t\t\t\tts: this.tsToSeconds(node.attributes.ts),\r\n\t\t\t\t\tcards: [],\r\n\t\t\t\t\tindex: this.index++,\r\n\t\t\t\t};\r\n\t\t\t\tthis.state.push('chosenEntities');\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tactionState(node: EnrichedTag) {\r\n\t\tnode.index = this.index++;\r\n\t\tconst ts = node.attributes.ts ? this.tsToSeconds(node.attributes.ts) : null;\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'ShowEntity':\r\n\t\t\tcase 'FullEntity':\r\n\t\t\tcase 'ChangeEntity':\r\n\t\t\t\tthis.state.push('entity');\r\n\t\t\t\tconst attributes: EntityDefinitionAttribute = Object.assign({}, this.entityDefinition.attributes, {\r\n\t\t\t\t\tts: this.tsToSeconds(node.attributes.ts),\r\n\t\t\t\t\ttriggerKeyword: parseInt(node.attributes.triggerKeyword) || 0,\r\n\t\t\t\t});\r\n\t\t\t\tconst newAttributes: EntityDefinition = {\r\n\t\t\t\t\tid: parseInt(node.attributes.entity || node.attributes.id),\r\n\t\t\t\t\tindex: this.index++,\r\n\t\t\t\t\tattributes,\r\n\t\t\t\t\tcardID: node.attributes.cardID,\r\n\t\t\t\t\tname: node.attributes.name,\r\n\t\t\t\t\ttags: this.entityDefinition.tags, // Avoid the hassle of merging tags, just get the ones from source\r\n\t\t\t\t\tplayerID: parseInt(node.attributes.playerID),\r\n\t\t\t\t\tparentIndex: this.stack[this.stack.length - 2].index,\r\n\t\t\t\t};\r\n\t\t\t\tObject.assign(this.entityDefinition, newAttributes);\r\n\r\n\t\t\t\tif (node.name === 'ShowEntity') {\r\n\t\t\t\t\tlet showEntities: EntityDefinition[] = this.stack[this.stack.length - 2].showEntities || [];\r\n\t\t\t\t\tshowEntities.push(this.entityDefinition);\r\n\t\t\t\t\tthis.stack[this.stack.length - 2].showEntities = showEntities;\r\n\t\t\t\t} else if (node.name === 'FullEntity') {\r\n\t\t\t\t\tlet fullEntities: EntityDefinition[] = this.stack[this.stack.length - 2].fullEntities || [];\r\n\t\t\t\t\tfullEntities.push(this.entityDefinition);\r\n\t\t\t\t\tthis.stack[this.stack.length - 2].fullEntities = fullEntities;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'HideEntity':\r\n\t\t\t\tconst hideEntityHistoryItem = Object.assign(\r\n\t\t\t\t\tnew HideEntityHistoryItem(this.index++, this.buildTimestamp(ts)),\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tentity: parseInt(node.attributes.entity),\r\n\t\t\t\t\t\tzone: parseInt(node.attributes.zone) as Zone,\r\n\t\t\t\t\t} as HideEntityHistoryItem,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(hideEntityHistoryItem);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'TagChange':\r\n\t\t\t\tconst tag: EntityTag = {\r\n\t\t\t\t\tindex: this.index++,\r\n\t\t\t\t\tentity: parseInt(node.attributes.entity),\r\n\t\t\t\t\ttag: parseInt(node.attributes.tag) as GameTag,\r\n\t\t\t\t\tvalue: parseInt(node.attributes.value),\r\n\t\t\t\t\tparentIndex: this.stack[this.stack.length - 2].index,\r\n\t\t\t\t};\r\n\t\t\t\tlet parentTags: EntityTag[] = this.stack[this.stack.length - 2].tags || [];\r\n\t\t\t\tparentTags.push(tag);\r\n\t\t\t\tthis.stack[this.stack.length - 2].tags = parentTags;\r\n\t\t\t\tconst tagItem: TagChangeHistoryItem = new TagChangeHistoryItem(\r\n\t\t\t\t\ttag,\r\n\t\t\t\t\tthis.buildTimestamp(ts),\r\n\t\t\t\t\tnode.index,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(tagItem);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'MetaData':\r\n\t\t\t\tthis.metaData = {\r\n\t\t\t\t\tmeta: MetaTags[parseInt(node.attributes.meta || node.attributes.entity)],\r\n\t\t\t\t\tdata: parseInt(node.attributes.data),\r\n\t\t\t\t\tparentIndex: this.stack[this.stack.length - 2].index,\r\n\t\t\t\t\tts,\r\n\t\t\t\t\tinfo: [],\r\n\t\t\t\t\tindex: this.index++,\r\n\t\t\t\t};\r\n\t\t\t\tconst metaItem: MetadataHistoryItem = new MetadataHistoryItem(\r\n\t\t\t\t\tthis.metaData,\r\n\t\t\t\t\tthis.buildTimestamp(ts),\r\n\t\t\t\t\tnode.index,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(metaItem);\r\n\t\t\t\tlet parentMeta: MetaData[] = this.stack[this.stack.length - 2].meta || [];\r\n\t\t\t\tparentMeta.push(this.metaData);\r\n\t\t\t\tthis.stack[this.stack.length - 2].meta = parentMeta;\r\n\t\t\t\tthis.state.push('metaData');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Action':\r\n\t\t\tcase 'Block':\r\n\t\t\t\tnode.parentIndex = this.stack[this.stack.length - 2].index;\r\n\t\t\t\tthis.state.push('action');\r\n\t\t\t\tconst item: ActionHistoryItem = new ActionHistoryItem(node, this.buildTimestamp(ts), node.index);\r\n\t\t\t\tthis.enqueueHistoryItem(item);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Choices':\r\n\t\t\t\tthis.choices = {\r\n\t\t\t\t\tentity: parseInt(node.attributes.entity),\r\n\t\t\t\t\tmax: parseInt(node.attributes.max),\r\n\t\t\t\t\tmin: parseInt(node.attributes.min),\r\n\t\t\t\t\tplayerID: parseInt(node.attributes.playerID),\r\n\t\t\t\t\tsource: parseInt(node.attributes.source),\r\n\t\t\t\t\ttype: parseInt(node.attributes.type),\r\n\t\t\t\t\tts: this.tsToSeconds(node.attributes.ts),\r\n\t\t\t\t\tindex: this.index++,\r\n\t\t\t\t\tcards: [],\r\n\t\t\t\t};\r\n\t\t\t\tthis.state.push('choices');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ChosenEntities':\r\n\t\t\t\tthis.chosen = {\r\n\t\t\t\t\tentity: parseInt(node.attributes.entity),\r\n\t\t\t\t\tplayerID: parseInt(node.attributes.playerID),\r\n\t\t\t\t\tts: this.tsToSeconds(node.attributes.ts),\r\n\t\t\t\t\tcards: [],\r\n\t\t\t\t\tindex: this.index++,\r\n\t\t\t\t};\r\n\t\t\t\tthis.state.push('chosenEntities');\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tactionStateClose(node: EnrichedTag) {\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'Action':\r\n\t\t\tcase 'Block':\r\n\t\t\t\tthis.state.pop();\r\n\t\t}\r\n\t}\r\n\r\n\tblockState(node: EnrichedTag) {\r\n\t\tnode.index = this.index++;\r\n\t\tthis.actionState(node);\r\n\t}\r\n\r\n\tblockStateClose(node: EnrichedTag) {\r\n\t\tthis.actionStateClose(node);\r\n\t}\r\n\r\n\tmetaDataState(node: EnrichedTag) {\r\n\t\tnode.index = this.index++;\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'Info':\r\n\t\t\t\tconst info: Info = {\r\n\t\t\t\t\tentity: parseInt(node.attributes.id || node.attributes.entity),\r\n\t\t\t\t\tparent: this.metaData,\r\n\t\t\t\t};\r\n\t\t\t\tlet infos: Info[] = this.metaData.info;\r\n\t\t\t\tinfos.push(info);\r\n\t\t\t\tObject.assign(this.metaData, { info: infos });\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tmetaDataStateClose(node: EnrichedTag) {\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'MetaData':\r\n\t\t\t\tthis.state.pop();\r\n\t\t}\r\n\t}\r\n\r\n\tchosenEntitiesState(node: EnrichedTag) {\r\n\t\tnode.index = this.index++;\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'Choice':\r\n\t\t\t\tlet cards: number[] = this.chosen.cards;\r\n\t\t\t\tcards.push(parseInt(node.attributes.entity));\r\n\t\t\t\tObject.assign(this.chosen, { cards });\r\n\t\t}\r\n\t}\r\n\r\n\tchosenEntitiesStateClose(node: EnrichedTag) {\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'ChosenEntities':\r\n\t\t\t\tthis.state.pop();\r\n\t\t\t\tconst item: ChosenEntityHistoryItem = new ChosenEntityHistoryItem(\r\n\t\t\t\t\tthis.chosen,\r\n\t\t\t\t\tthis.buildTimestamp(this.chosen.ts),\r\n\t\t\t\t\tnode.index,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(item);\r\n\t\t}\r\n\t}\r\n\r\n\toptionsState(node: EnrichedTag) {\r\n\t\tnode.index = this.index++;\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'Option':\r\n\t\t\t\tconst option: Option = {\r\n\t\t\t\t\tentity: parseInt(node.attributes.entity),\r\n\t\t\t\t\toptionIndex: parseInt(node.attributes.index),\r\n\t\t\t\t\terror: parseInt(node.attributes.error),\r\n\t\t\t\t\ttype: parseInt(node.attributes.type),\r\n\t\t\t\t\tparentIndex: this.stack[this.stack.length - 2].index,\r\n\t\t\t\t\tindex: this.index++,\r\n\t\t\t\t};\r\n\t\t\t\tlet options: Option[] = this.stack[this.stack.length - 2].options || [];\r\n\t\t\t\toptions.push(option);\r\n\t\t\t\tthis.stack[this.stack.length - 2].options = options;\r\n\t\t}\r\n\t}\r\n\r\n\toptionsStateClose(node: EnrichedTag) {\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'Options':\r\n\t\t\t\tthis.state.pop();\r\n\t\t\t\tconst ts = this.tsToSeconds(node.attributes.ts);\r\n\t\t\t\tconst item: OptionsHistoryItem = new OptionsHistoryItem(node, this.buildTimestamp(ts), node.index);\r\n\t\t\t\tthis.enqueueHistoryItem(item);\r\n\t\t}\r\n\t}\r\n\r\n\tentityState(node: EnrichedTag) {\r\n\t\tnode.index = this.index++;\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'Tag':\r\n\t\t\t\tconst newTags: { [tagName: string]: number } = {\r\n\t\t\t\t\t...this.entityDefinition.tags,\r\n\t\t\t\t\t[GameTag[parseInt(node.attributes.tag)]]: parseInt(node.attributes.value),\r\n\t\t\t\t};\r\n\t\t\t\tObject.assign(this.entityDefinition, { tags: newTags });\r\n\t\t}\r\n\t}\r\n\r\n\tentityStateClose(node: EnrichedTag) {\r\n\t\tconst ts = node.attributes.ts ? this.tsToSeconds(node.attributes.ts) : null;\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'GameEntity':\r\n\t\t\t\tthis.state.pop();\r\n\t\t\t\tconst gameItem: GameHistoryItem = Object.assign(\r\n\t\t\t\t\tnew GameHistoryItem(this.entityDefinition, this.buildTimestamp(ts), node.index),\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbuildNumber: this.buildNumber,\r\n\t\t\t\t\t\tformatType: this.formatType,\r\n\t\t\t\t\t\tgameType: this.gameType,\r\n\t\t\t\t\t\tscenarioID: this.scenarioID,\r\n\t\t\t\t\t} as GameHistoryItem,\r\n\t\t\t\t);\r\n\r\n\t\t\t\tthis.enqueueHistoryItem(gameItem);\r\n\t\t\t\tthis.entityDefinition = { tags: {} };\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Player':\r\n\t\t\t\tthis.state.pop();\r\n\t\t\t\tconst playerItem: PlayerHistoryItem = new PlayerHistoryItem(\r\n\t\t\t\t\tthis.entityDefinition,\r\n\t\t\t\t\tthis.accountHi,\r\n\t\t\t\t\tthis.accountLo,\r\n\t\t\t\t\tthis.isMainPlayer,\r\n\t\t\t\t\tthis.buildTimestamp(ts),\r\n\t\t\t\t\tnode.index,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(playerItem);\r\n\t\t\t\tthis.entityDefinition = { tags: {} };\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'FullEntity':\r\n\t\t\t\tthis.state.pop();\r\n\t\t\t\tconst fullEntityItem: FullEntityHistoryItem = new FullEntityHistoryItem(\r\n\t\t\t\t\tthis.entityDefinition,\r\n\t\t\t\t\tthis.buildTimestamp(ts),\r\n\t\t\t\t\tnode.index,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(fullEntityItem);\r\n\t\t\t\tthis.entityDefinition = { tags: {} };\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ShowEntity':\r\n\t\t\t\tthis.state.pop();\r\n\t\t\t\tconst showEntityItem: ShowEntityHistoryItem = new ShowEntityHistoryItem(\r\n\t\t\t\t\tthis.entityDefinition,\r\n\t\t\t\t\tthis.buildTimestamp(ts),\r\n\t\t\t\t\tnode.index,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(showEntityItem);\r\n\t\t\t\tthis.entityDefinition = { tags: {} };\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'ChangeEntity':\r\n\t\t\t\tthis.state.pop();\r\n\t\t\t\tconst changeEntityItem: ChangeEntityHistoryItem = new ChangeEntityHistoryItem(\r\n\t\t\t\t\tthis.entityDefinition,\r\n\t\t\t\t\tthis.buildTimestamp(ts),\r\n\t\t\t\t\tnode.index,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(changeEntityItem);\r\n\t\t\t\tthis.entityDefinition = { tags: {} };\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tchoicesState(node: EnrichedTag) {\r\n\t\tnode.index = this.index++;\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'Choice':\r\n\t\t\t\tlet cards = this.choices.cards || [];\r\n\t\t\t\tcards.push(parseInt(node.attributes.entity));\r\n\t\t\t\tObject.assign(this.choices, { cards });\r\n\t\t}\r\n\t}\r\n\r\n\tchoicesStateClose(node: EnrichedTag) {\r\n\t\tswitch (node.name) {\r\n\t\t\tcase 'Choices':\r\n\t\t\t\tthis.state.pop();\r\n\t\t\t\tconst choicesItem: ChoicesHistoryItem = new ChoicesHistoryItem(\r\n\t\t\t\t\tthis.choices,\r\n\t\t\t\t\tthis.buildTimestamp(this.choices.ts),\r\n\t\t\t\t\tnode.index,\r\n\t\t\t\t);\r\n\t\t\t\tthis.enqueueHistoryItem(choicesItem);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate buildTimestamp(ts?: number): number {\r\n\t\tts = ts || this.timestamp;\r\n\t\tthis.timestamp = ts;\r\n\t\treturn this.timestamp;\r\n\t}\r\n\r\n\tprivate enqueueHistoryItem(item: HistoryItem) {\r\n\t\tif (item.timestamp === undefined) {\r\n\t\t\tconsole.error(\"History item doesn't have timestamp\", item);\r\n\t\t\tthrow new Error(\"History item doesn't have timestamp\" + item);\r\n\t\t}\r\n\t\tthis.history.push(item);\r\n\t}\r\n\r\n\tprivate reset() {\r\n\t\tthis.stack = [];\r\n\t\tthis.state = ['root'];\r\n\t\tthis.index = 0;\r\n\t\tthis.initialTimestamp = undefined;\r\n\t\tthis.history = [];\r\n\t\tthis.entityDefinition = {\r\n\t\t\ttags: {},\r\n\t\t};\r\n\t\tthis.choices = undefined;\r\n\t\tthis.chosen = undefined;\r\n\t\tthis.metaData = undefined;\r\n\t\tthis.timestamp = undefined;\r\n\t}\r\n\r\n\tprivate tsToSeconds(ts: string): number {\r\n\t\tif (!ts) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\t// Format of timestamp is HH:mm:ss.SSSSSSSSS\r\n\t\tconst tsWithoutMillis = ts.split('.')[0];\r\n\t\tconst split = tsWithoutMillis.split(':');\r\n\t\tconst tsInSeconds: number = parseInt(split[2]) + 60 * parseInt(split[1]) + 3600 * parseInt(split[0]);\r\n\t\treturn tsInSeconds - (this.initialTimestamp || 0);\r\n\t}\r\n}\r\n","import { BlockType, CardType, GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { ActionButtonUsedAction } from '../../models/action/action-button-used-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class ActionButtonUsedParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ActionHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (parseInt(item.node.attributes.type) !== BlockType.PLAY) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst entity = entitiesBeforeAction.get(parseInt(item.node.attributes.entity));\r\n\t\tif (!entity) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tif (entity.getTag(GameTag.CARDTYPE) === CardType.HERO_POWER || entity.getTag(GameTag.BACON_ACTION_CARD) === 1) {\r\n\t\t\treturn [\r\n\t\t\t\tActionButtonUsedAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\tentityId: entity.id,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t}\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { AttachingEnchantmentAction } from '../../models/action/attaching-enchantment-action';\r\nimport { CardTargetAction } from '../../models/action/card-target-action';\r\nimport { PowerTargetAction } from '../../models/action/power-target-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { ActionParserConfig } from '../../models/models';\r\nimport { deepEqual } from '../../utils';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class AttachingEnchantmentParser implements Parser {\r\n\tconstructor(\r\n\t\tprivate readonly allCards: AllCardsService,\r\n\t\tprivate readonly config: ActionParserConfig,\r\n\t) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.ZONE && item.tag.value === Zone.PLAY;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (!this.config.showEnchantments) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst entityId = item.tag.entity;\r\n\t\tconst entity = entitiesBeforeAction.get(entityId);\r\n\t\tif (!entity) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// Some specific stuff for Battlegrounds. Not super clean\r\n\t\tif (['TB_BaconShop_8P_PlayerE', 'TB_BaconShop_1P_PlayerE'].indexOf(entity.cardID) !== -1) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst attachedToEntityId = entity.getTag(GameTag.ATTACHED);\r\n\t\tif (!attachedToEntityId) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst creatorId = entity.getTag(GameTag.CREATOR);\r\n\r\n\t\treturn [\r\n\t\t\tAttachingEnchantmentAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\toriginId: creatorId,\r\n\t\t\t\t\t// Enchantments with the same name are duplicated so we have a 1-1 mapping\r\n\t\t\t\t\t// with the card that is enchanted\r\n\t\t\t\t\tenchantmentCardId: entity.cardID,\r\n\t\t\t\t\ttargetIds: [attachedToEntityId],\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<AttachingEnchantmentAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previousAction: Action, currentAction: Action): boolean {\r\n\t\tif (\r\n\t\t\tpreviousAction instanceof AttachingEnchantmentAction &&\r\n\t\t\tcurrentAction instanceof AttachingEnchantmentAction\r\n\t\t) {\r\n\t\t\tconst prev = previousAction as AttachingEnchantmentAction;\r\n\t\t\tconst curr = currentAction as AttachingEnchantmentAction;\r\n\t\t\tif (prev.originId === curr.originId && prev.enchantmentCardId === curr.enchantmentCardId) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (\r\n\t\t\t(previousAction instanceof CardTargetAction || previousAction instanceof PowerTargetAction) &&\r\n\t\t\tcurrentAction instanceof AttachingEnchantmentAction\r\n\t\t) {\r\n\t\t\t// // console.log('merging enchantment into target?', previousAction, currentAction);\r\n\t\t\tif (\r\n\t\t\t\tpreviousAction.originId === currentAction.originId &&\r\n\t\t\t\tdeepEqual(previousAction.targetIds ?? [], currentAction.targetIds ?? [])\r\n\t\t\t) {\r\n\t\t\t\t// // console.log('merging enchantment into target', previousAction, currentAction);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate mergeActions(\r\n\t\tpreviousAction: AttachingEnchantmentAction | CardTargetAction | PowerTargetAction,\r\n\t\tcurrentAction: AttachingEnchantmentAction,\r\n\t): AttachingEnchantmentAction {\r\n\t\tconst targetIds =\r\n\t\t\tpreviousAction instanceof AttachingEnchantmentAction\r\n\t\t\t\t? [...(previousAction.targetIds ?? []), ...(currentAction.targetIds ?? [])].filter(\r\n\t\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t\t)\r\n\t\t\t\t: (currentAction.targetIds ?? []).filter((id, index, self) => self.indexOf(id) === index);\r\n\t\treturn AttachingEnchantmentAction.create(\r\n\t\t\t{\r\n\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\tindex: previousAction.index,\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\toriginId: currentAction.originId,\r\n\t\t\t\tenchantmentCardId: currentAction.enchantmentCardId,\r\n\t\t\t\ttargetIds,\r\n\t\t\t},\r\n\t\t\tthis.allCards,\r\n\t\t);\r\n\t}\r\n}\r\n","import { BlockType, GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { AttackAction } from '../../models/action/attack-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class AttackParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ActionHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (parseInt(item.node.attributes.type) !== BlockType.ATTACK) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet target = parseInt(item.node.attributes.target);\r\n\t\tif (!target) {\r\n\t\t\t// console.warn('Could not parse target entity id', item);\r\n\t\t\ttarget = ActionHelper.getTag(item.node.tags, GameTag.PROPOSED_DEFENDER);\r\n\t\t}\r\n\t\t// Happens when buying items for Battlegrounds\r\n\t\tif (!target) {\r\n\t\t\t// console.warn('Could not parse target entity id at all', item);\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\treturn [\r\n\t\t\tAttackAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\toriginId: parseInt(item.node.attributes.entity),\r\n\t\t\t\t\ttargetId: target,\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { CardType, GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../../models/action/action';\r\nimport { BaconBattleOverAction } from '../../../models/action/battlegrounds/bacon-battle-over-action';\r\nimport { Entity } from '../../../models/game/entity';\r\nimport { HistoryItem } from '../../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../../models/history/tag-change-history-item';\r\nimport { GameHepler } from '../../../models/models';\r\nimport { AllCardsService } from '../../all-cards.service';\r\nimport { ActionHelper } from '../action-helper';\r\nimport { Parser } from '../parser';\r\n\r\nexport class BaconBattleOverParser implements Parser {\r\n\tconstructor(private readonly allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.ATK;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\t// TODO: add checks that we are indeed in a Battlegrounds game?\r\n\t\t// // console.log('visual', item.tag.value, item);\r\n\t\tif (GameHepler.getGameEntity(entitiesBeforeAction).getTag(GameTag.TECH_LEVEL_MANA_GEM) !== 1) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tconst entity = entitiesBeforeAction.get(item.tag.entity);\r\n\t\tif (!entity || entity.getCardType() !== CardType.HERO) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tif (item.tag.value === 0) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\treturn [\r\n\t\t\tBaconBattleOverAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t} as BaconBattleOverAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<BaconBattleOverAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previous: Action, current: Action): boolean {\r\n\t\treturn previous instanceof BaconBattleOverAction && current instanceof BaconBattleOverAction;\r\n\t}\r\n\r\n\tprivate mergeActions(\r\n\t\tpreviousAction: BaconBattleOverAction,\r\n\t\tcurrentAction: BaconBattleOverAction,\r\n\t): BaconBattleOverAction {\r\n\t\t// // console.log(\r\n\t\t// \t'reduce 150',\r\n\t\t// \tpreviousAction.entities.get(150) && previousAction.entities.get(150).tags.toJS(),\r\n\t\t// \tpreviousAction,\r\n\t\t// );\r\n\t\treturn previousAction;\r\n\t}\r\n}\r\n","import { GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../../models/action/action';\r\nimport { BaconBoardVisualStateAction } from '../../../models/action/battlegrounds/bacon-board-visual-state-action';\r\nimport { Entity } from '../../../models/game/entity';\r\nimport { HistoryItem } from '../../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../../models/history/tag-change-history-item';\r\nimport { AllCardsService } from '../../all-cards.service';\r\nimport { Parser } from '../parser';\r\n\r\nexport class BaconBoardVisualStateParser implements Parser {\r\n\tconstructor(private readonly allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.BOARD_VISUAL_STATE;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\t// TODO: add checks that we are indeed in a Battlegrounds game?\r\n\t\t// // console.log('visual', item.tag.value, item);\r\n\t\treturn [\r\n\t\t\tBaconBoardVisualStateAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tnewState: item.tag.value,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t} as BaconBoardVisualStateAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../../models/action/action';\r\nimport { BaconOpponentRevealedAction } from '../../../models/action/battlegrounds/bacon-opponent-revealed-action';\r\nimport { Entity } from '../../../models/game/entity';\r\nimport { PlayerEntity } from '../../../models/game/player-entity';\r\nimport { HistoryItem } from '../../../models/history/history-item';\r\nimport { CardPlayedFromHandAction, FullEntityHistoryItem } from '../../../models/models';\r\nimport { AllCardsService } from '../../all-cards.service';\r\nimport { ActionHelper } from '../action-helper';\r\nimport { Parser } from '../parser';\r\n\r\nexport class BaconOpponentRevealedParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn (\r\n\t\t\titem instanceof FullEntityHistoryItem &&\r\n\t\t\titem.entityDefintion.tags &&\r\n\t\t\titem.entityDefintion.tags[GameTag[GameTag.ZONE]] === Zone.SETASIDE &&\r\n\t\t\titem.entityDefintion.tags[GameTag[GameTag.BACON_HERO_CAN_BE_DRAFTED]] === 1\r\n\t\t);\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: FullEntityHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t\tplayers: readonly PlayerEntity[],\r\n\t): Action[] {\r\n\t\tif (currentTurn > 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// // console.log('adding hero to the list of opponents', item);\r\n\t\treturn [\r\n\t\t\tBaconOpponentRevealedAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\topponentIds: [item.entityDefintion.id] as readonly number[],\r\n\t\t\t\t} as BaconOpponentRevealedAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<BaconOpponentRevealedAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) =>\r\n\t\t\t\tprevious instanceof BaconOpponentRevealedAction && current instanceof BaconOpponentRevealedAction,\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t\t// When player hero is revealed\r\n\t\t\t(previous, current) =>\r\n\t\t\t\tprevious instanceof CardPlayedFromHandAction && current instanceof BaconOpponentRevealedAction,\r\n\t\t);\r\n\t}\r\n\r\n\tprivate mergeActions(\r\n\t\tpreviousAction: BaconOpponentRevealedAction,\r\n\t\tcurrentAction: BaconOpponentRevealedAction,\r\n\t): BaconOpponentRevealedAction {\r\n\t\tconst result = BaconOpponentRevealedAction.create(\r\n\t\t\t{\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\tindex: previousAction.index,\r\n\t\t\t\topponentIds: [...(previousAction.opponentIds ?? []), ...(currentAction.opponentIds ?? [])] as readonly number[],\r\n\t\t\t} as BaconOpponentRevealedAction,\r\n\t\t\tthis.allCards,\r\n\t\t);\r\n\t\t// // console.log(\r\n\t\t// \t'reduce 150 bacoin',\r\n\t\t// \tpreviousAction.entities.get(150) && previousAction.entities.get(150).tags.toJS(),\r\n\t\t// \tresult.entities.get(150) && result.entities.get(150).tags.toJS(),\r\n\t\t// \tpreviousAction,\r\n\t\t// );\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { GameTag, MetaTags } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { CardBurnAction } from '../../models/action/card-burn-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { MetadataHistoryItem } from '../../models/history/metadata-history-item';\r\nimport { Info } from '../../models/parser/info';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class CardBurnParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn (\r\n\t\t\titem instanceof MetadataHistoryItem &&\r\n\t\t\t(item as MetadataHistoryItem).meta.meta === MetaTags[MetaTags.BURNED_CARD]\r\n\t\t);\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: MetadataHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\treturn item.meta.info.map((info) => this.buildBurnAction(item, info, entitiesBeforeAction));\r\n\t}\r\n\r\n\tprivate buildBurnAction(item: MetadataHistoryItem, info: Info, entitiesBeforeAction: Map<number, Entity>): Action {\r\n\t\tconst controller = entitiesBeforeAction.get(info.entity).getTag(GameTag.CONTROLLER);\r\n\t\tif (!controller) {\r\n\t\t\tconsole.warn('[card-burn-parser] empty controller', info, entitiesBeforeAction.get(info.entity));\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn CardBurnAction.create(\r\n\t\t\t{\r\n\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\tindex: item.index,\r\n\t\t\t\tcontroller,\r\n\t\t\t\tburnedCardIds: [info.entity],\r\n\t\t\t},\r\n\t\t\tthis.allCards,\r\n\t\t);\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<CardBurnAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previous: Action, current: Action): boolean {\r\n\t\tif (!(previous instanceof CardBurnAction && current instanceof CardBurnAction)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (previous.controller === undefined || current.controller === undefined) {\r\n\t\t\tconsole.warn('[card-burn-parser] Empty controller for burn action', previous, current);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn previous.controller === current.controller;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: CardBurnAction, currentAction: CardBurnAction): CardBurnAction {\r\n\t\treturn CardBurnAction.create(\r\n\t\t\t{\r\n\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\tindex: currentAction.index,\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\tcontroller: currentAction.controller,\r\n\t\t\t\tburnedCardIds: [...(previousAction.burnedCardIds ?? []), ...(currentAction.burnedCardIds ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t),\r\n\t\t\t},\r\n\t\t\tthis.allCards,\r\n\t\t);\r\n\t}\r\n}\r\n","import { GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { CardDiscardAction } from '../../models/action/card-discard-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class CardDiscardParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn (\r\n\t\t\titem instanceof TagChangeHistoryItem && item.tag.tag === GameTag.ZONE && item.tag.value === Zone.SETASIDE\r\n\t\t);\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (currentTurn === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst entity = entitiesBeforeAction.get(item.tag.entity);\r\n\t\tif (!entity) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst previousZone = entity.getTag(GameTag.ZONE);\r\n\t\tif (previousZone === Zone.HAND) {\r\n\t\t\tconst controller = entitiesBeforeAction.get(item.tag.entity).getTag(GameTag.CONTROLLER);\r\n\t\t\tif (!controller) {\r\n\t\t\t\tconsole.warn('[card-discard-parser] empty controller', item, entitiesBeforeAction.get(item.tag.entity));\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn [\r\n\t\t\t\tCardDiscardAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\tcontroller,\r\n\t\t\t\t\t\tdata: [item.tag.entity],\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn [];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<CardDiscardAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previous: Action, current: Action): boolean {\r\n\t\tif (!(previous instanceof CardDiscardAction && current instanceof CardDiscardAction)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (previous.controller === undefined || current.controller === undefined) {\r\n\t\t\tconsole.warn('[card-discard-parser] Empty controller for draw action', previous, current);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn previous.controller === current.controller;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: CardDiscardAction, currentAction: CardDiscardAction): CardDiscardAction {\r\n\t\treturn CardDiscardAction.create(\r\n\t\t\t{\r\n\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\tindex: currentAction.index,\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\tcontroller: currentAction.controller,\r\n\t\t\t\tdata: [...(previousAction.data ?? []), ...(currentAction.data ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t),\r\n\t\t\t},\r\n\t\t\tthis.allCards,\r\n\t\t);\r\n\t}\r\n}\r\n","import { GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { CardDrawAction } from '../../models/action/card-draw-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { FullEntityHistoryItem } from '../../models/history/full-entity-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { ShowEntityHistoryItem } from '../../models/history/show-entity-history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class CardDrawParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn (\r\n\t\t\titem instanceof TagChangeHistoryItem ||\r\n\t\t\titem instanceof FullEntityHistoryItem ||\r\n\t\t\titem instanceof ShowEntityHistoryItem\r\n\t\t);\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem | FullEntityHistoryItem | ShowEntityHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (item)\r\n\t\t\tif (currentTurn === 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t// We typically get a TagChange when the card is hidden, so typically when our opponent draws a card\r\n\t\tif (item instanceof TagChangeHistoryItem) {\r\n\t\t\t// if (item.tag.entity === 37) {\r\n\t\t\t// \tconsole.warn('handling card draw from tagchange?', item);\r\n\t\t\t// }\r\n\t\t\tif (!entitiesBeforeAction.get(item.tag.entity)) {\r\n\t\t\t\t// console.warn('could not get drawn entity from tag change', item);\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t\tconst previousZone = entitiesBeforeAction.get(item.tag.entity).getTag(GameTag.ZONE);\r\n\t\t\tif (\r\n\t\t\t\titem.tag.tag === GameTag.ZONE &&\r\n\t\t\t\titem.tag.value === Zone.HAND &&\r\n\t\t\t\t// SETASIDE is for discovery actions\r\n\t\t\t\t(previousZone === Zone.DECK || previousZone === Zone.SETASIDE || !previousZone)\r\n\t\t\t) {\r\n\t\t\t\tconst controller = entitiesBeforeAction.get(item.tag.entity).getTag(GameTag.CONTROLLER);\r\n\t\t\t\tif (!controller) {\r\n\t\t\t\t\tconsole.warn(\r\n\t\t\t\t\t\t'[card-draw-parser] empty controller',\r\n\t\t\t\t\t\titem,\r\n\t\t\t\t\t\tentitiesBeforeAction.get(item.tag.entity),\r\n\t\t\t\t\t);\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\treturn [\r\n\t\t\t\t\tCardDrawAction.create(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\t\tcontroller,\r\n\t\t\t\t\t\t\tdata: [item.tag.entity],\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tthis.allCards,\r\n\t\t\t\t\t),\r\n\t\t\t\t];\r\n\t\t\t} else {\r\n\t\t\t\t// if (item.tag.entity === 37) {\r\n\t\t\t\t// \tconsole.warn('invalid previous zone', previousZone);\r\n\t\t\t\t// }\r\n\t\t\t}\r\n\t\t} else if (item instanceof ShowEntityHistoryItem) {\r\n\t\t\t// if (item.entityDefintion.id === 37) {\r\n\t\t\t// \tconsole.warn('hanndling card draw showentity?', item);\r\n\t\t\t// }\r\n\t\t\tif (!entitiesBeforeAction.get(item.entityDefintion.id)) {\r\n\t\t\t\t// if (item.entityDefintion.id === 37) {\r\n\t\t\t\t// \tconsole.warn('could not get drawn entity from showentity', item);\r\n\t\t\t\t// }\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t\tconst previousZone = entitiesBeforeAction.get(item.entityDefintion.id).getTag(GameTag.ZONE);\r\n\t\t\tif (\r\n\t\t\t\titem.entityDefintion.tags[GameTag[GameTag.ZONE]] === Zone.HAND &&\r\n\t\t\t\t(previousZone === Zone.DECK || !previousZone)\r\n\t\t\t) {\r\n\t\t\t\tconst controller = entitiesBeforeAction.get(item.entityDefintion.id).getTag(GameTag.CONTROLLER);\r\n\t\t\t\tif (!controller) {\r\n\t\t\t\t\tconsole.warn('empty controller', item, entitiesBeforeAction.get(item.entityDefintion.id));\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\treturn [\r\n\t\t\t\t\tCardDrawAction.create(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\t\tcontroller,\r\n\t\t\t\t\t\t\tdata: [item.entityDefintion.id],\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tthis.allCards,\r\n\t\t\t\t\t),\r\n\t\t\t\t];\r\n\t\t\t} else {\r\n\t\t\t\t// if (item.entityDefintion.id === 37) {\r\n\t\t\t\t// \tconsole.warn('invalid previous zone from showentity?', previousZone, item);\r\n\t\t\t\t// }\r\n\t\t\t}\r\n\t\t} else if (item instanceof FullEntityHistoryItem) {\r\n\t\t\tif (!entitiesBeforeAction.get(item.entityDefintion.id)) {\r\n\t\t\t\t// console.warn('could not get drawn entity from fullen', item);\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t\tconst zone = item.entityDefintion.tags[GameTag[GameTag.ZONE]];\r\n\t\t\tif (zone !== Zone.HAND) {\r\n\t\t\t\t// console.warn('incorrect zone from showentity', item);\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t\tconst previousZone = entitiesBeforeAction.get(item.entityDefintion.id).getTag(GameTag.ZONE);\r\n\t\t\tif (previousZone && previousZone !== Zone.DECK) {\r\n\t\t\t\t// console.warn('previous zone was not deck', item);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst controller =\r\n\t\t\t\titem.entityDefintion.tags[GameTag[GameTag.CONTROLLER]] ||\r\n\t\t\t\tentitiesBeforeAction.get(item.entityDefintion.id).getTag(GameTag.CONTROLLER);\r\n\t\t\tif (!controller) {\r\n\t\t\t\tconsole.warn('[card-draw-parser] empty controller', item);\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t\treturn [\r\n\t\t\t\tCardDrawAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\tcontroller,\r\n\t\t\t\t\t\tdata: [item.entityDefintion.id],\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn [];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<CardDrawAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previous: Action, current: Action): boolean {\r\n\t\tif (!(previous instanceof CardDrawAction && current instanceof CardDrawAction)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (previous.controller === undefined || current.controller === undefined) {\r\n\t\t\tconsole.warn('[card-draw-parser] Empty controller for draw action', previous, current);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn previous.controller === current.controller;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: CardDrawAction, currentAction: CardDrawAction): CardDrawAction {\r\n\t\treturn CardDrawAction.create(\r\n\t\t\t{\r\n\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\tindex: currentAction.index,\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\tcontroller: currentAction.controller,\r\n\t\t\t\tdata: [...(previousAction.data ?? []), ...(currentAction.data ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t),\r\n\t\t\t},\r\n\t\t\tthis.allCards,\r\n\t\t);\r\n\t}\r\n}\r\n","import { BlockType, CardType, GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { CardPlayedFromHandAction } from '../../models/action/card-played-from-hand-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class CardPlayedFromHandParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ActionHistoryItem || item instanceof TagChangeHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem | TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (item instanceof ActionHistoryItem && parseInt(item.node.attributes.type) === BlockType.PLAY) {\r\n\t\t\t// The case of a ShowEntity (or FullEntity) when we didn't previously know the\r\n\t\t\t// card. In that case, a ShowEntity (or FullEntity) element is created that contains\r\n\t\t\t// the tag with the proper zone\r\n\t\t\t// Use entities when playing Eviscerate at t6o at\r\n\t\t\t// http://www.zerotoheroes.com/r/hearthstone/572de12ee4b0d4231295c49e/an-arena-game-going-5-0\r\n\t\t\tconst result = [];\r\n\t\t\tif (item.node.showEntities) {\r\n\t\t\t\tfor (const showEntity of item.node.showEntities) {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tshowEntity.tags[GameTag[GameTag.ZONE]] === Zone.PLAY &&\r\n\t\t\t\t\t\tshowEntity.tags[GameTag[GameTag.CARDTYPE]] !== CardType.ENCHANTMENT\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tresult.push(\r\n\t\t\t\t\t\t\tCardPlayedFromHandAction.create(\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttimestamp: showEntity.attributes.ts,\r\n\t\t\t\t\t\t\t\t\tindex: showEntity.index,\r\n\t\t\t\t\t\t\t\t\tentityId: showEntity.id,\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tthis.allCards,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn result;\r\n\t\t} else if (item instanceof TagChangeHistoryItem) {\r\n\t\t\t// The case of a ShowEntity command when the card was already known - basically\r\n\t\t\t// when we play our own card. In that case, the tags are already known, and\r\n\t\t\t// tag changes are the only things we care about\r\n\t\t\tif (item.tag.tag === GameTag.ZONE && item.tag.value === Zone.PLAY) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tentitiesBeforeAction.get(item.tag.entity) &&\r\n\t\t\t\t\tentitiesBeforeAction.get(item.tag.entity).getTag(GameTag.CARDTYPE) !== CardType.ENCHANTMENT &&\r\n\t\t\t\t\tentitiesBeforeAction.get(item.tag.entity).getTag(GameTag.ZONE) === Zone.HAND\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn [\r\n\t\t\t\t\t\tCardPlayedFromHandAction.create(\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\t\t\tentityId: item.tag.entity,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tthis.allCards,\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// For blood gems\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<Action>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previousAction: Action, currentAction: Action): boolean {\r\n\t\tif (previousAction instanceof CardPlayedFromHandAction && currentAction instanceof CardPlayedFromHandAction) {\r\n\t\t\t// console.log('Merging card played from hand actions', previousAction, currentAction);\r\n\t\t\tif (\r\n\t\t\t\tpreviousAction.entities.get(previousAction.originId)?.getTag(GameTag.CARDTYPE) === CardType.SPELL &&\r\n\t\t\t\tpreviousAction.entities.get(previousAction.originId)?.cardID ===\r\n\t\t\t\t\tcurrentAction.entities.get(currentAction.originId)?.cardID\r\n\t\t\t) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: Action, currentAction: Action): Action {\r\n\t\treturn ActionHelper.mergeIntoFirstAction(previousAction, currentAction, {\r\n\t\t\tentities: currentAction.entities,\r\n\t\t\toriginId: currentAction.originId,\r\n\t\t\ttargetIds: [...(previousAction.targetIds ?? []), ...(currentAction.targetIds ?? [])].filter(\r\n\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t) as readonly number[],\r\n\t\t} as CardPlayedFromHandAction);\r\n\t}\r\n}\r\n","import { BlockType, CardIds } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { AttachingEnchantmentAction } from '../../models/action/attaching-enchantment-action';\r\nimport { CardTargetAction } from '../../models/action/card-target-action';\r\nimport { TradeAction } from '../../models/action/trade-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { ActionButtonUsedAction, CardPlayedFromHandAction } from '../../models/models';\r\nimport { deepEqual } from '../../utils';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class CardTargetParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ActionHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (\r\n\t\t\tparseInt(item.node.attributes.type) !== BlockType.POWER &&\r\n\t\t\tparseInt(item.node.attributes.type) !== BlockType.TRIGGER\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst originId = parseInt(item.node.attributes.entity);\r\n\t\tconst entity = entitiesBeforeAction.get(originId);\r\n\t\tif (!entity) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\t// Remove the dummy effects\r\n\t\tif (\r\n\t\t\t[\r\n\t\t\t\t'DALA_744d',\r\n\t\t\t\tCardIds.BloodGemNoImpactToken,\r\n\t\t\t\tCardIds.BloodGemNoImpactFromTeammateDnt_BGDUO20_GEM_No_Impact_Copy,\r\n\t\t\t].includes(entity.cardID)\r\n\t\t) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tconst targetId = parseInt(item.node.attributes.target);\r\n\t\tif (targetId > 0) {\r\n\t\t\treturn [\r\n\t\t\t\tCardTargetAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\toriginId,\r\n\t\t\t\t\t\ttargetIds: [targetId],\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<Action>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previousAction: Action, currentAction: Action): boolean {\r\n\t\tif (previousAction instanceof CardTargetAction && currentAction instanceof CardTargetAction) {\r\n\t\t\tif ((previousAction as CardTargetAction).originId === (currentAction as CardTargetAction).originId) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (previousAction instanceof ActionButtonUsedAction) {\r\n\t\t\treturn previousAction.entityId === currentAction.originId;\r\n\t\t}\r\n\t\tif (previousAction instanceof TradeAction) {\r\n\t\t\treturn previousAction.originId === currentAction.originId;\r\n\t\t}\r\n\t\tif (previousAction instanceof AttachingEnchantmentAction && currentAction instanceof CardTargetAction) {\r\n\t\t\tif (\r\n\t\t\t\tpreviousAction.originId === currentAction.originId &&\r\n\t\t\t\tdeepEqual(previousAction.targetIds ?? [], currentAction.targetIds ?? [])\r\n\t\t\t) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (previousAction instanceof CardPlayedFromHandAction && currentAction instanceof CardTargetAction) {\r\n\t\t\tif (previousAction.entityId === currentAction.originId) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: Action, currentAction: Action): Action {\r\n\t\tif (currentAction instanceof AttachingEnchantmentAction) {\r\n\t\t\tconsole.warn(\r\n\t\t\t\t'incorrect AttachingEnchantmentAction as current action for card-target-parser',\r\n\t\t\t\tcurrentAction,\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (previousAction instanceof ActionButtonUsedAction) {\r\n\t\t\t// // console.log('merging actions', previousAction, currentAction);\r\n\t\t\treturn ActionHelper.mergeIntoFirstAction(previousAction, currentAction, {\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\tentityId: previousAction.entityId,\r\n\t\t\t\toriginId: currentAction.originId,\r\n\t\t\t\ttargetIds: [...(previousAction.targetIds ?? []), ...(currentAction.targetIds ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t) as readonly number[],\r\n\t\t\t} as ActionButtonUsedAction);\r\n\t\t} else if (previousAction instanceof CardPlayedFromHandAction) {\r\n\t\t\t// // console.log('merging actions', previousAction, currentAction);\r\n\t\t\treturn ActionHelper.mergeIntoFirstAction(previousAction, currentAction, {\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\tentityId: previousAction.entityId,\r\n\t\t\t\toriginId: currentAction.originId,\r\n\t\t\t\ttargetIds: [...(previousAction.targetIds ?? []), ...(currentAction.targetIds ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t) as readonly number[],\r\n\t\t\t} as CardPlayedFromHandAction);\r\n\t\t} else if (previousAction instanceof CardTargetAction) {\r\n\t\t\treturn CardTargetAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\t\tindex: previousAction.index,\r\n\t\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\t\toriginId: currentAction.originId,\r\n\t\t\t\t\ttargetIds: [...(previousAction.targetIds ?? []), ...(currentAction.targetIds ?? [])].filter(\r\n\t\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t\t) as readonly number[],\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t} else if (previousAction instanceof AttachingEnchantmentAction || previousAction instanceof TradeAction) {\r\n\t\t\treturn previousAction;\r\n\t\t}\r\n\t}\r\n}\r\n","import { CardType, GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { AttackAction } from '../../models/action/attack-action';\r\nimport { DamageAction } from '../../models/action/damage-action';\r\nimport { HealingAction } from '../../models/action/healing-action';\r\nimport { PowerTargetAction } from '../../models/action/power-target-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport {\r\n\tActionButtonUsedAction,\r\n\tCardPlayedFromHandAction,\r\n\tFullEntityHistoryItem,\r\n\tGameEntity,\r\n\tGameHepler,\r\n} from '../../models/models';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class DamageParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.DAMAGE;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tconst entity = entitiesBeforeAction.get(item.tag.entity);\r\n\t\t// Damage is reset to 0 after an entity dies, and we don't want to show this\r\n\t\tif (!entity || entity.getTag(GameTag.ZONE) !== Zone.PLAY) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\t// Ignore damage to locations\r\n\t\tif (entity.getTag(GameTag.CARDTYPE) === CardType?.LOCATION) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst previousDamageTag = entity.getTag(GameTag.DAMAGE);\r\n\t\tconst previousDamage = !previousDamageTag || previousDamageTag === -1 ? 0 : previousDamageTag;\r\n\t\tconst damageTaken = item.tag.value - previousDamage;\r\n\t\t// If we are in battlegrounds, things are a bit trickier. We don't want to show the\r\n\t\t// damage taken by the opponent hero at the start of a battle\r\n\t\tconst gameEntity: GameEntity = GameHepler.getGameEntity(entitiesBeforeAction) as GameEntity;\r\n\t\tif (gameEntity.isBattlegrounds()) {\r\n\t\t\tconst historyIndex = history.indexOf(item);\r\n\t\t\tif (historyIndex > 0) {\r\n\t\t\t\tconst previous = history[historyIndex - 1];\r\n\t\t\t\tif (\r\n\t\t\t\t\tprevious instanceof FullEntityHistoryItem &&\r\n\t\t\t\t\tprevious.entityDefintion.cardID &&\r\n\t\t\t\t\tprevious.entityDefintion.cardID.indexOf('TB_BaconShop_HP_') !== -1\r\n\t\t\t\t) {\r\n\t\t\t\t\treturn [];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (entity.id === 641) {\r\n\t\t\t// console.log('adding damage action', item, damageTaken, previousDamageTag, entity.tags.toJS());\r\n\t\t}\r\n\t\tif (damageTaken > 0) {\r\n\t\t\treturn [\r\n\t\t\t\tDamageAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\tdamages: Map.of(item.tag.entity, damageTaken),\r\n\t\t\t\t\t} as Action,\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t} else if (damageTaken < 0) {\r\n\t\t\treturn [\r\n\t\t\t\tHealingAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\tdamages: Map.of(item.tag.entity, damageTaken),\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<Action>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previousAction: Action, currentAction: Action): boolean {\r\n\t\tif (currentAction instanceof DamageAction) {\r\n\t\t\treturn (\r\n\t\t\t\tpreviousAction instanceof DamageAction || // Merge all damages into a single action\r\n\t\t\t\tpreviousAction instanceof AttackAction || // Add damage to the attack causing the damage\r\n\t\t\t\tpreviousAction instanceof PowerTargetAction || // Add damages to the power causing the damage\r\n\t\t\t\tpreviousAction instanceof ActionButtonUsedAction ||\r\n\t\t\t\tpreviousAction instanceof CardPlayedFromHandAction // It's usually teh same \"action\"\r\n\t\t\t);\r\n\t\t} else if (currentAction instanceof HealingAction) {\r\n\t\t\treturn (\r\n\t\t\t\tpreviousAction instanceof HealingAction || // Merge all heals into a single action\r\n\t\t\t\tpreviousAction instanceof AttackAction || // Add heal to the attack causing the heal\r\n\t\t\t\tpreviousAction instanceof PowerTargetAction || // Add heals to the power causing the heal\r\n\t\t\t\tpreviousAction instanceof ActionButtonUsedAction || // Add heals to the power causing the heal\r\n\t\t\t\tpreviousAction instanceof CardPlayedFromHandAction // It's usually teh same \"action\"\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: Action, currentAction: Action): Action {\r\n\t\treturn this.mergeDamageIntoAction(previousAction, currentAction as DamageAction);\r\n\t}\r\n\r\n\tprivate mergeDamageIntoAction(previousAction: Action, currentAction: DamageAction): Action {\r\n\t\tconst result = ActionHelper.mergeIntoFirstAction(previousAction, currentAction, {\r\n\t\t\tindex: currentAction.index,\r\n\t\t\tentities: currentAction.entities,\r\n\t\t} as Action);\r\n\t\treturn result;\r\n\t}\r\n}\r\n","import { ChoiceType } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { DiscoverAction } from '../../models/action/discover-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ChoicesHistoryItem } from '../../models/history/choices-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class DiscoverParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ChoicesHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ChoicesHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (item.choices.type !== ChoiceType.GENERAL) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\treturn [\r\n\t\t\tDiscoverAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\toriginId: item.choices.source,\r\n\t\t\t\t\townerId: item.choices.playerID,\r\n\t\t\t\t\tchoices: item.choices.cards as readonly number[],\r\n\t\t\t\t} as DiscoverAction,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { DiscoverAction } from '../../models/action/discover-action';\r\nimport { DiscoveryPickAction } from '../../models/action/discovery-pick-action';\r\nimport { StartTurnAction } from '../../models/action/start-turn-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ChosenEntityHistoryItem } from '../../models/history/chosen-entities-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class DiscoveryPickParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ChosenEntityHistoryItem && item.tag.cards && item.tag.cards.length === 1;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ChosenEntityHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\treturn [\r\n\t\t\tDiscoveryPickAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\towner: item.tag.playerID,\r\n\t\t\t\t\tchoice: item.tag.cards[0],\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<Action>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previousAction: Action, currentAction: Action): boolean {\r\n\t\t// Merge it into the discover action\r\n\t\tif (previousAction instanceof DiscoverAction && currentAction instanceof DiscoveryPickAction) {\r\n\t\t\treturn true;\r\n\t\t} else if (currentAction instanceof DiscoveryPickAction) {\r\n\t\t\t// Mulligan is handled differently\r\n\t\t\tif (!(previousAction instanceof StartTurnAction)) {\r\n\t\t\t\tconsole.warn('removing discovery pick action', previousAction);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: Action, currentAction: Action): Action {\r\n\t\tif (previousAction instanceof DiscoverAction && currentAction instanceof DiscoveryPickAction) {\r\n\t\t\treturn previousAction.updateAction<DiscoverAction>({\r\n\t\t\t\tchosen: [currentAction.choice] as readonly number[],\r\n\t\t\t} as DiscoverAction);\r\n\t\t}\r\n\t\treturn previousAction;\r\n\t}\r\n}\r\n","import { GameTag, PlayState } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { EndGameAction } from '../../models/action/end-game-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { PlayerEntity } from '../../models/game/player-entity';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class EndGameParser implements Parser {\r\n\tconstructor(private readonly allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn (\r\n\t\t\titem instanceof TagChangeHistoryItem &&\r\n\t\t\titem.tag.tag === GameTag.PLAYSTATE &&\r\n\t\t\t[PlayState.LOST, PlayState.WON, PlayState.TIED, PlayState.CONCEDED].indexOf(item.tag.value) !== -1\r\n\t\t);\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t\tplayers: readonly PlayerEntity[],\r\n\t): Action[] {\r\n\t\t// // console.log('end game action', item);\r\n\t\treturn [\r\n\t\t\tEndGameAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\tentityId: players[0].id,\r\n\t\t\t\t\topponentId: players[1].id,\r\n\t\t\t\t\twinStatus: [[item.tag.entity, item.tag.value]],\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<EndGameAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previous: Action, current: Action): boolean {\r\n\t\t// Absorbs all actions after the end game\r\n\t\treturn previous instanceof EndGameAction;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: EndGameAction, currentAction: EndGameAction): EndGameAction {\r\n\t\tconst winStatus: readonly [number, number][] = [\r\n\t\t\t...(previousAction.winStatus || []),\r\n\t\t\t...(currentAction.winStatus || []),\r\n\t\t];\r\n\t\t// // console.log('merging actions', winStatus, previousAction);\r\n\t\treturn previousAction.updateAction<EndGameAction>({\r\n\t\t\twinStatus,\r\n\t\t} as EndGameAction);\r\n\t}\r\n}\r\n","import { GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { FatigueDamageAction } from '../../models/action/fatigue-damage-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class FatigueDamageParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.FATIGUE;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\treturn [\r\n\t\t\tFatigueDamageAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\tcontroller: item.tag.entity,\r\n\t\t\t\t\tamount: item.tag.value,\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { BlockType, CardType, GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { LocationActivatedAction } from '../../models/action/location-activated-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class LocationActivatedParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ActionHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (parseInt(item.node.attributes.type) !== BlockType.POWER) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tif (item.node.isSelfClosing) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst entity = entitiesBeforeAction.get(parseInt(item.node.attributes.entity));\r\n\t\tif (!entity) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tif (entity.getTag(GameTag.CARDTYPE) !== CardType.LOCATION) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\treturn [\r\n\t\t\tLocationActivatedAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\toriginId: entity.id,\r\n\t\t\t\t\tdebug: item,\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t\t// return ActionHelper.combineActions<Action>(\r\n\t\t// \tactions,\r\n\t\t// \t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t// \t(previous, current) => this.mergeActions(previous, current),\r\n\t\t// );\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previousAction: Action, currentAction: Action): boolean {\r\n\t\tif (previousAction instanceof LocationActivatedAction) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: Action, currentAction: Action): Action {\r\n\t\t// Possibly because of some log artifacts, the same action is detected multiple times\r\n\t\tif (previousAction instanceof LocationActivatedAction && previousAction.originId === currentAction.originId) {\r\n\t\t\treturn previousAction;\r\n\t\t}\r\n\t\treturn previousAction;\r\n\t}\r\n}\r\n","import { BlockType, GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { MinionDeathAction } from '../../models/action/minion-death-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class MinionDeathParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ActionHistoryItem || item instanceof TagChangeHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem | TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (item instanceof ActionHistoryItem) {\r\n\t\t\tif (parseInt(item.node.attributes.type) !== BlockType.DEATHS) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (item.node.tags) {\r\n\t\t\t\tfor (const tag of item.node.tags) {\r\n\t\t\t\t\tif (tag.tag === GameTag.ZONE && tag.value === Zone.GRAVEYARD) {\r\n\t\t\t\t\t\treturn [\r\n\t\t\t\t\t\t\tMinionDeathAction.create(\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\t\t\t\tdeadMinions: [tag.entity],\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tthis.allCards,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t\t];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (item instanceof TagChangeHistoryItem) {\r\n\t\t\tif (item.tag.tag !== GameTag.ZONE || item.tag.value !== Zone.GRAVEYARD) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst parentActionId = item.tag.parentIndex;\r\n\t\t\tconst parentAction = history.find((historyItem) => historyItem.index === parentActionId);\r\n\t\t\t// We make sure the death occurs during a DEATH phase, so that we don't count the\r\n\t\t\t// \"dead spells\", ie spells that have been used and go to the graveyard\r\n\t\t\tif (\r\n\t\t\t\t!parentAction ||\r\n\t\t\t\t!(parentAction instanceof ActionHistoryItem) ||\r\n\t\t\t\tparseInt(parentAction.node.attributes.type) !== BlockType.DEATHS\r\n\t\t\t) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\treturn [\r\n\t\t\t\tMinionDeathAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\tdeadMinions: [item.tag.entity],\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t}\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<MinionDeathAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => previous instanceof MinionDeathAction && current instanceof MinionDeathAction,\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: MinionDeathAction, currentAction: MinionDeathAction): MinionDeathAction {\r\n\t\treturn MinionDeathAction.create(\r\n\t\t\t{\r\n\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\tindex: previousAction.index,\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\tdeadMinions: [...(previousAction.deadMinions ?? []), ...(currentAction.deadMinions ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t),\r\n\t\t\t},\r\n\t\t\tthis.allCards,\r\n\t\t);\r\n\t}\r\n}\r\n","import { GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { MulliganCardAction } from '../../models/action/mulligan-card-action';\r\nimport { MulliganCardChoiceAction } from '../../models/action/mulligan-card-choice-action';\r\nimport { StartTurnAction } from '../../models/action/start-turn-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { PlayerEntity } from '../../models/game/player-entity';\r\nimport { ChosenEntityHistoryItem } from '../../models/history/chosen-entities-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class MulliganCardChoiceParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ChosenEntityHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ChosenEntityHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t\tplayers: readonly PlayerEntity[],\r\n\t): Action[] {\r\n\t\tif (currentTurn > 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst keptCards = item.tag.cards;\r\n\t\t// Here \"playerID\" actually refers to the player entity ID (and not the playerID)\r\n\t\tconst playerHand = this.getHandEntityIds(entitiesBeforeAction, item.tag.playerID);\r\n\t\tconst mulligan = playerHand.filter(entityId => keptCards.indexOf(entityId) === -1);\r\n\t\t// // console.log('considering choice', item, players, playerHand, mulligan);\r\n\t\tif (item.tag.playerID === players[0].id) {\r\n\t\t\treturn [\r\n\t\t\t\tMulliganCardChoiceAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\tplayerMulligan: mulligan,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t} else if (item.tag.playerID === players[1].id) {\r\n\t\t\treturn [\r\n\t\t\t\tMulliganCardChoiceAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\topponentMulligan: mulligan,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t} else {\r\n\t\t\tconsole.warn('Invalid mulligan choice', item, players);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<MulliganCardChoiceAction | StartTurnAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) =>\r\n\t\t\t\t(previous instanceof MulliganCardChoiceAction && current instanceof MulliganCardChoiceAction) ||\r\n\t\t\t\t(previous instanceof StartTurnAction && current instanceof MulliganCardChoiceAction),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t\t(previous, current) =>\r\n\t\t\t\tprevious instanceof MulliganCardAction && current instanceof MulliganCardChoiceAction,\r\n\t\t);\r\n\t}\r\n\r\n\tprivate mergeActions(\r\n\t\tpreviousAction: MulliganCardChoiceAction | StartTurnAction,\r\n\t\tcurrentAction: MulliganCardChoiceAction | StartTurnAction,\r\n\t): MulliganCardChoiceAction | StartTurnAction {\r\n\t\tif (currentAction instanceof StartTurnAction) {\r\n\t\t\tconsole.warn('Invalid mulligan action merge', previousAction, currentAction);\r\n\t\t\treturn previousAction;\r\n\t\t}\r\n\t\tif (previousAction instanceof MulliganCardChoiceAction) {\r\n\t\t\t// // console.log('merging into previous mulligan action', previousAction, currentAction);\r\n\t\t\treturn MulliganCardChoiceAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\t\tindex: previousAction.index,\r\n\t\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\t\tplayerMulligan: [...(previousAction.playerMulligan ?? []), ...(currentAction.playerMulligan ?? [])],\r\n\t\t\t\t\topponentMulligan: [\r\n\t\t\t\t\t\t...(previousAction.opponentMulligan ?? []),\r\n\t\t\t\t\t\t...(currentAction.opponentMulligan ?? []),\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\t// // console.log('merging into previous turn action', previousAction, currentAction);\r\n\t\t\treturn StartTurnAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\tturn: previousAction.turn,\r\n\t\t\t\t\tentities: previousAction.entities,\r\n\t\t\t\t\tcrossedEntities: [\r\n\t\t\t\t\t\t...(previousAction.crossedEntities ?? []),\r\n\t\t\t\t\t\t...(currentAction.playerMulligan ?? []),\r\n\t\t\t\t\t\t...(currentAction.opponentMulligan ?? []),\r\n\t\t\t\t\t],\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getHandEntityIds(entities: Map<number, Entity>, playerEntityId: number): readonly number[] {\r\n\t\tconst playerEntity = ActionHelper.getOwner(entities, playerEntityId);\r\n\t\treturn entities\r\n\t\t\t.valueSeq()\r\n\t\t\t.toArray()\r\n\t\t\t.filter(entity => entity.getTag(GameTag.CONTROLLER) === playerEntity.playerId)\r\n\t\t\t.filter(entity => entity.getTag(GameTag.ZONE) === Zone.HAND)\r\n\t\t\t.map(entity => entity.id);\r\n\t}\r\n}\r\n","import { GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { MulliganCardAction } from '../../models/action/mulligan-card-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HideEntityHistoryItem } from '../../models/history/hide-entity-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/models';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class MulliganCardParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\t// Don't use the root Block here, as it can be split off in another processing chunk,\r\n\t// which means the children TagChange and HideEntity are not set yet\r\n\t// While we should generally avoid assuming children presence, turn delimitation\r\n\t// should be clear-cut enough that this should be an issue only mulligan\r\n\t// Otherwise, check that all parsers that depend on ActionHistoryItem don't use\r\n\t// their children, but only use the action itself\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn (\r\n\t\t\t(item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.ZONE && item.tag.value === Zone.DECK) ||\r\n\t\t\titem instanceof HideEntityHistoryItem\r\n\t\t);\r\n\t\t// return item instanceof ActionHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (currentTurn > 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// if (item instanceof HideEntityHistoryItem) {\r\n\t\t// \tconst owner = ActionHelper.getOwner(entitiesBeforeAction, item.entity);\r\n\t\t// \t// console.log('considergin', owner, item);\r\n\t\t// \tif (owner instanceof PlayerEntity) {\r\n\t\t// \t\treturn [\r\n\t\t// \t\t\tMulliganCardAction.create(\r\n\t\t// \t\t\t\t{\r\n\t\t// \t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t// \t\t\t\t\tindex: item.index,\r\n\t\t// \t\t\t\t\tplayerMulligan: [item.entity],\r\n\t\t// \t\t\t\t},\r\n\t\t// \t\t\t\tthis.allCards,\r\n\t\t// \t\t\t),\r\n\t\t// \t\t];\r\n\t\t// \t}\r\n\t\t// }\r\n\t\t// This works because we only work at turn 0\r\n\t\tif (item instanceof TagChangeHistoryItem) {\r\n\t\t\treturn [\r\n\t\t\t\tMulliganCardAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\topponentMulligan: [item.tag.entity],\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t}\r\n\t\t// Adding the cards mulliganed by the player\r\n\t\t// if (\r\n\t\t// \tparseInt(item.node.attributes.type) === BlockType.TRIGGER &&\r\n\t\t// \titem.node.hideEntities &&\r\n\t\t// \titem.node.hideEntities.length > 0 &&\r\n\t\t// \tGameHepler.isPlayerEntity(parseInt(item.node.attributes.entity), entitiesBeforeAction)\r\n\t\t// ) {\r\n\t\t// \t// console.log('built mulligan action');\r\n\t\t// \tconst result = [\r\n\t\t// \t\tMulliganCardAction.create(\r\n\t\t// \t\t\t{\r\n\t\t// \t\t\t\ttimestamp: item.timestamp,\r\n\t\t// \t\t\t\tindex: item.index,\r\n\t\t// \t\t\t\tplayerMulligan: item.node.hideEntities,\r\n\t\t// \t\t\t},\r\n\t\t// \t\t\tthis.allCards,\r\n\t\t// \t\t),\r\n\t\t// \t];\r\n\t\t// \treturn result;\r\n\t\t// }\r\n\t\t// if (\r\n\t\t// \tparseInt(item.node.attributes.type) === BlockType.TRIGGER &&\r\n\t\t// \tGameHepler.isPlayerEntity(parseInt(item.node.attributes.entity), entitiesBeforeAction) &&\r\n\t\t// \titem.node.tags &&\r\n\t\t// \titem.node.tags.length > 0\r\n\t\t// ) {\r\n\t\t// \tconst relevantTags = item.node.tags\r\n\t\t// \t\t.filter(tag => tag.tag === GameTag.ZONE)\r\n\t\t// \t\t.filter(tag => tag.value === Zone.DECK);\r\n\t\t// \tif (relevantTags && relevantTags.length > 0) {\r\n\t\t// \t\tconst result = relevantTags.map(tag =>\r\n\t\t// \t\t\tMulliganCardAction.create(\r\n\t\t// \t\t\t\t{\r\n\t\t// \t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t// \t\t\t\t\tindex: item.index,\r\n\t\t// \t\t\t\t\topponentMulligan: [tag.entity],\r\n\t\t// \t\t\t\t},\r\n\t\t// \t\t\t\tthis.allCards,\r\n\t\t// \t\t\t),\r\n\t\t// \t\t);\r\n\t\t// \t\treturn result;\r\n\t\t// \t}\r\n\t\t// }\r\n\t\treturn null;\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<MulliganCardAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => previous instanceof MulliganCardAction && current instanceof MulliganCardAction,\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: MulliganCardAction, currentAction: MulliganCardAction): MulliganCardAction {\r\n\t\treturn MulliganCardAction.create(\r\n\t\t\t{\r\n\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\tindex: previousAction.index,\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\tplayerMulligan: [...(previousAction.playerMulligan ?? []), ...(currentAction.playerMulligan ?? [])],\r\n\t\t\t\topponentMulligan: [\r\n\t\t\t\t\t...(previousAction.opponentMulligan ?? []),\r\n\t\t\t\t\t...(currentAction.opponentMulligan ?? []),\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t\tthis.allCards,\r\n\t\t);\r\n\t}\r\n}\r\n","import { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { OptionsAction } from '../../models/action/options-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { OptionsHistoryItem } from '../../models/history/options-history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class OptionsParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof OptionsHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: OptionsHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\treturn [\r\n\t\t\tOptionsAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\toptions: item.tag.options\r\n\t\t\t\t\t\t.filter(option => !option.error || option.error === -1)\r\n\t\t\t\t\t\t.map(option => option.entity),\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\t// // console.log('reducing', actions);\r\n\t\treturn ActionHelper.combineActions<Action>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previousAction: Action, currentAction: Action): boolean {\r\n\t\t// // console.log('should merge?', previousAction, currentAction, new Error().stack);\r\n\t\treturn previousAction && currentAction instanceof OptionsAction;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: Action, currentAction: Action): Action {\r\n\t\t// // console.log('merging actions', previousAction, currentAction);\r\n\t\treturn previousAction.updateAction({\r\n\t\t\tindex: currentAction.index,\r\n\t\t\tentities: currentAction.entities,\r\n\t\t\toptions: [...(previousAction.options ?? []), ...(currentAction.options ?? [])] as readonly number[],\r\n\t\t} as Action);\r\n\t}\r\n}\r\n","import { BlockType, CardType, GameTag, MetaTags } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { AttachingEnchantmentAction } from '../../models/action/attaching-enchantment-action';\r\nimport { CardTargetAction } from '../../models/action/card-target-action';\r\nimport { PowerTargetAction } from '../../models/action/power-target-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { MetadataHistoryItem } from '../../models/history/metadata-history-item';\r\nimport { ActionButtonUsedAction, CardPlayedFromHandAction, SummonAction } from '../../models/models';\r\nimport { Info } from '../../models/parser/info';\r\nimport { MetaData } from '../../models/parser/metadata';\r\nimport { deepEqual } from '../../utils';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class PowerTargetParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) { }\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\tif (!(item instanceof MetadataHistoryItem)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tconst meta = item.meta;\r\n\t\tif (!meta.info && !meta.meta) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (meta.meta !== MetaTags[MetaTags.TARGET]) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: MetadataHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tconst meta = item.meta;\r\n\t\tconst parentAction = history\r\n\t\t\t.filter((historyItem) => historyItem.index === item.meta.parentIndex)\r\n\t\t\t.filter((historyItem) => historyItem instanceof ActionHistoryItem)\r\n\t\t\t.map((historyItem) => historyItem as ActionHistoryItem)[0];\r\n\t\tif (\r\n\t\t\tparseInt(parentAction.node.attributes.type) !== BlockType.POWER &&\r\n\t\t\tparseInt(parentAction.node.attributes.type) !== BlockType.TRIGGER\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// TODO: hard-code Malchezaar?\r\n\t\tif (meta.info) {\r\n\t\t\t// // console.log('building power action', parentAction.node, parentAction, entitiesBeforeAction.get(35)?.tags?.toJS())\r\n\t\t\treturn meta.info\r\n\t\t\t\t.map((info) => this.buildPowerActions(entitiesBeforeAction, parentAction, meta, info))\r\n\t\t\t\t.reduce((a, b) => a.concat(b), []);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate buildPowerActions(\r\n\t\tentities: Map<number, Entity>,\r\n\t\titem: ActionHistoryItem,\r\n\t\tmeta: MetaData,\r\n\t\tinfo: Info,\r\n\t): PowerTargetAction[] {\r\n\t\tconst entityId = parseInt(item.node.attributes.entity);\r\n\t\t// Prevent a spell from targeting itself\r\n\t\tif (\r\n\t\t\tentityId === info.entity &&\r\n\t\t\tentities.get(entityId) &&\r\n\t\t\tentities.get(entityId).getTag(GameTag.CARDTYPE) === CardType.SPELL\r\n\t\t) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tlet target = info.entity;\r\n\t\tif (!target && parseInt(item.node.attributes.target)) {\r\n\t\t\ttarget = parseInt(item.node.attributes.target);\r\n\t\t}\r\n\t\tif (!target) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\treturn [\r\n\t\t\tPowerTargetAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: meta.index,\r\n\t\t\t\t\toriginId: entityId,\r\n\t\t\t\t\ttargetIds: [target],\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<Action>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previousAction: Action, currentAction: Action): boolean {\r\n\t\tif (!(currentAction instanceof PowerTargetAction)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (previousAction instanceof PowerTargetAction) {\r\n\t\t\treturn previousAction.originId === currentAction.originId;\r\n\t\t}\r\n\t\tif (previousAction instanceof ActionButtonUsedAction) {\r\n\t\t\treturn previousAction.entityId === currentAction.originId;\r\n\t\t}\r\n\t\t// Spells that target would trigger twice otherwise\r\n\t\tif (previousAction instanceof CardTargetAction) {\r\n\t\t\treturn previousAction.originId === currentAction.originId;\r\n\t\t}\r\n\t\tif (previousAction instanceof AttachingEnchantmentAction) {\r\n\t\t\tif (\r\n\t\t\t\tpreviousAction.originId === currentAction.originId &&\r\n\t\t\t\tdeepEqual(previousAction.targetIds ?? [], currentAction.targetIds ?? [])\r\n\t\t\t) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (previousAction instanceof CardPlayedFromHandAction) {\r\n\t\t\treturn previousAction.entityId === currentAction.originId;\r\n\t\t}\r\n\t\tif (previousAction instanceof SummonAction) {\r\n\t\t\treturn previousAction.originId === currentAction.originId;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: Action, currentAction: Action): Action {\r\n\t\tif (!(currentAction instanceof PowerTargetAction)) {\r\n\t\t\tconsole.warn('incorrect currentAction as current action for power-target-parser', currentAction);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (previousAction instanceof PowerTargetAction || previousAction instanceof CardTargetAction) {\r\n\t\t\treturn ActionHelper.mergeIntoFirstAction(previousAction, currentAction, {\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\toriginId: currentAction.originId,\r\n\t\t\t\ttargetIds: [...(previousAction.targetIds ?? []), ...(currentAction.targetIds ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t) as readonly number[],\r\n\t\t\t} as PowerTargetAction);\r\n\t\t} else if (previousAction instanceof AttachingEnchantmentAction) {\r\n\t\t\treturn previousAction;\r\n\t\t} else if (previousAction instanceof SummonAction) {\r\n\t\t\treturn previousAction;\r\n\t\t} else if (previousAction instanceof ActionButtonUsedAction) {\r\n\t\t\treturn ActionHelper.mergeIntoFirstAction(previousAction, currentAction, {\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\tentityId: previousAction.entityId,\r\n\t\t\t\ttargetIds: [...(previousAction.targetIds ?? []), ...(currentAction.targetIds ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t) as readonly number[],\r\n\t\t\t} as ActionButtonUsedAction);\r\n\t\t} else if (previousAction instanceof CardPlayedFromHandAction) {\r\n\t\t\treturn ActionHelper.mergeIntoFirstAction(previousAction, currentAction, {\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\toriginId: previousAction.entityId,\r\n\t\t\t\ttargetIds: [...(previousAction.targetIds ?? []), ...(currentAction.targetIds ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t) as readonly number[],\r\n\t\t\t} as CardPlayedFromHandAction);\r\n\t\t}\r\n\t}\r\n}\r\n","import { BlockType, GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { QuestCompletedAction } from '../../models/action/quest-completed-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class QuestCompletedParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ActionHistoryItem && parseInt(item.node.attributes.type) === BlockType.TRIGGER;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tconst originId = parseInt(item.node.attributes.entity);\r\n\t\tconst entity = entitiesBeforeAction.get(originId);\r\n\t\tif (!entity) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tif (entity.getTag(GameTag.QUEST) === 1 && item.node.fullEntities && item.node.fullEntities.length === 1) {\r\n\t\t\treturn [\r\n\t\t\t\tQuestCompletedAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t\toriginId,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t];\r\n\t\t}\r\n\t\treturn [];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { BlockType, CardType, GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { SecretPlayedFromHandAction } from '../../models/action/secret-played-from-hand-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class SecretPlayedFromHandParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn (\r\n\t\t\titem instanceof ActionHistoryItem &&\r\n\t\t\tparseInt(item.node.attributes.type) === BlockType.PLAY &&\r\n\t\t\t(item.node.tags && item.node.tags.length > 0)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tlet playedCardId = -1;\r\n\t\tlet isSecret = false;\r\n\t\tfor (const tag of item.node.tags) {\r\n\t\t\tif (tag.tag === GameTag.ZONE && tag.value === Zone.SECRET) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tentitiesBeforeAction.get(tag.entity) &&\r\n\t\t\t\t\tentitiesBeforeAction.get(tag.entity).getTag(GameTag.CARDTYPE) !== CardType.ENCHANTMENT\r\n\t\t\t\t) {\r\n\t\t\t\t\tplayedCardId = tag.entity;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (tag.tag === GameTag.SECRET && tag.value === 1) {\r\n\t\t\t\tisSecret = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (\r\n\t\t\t!isSecret &&\r\n\t\t\tentitiesBeforeAction.get(playedCardId) &&\r\n\t\t\tentitiesBeforeAction.get(playedCardId).getTag(GameTag.SECRET) === 1\r\n\t\t) {\r\n\t\t\tisSecret = true;\r\n\t\t}\r\n\r\n\t\tif (playedCardId === -1 || !isSecret) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn [\r\n\t\t\tSecretPlayedFromHandAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\tentityId: playedCardId,\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { BlockType, GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { SecretRevealedAction } from '../../models/action/secret-revealed-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class SecretRevealedParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ActionHistoryItem && parseInt(item.node.attributes.type) === BlockType.TRIGGER;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tconst entity = entitiesBeforeAction.get(parseInt(item.node.attributes.entity));\r\n\t\tif (!entity || entity.getTag(GameTag.SECRET) !== 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\treturn [\r\n\t\t\tSecretRevealedAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\tentityId: entity.id,\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { GameTag, Mulligan } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { StartTurnAction } from '../../models/action/start-turn-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class StartOfMulliganParser implements Parser {\r\n\tprivate numberOfMulligansDone = 0;\r\n\r\n\tconstructor(private readonly allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn (\r\n\t\t\titem instanceof TagChangeHistoryItem &&\r\n\t\t\titem.tag.tag === GameTag.MULLIGAN_STATE &&\r\n\t\t\titem.tag.value === Mulligan.INPUT\r\n\t\t);\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ActionHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tif (this.numberOfMulligansDone > 0) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tthis.numberOfMulligansDone++;\r\n\t\t// // console.log('starting mulligan action', item);\r\n\t\treturn [\r\n\t\t\tStartTurnAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tturn: currentTurn,\r\n\t\t\t\t\tisStartOfMulligan: true,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t},\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { GameTag, Step } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { StartTurnAction } from '../../models/action/start-turn-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { PlayerEntity } from '../../models/game/player-entity';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { BaconBoardVisualStateAction, GameHepler } from '../../models/models';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class StartTurnParser implements Parser {\r\n\tconstructor(private readonly allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn (\r\n\t\t\titem instanceof TagChangeHistoryItem && item.tag.tag === GameTag.STEP && item.tag.value === Step.MAIN_READY\r\n\t\t);\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\t// // console.log('current turn?', currentTurn);\r\n\t\tconst activePlayerId = entitiesBeforeAction\r\n\t\t\t.filter(entity => entity.getTag(GameTag.CURRENT_PLAYER) === 1)\r\n\t\t\t.map(entity => entity as PlayerEntity)\r\n\t\t\t.first().playerId;\r\n\t\tconst gameEntity = GameHepler.getGameEntity(entitiesBeforeAction);\r\n\t\tconst isBattlegrounds = gameEntity.getTag(GameTag.TECH_LEVEL_MANA_GEM) === 1;\r\n\t\t// const hasShownVisualBoardState = gameEntity.getTag(GameTag.BOARD_VISUAL_STATE) > 0;\r\n\t\tconst shouldShowTurnActions = gameEntity.getTag(GameTag.DISABLE_TURN_INDICATORS) !== 1;\r\n\t\tconst result: Action[] = [];\r\n\t\tif (shouldShowTurnActions) {\r\n\t\t\tresult.push(\r\n\t\t\t\tStartTurnAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tturn: currentTurn,\r\n\t\t\t\t\t\tactivePlayer: activePlayerId,\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t}\r\n\t\t// HACK: First turn usuall doesn't contain anything useful in battlegrounds\r\n\t\tif (currentTurn <= 2 && isBattlegrounds) {\r\n\t\t\t// // console.log('visual forced', 1, item, currentTurn);\r\n\t\t\tresult.push(\r\n\t\t\t\tBaconBoardVisualStateAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tnewState: gameEntity.getTag(GameTag.BOARD_VISUAL_STATE),\r\n\t\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\t} as BaconBoardVisualStateAction,\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t),\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { BlockType, CardType, GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { SummonAction } from '../../models/action/summon-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { ActionHistoryItem } from '../../models/history/action-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { FullEntityHistoryItem, ShowEntityHistoryItem } from '../../models/models';\r\nimport { EntityDefinition } from '../../models/parser/entity-definition';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { ActionHelper } from './action-helper';\r\nimport { Parser } from './parser';\r\n\r\nexport class SummonsParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof ShowEntityHistoryItem || item instanceof FullEntityHistoryItem;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: ShowEntityHistoryItem | FullEntityHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tconst parentActionId = item.entityDefintion.parentIndex;\r\n\t\tconst parentAction = history.find((historyItem) => historyItem.index === parentActionId);\r\n\t\t// We make sure the death occurs during a DEATH phase, so that we don't count the\r\n\t\t// \"dead spells\", ie spells that have been used and go to the graveyard\r\n\t\tif (!item.entityDefintion.parentIndex || !parentAction || !(parentAction instanceof ActionHistoryItem)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (\r\n\t\t\tparseInt(parentAction.node.attributes.type) !== BlockType.TRIGGER &&\r\n\t\t\tparseInt(parentAction.node.attributes.type) !== BlockType.POWER\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet entities: readonly EntityDefinition[] = [item.entityDefintion];\r\n\t\tif (!entities) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn entities\r\n\t\t\t.filter((entity) => entity.tags[GameTag[GameTag.ZONE]] === Zone.PLAY)\r\n\t\t\t.filter((entity) => entity.tags[GameTag[GameTag.CARDTYPE]] === CardType.MINION)\r\n\t\t\t.map((entity) => {\r\n\t\t\t\treturn SummonAction.create(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\t\tindex: entity.index,\r\n\t\t\t\t\t\tentityIds: [entity.id] as readonly number[],\r\n\t\t\t\t\t\toriginId: parseInt(parentAction.node.attributes.entity),\r\n\t\t\t\t\t} as SummonAction,\r\n\t\t\t\t\tthis.allCards,\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn ActionHelper.combineActions<SummonAction>(\r\n\t\t\tactions,\r\n\t\t\t(previous, current) => this.shouldMergeActions(previous, current),\r\n\t\t\t(previous, current) => this.mergeActions(previous, current),\r\n\t\t);\r\n\t}\r\n\r\n\tprivate shouldMergeActions(previousAction: Action, currentAction: Action): boolean {\r\n\t\tif (!(previousAction instanceof SummonAction) || !(currentAction instanceof SummonAction)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif ((previousAction as SummonAction).originId !== (currentAction as SummonAction).originId) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprivate mergeActions(previousAction: SummonAction, currentAction: SummonAction): SummonAction {\r\n\t\treturn SummonAction.create(\r\n\t\t\t{\r\n\t\t\t\ttimestamp: previousAction.timestamp,\r\n\t\t\t\tindex: previousAction.index,\r\n\t\t\t\tentities: currentAction.entities,\r\n\t\t\t\toriginId: currentAction.originId,\r\n\t\t\t\tentityIds: [...(previousAction.entityIds ?? []), ...(currentAction.entityIds ?? [])].filter(\r\n\t\t\t\t\t(id, index, self) => self.indexOf(id) === index,\r\n\t\t\t\t) as readonly number[],\r\n\t\t\t} as SummonAction,\r\n\t\t\tthis.allCards,\r\n\t\t);\r\n\t}\r\n}\r\n","import { GameTag, Zone } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { TradeAction } from '../../models/action/trade-action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { Parser } from './parser';\r\n\r\nexport class TradeParser implements Parser {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic applies(item: HistoryItem): boolean {\r\n\t\treturn item instanceof TagChangeHistoryItem && item.tag.tag === GameTag.IS_USING_TRADE_OPTION;\r\n\t}\r\n\r\n\tpublic parse(\r\n\t\titem: TagChangeHistoryItem,\r\n\t\tcurrentTurn: number,\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Action[] {\r\n\t\tconst entity = entitiesBeforeAction.get(item.tag.entity);\r\n\t\t// Damage is reset to 0 after an entity dies, and we don't want to show this\r\n\t\tif (!entity || entity.getTag(GameTag.ZONE) !== Zone.HAND) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\treturn [\r\n\t\t\tTradeAction.create(\r\n\t\t\t\t{\r\n\t\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\t\tindex: item.index,\r\n\t\t\t\t\toriginId: item.tag.entity,\r\n\t\t\t\t} as Action,\r\n\t\t\t\tthis.allCards,\r\n\t\t\t),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic reduce(actions: readonly Action[]): readonly Action[] {\r\n\t\treturn actions;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Entity } from '../models/game/entity';\r\nimport { ChangeEntityHistoryItem } from '../models/history/change-entity-history-item';\r\nimport { FullEntityHistoryItem } from '../models/history/full-entity-history-item';\r\nimport { HistoryItem } from '../models/history/history-item';\r\nimport { ShowEntityHistoryItem } from '../models/history/show-entity-history-item';\r\nimport { TagChangeHistoryItem } from '../models/history/tag-change-history-item';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class StateProcessorService {\r\n\tconstructor() {}\r\n\r\n\tprivate readonly USEFUL_TAGS: readonly GameTag[] = [\r\n\t\tGameTag._333,\r\n\t\tGameTag.ARMOR,\r\n\t\tGameTag.ATK,\r\n\t\tGameTag.ATTACHED,\r\n\t\tGameTag.BACON_HERO_CAN_BE_DRAFTED,\r\n\t\tGameTag.BOARD_VISUAL_STATE,\r\n\t\tGameTag.CANT_BE_TARGETED_BY_HERO_POWERS,\r\n\t\tGameTag.CANT_BE_TARGETED_BY_SPELLS,\r\n\t\tGameTag.CARDTYPE,\r\n\t\tGameTag.CHARGE,\r\n\t\tGameTag.CLASS,\r\n\t\tGameTag.CONTROLLER,\r\n\t\tGameTag.COST,\r\n\t\tGameTag.CREATOR,\r\n\t\tGameTag.CURRENT_HEROPOWER_DAMAGE_BONUS,\r\n\t\tGameTag.CURRENT_PLAYER,\r\n\t\tGameTag.CURRENT_SPELLPOWER_BASE,\r\n\t\tGameTag.DAMAGE,\r\n\t\tGameTag.DEATHRATTLE,\r\n\t\tGameTag.DIVINE_SHIELD,\r\n\t\tGameTag.DURABILITY,\r\n\t\tGameTag.EXHAUSTED,\r\n\t\tGameTag.EXHAUSTED,\r\n\t\tGameTag.FROZEN,\r\n\t\tGameTag.GAME_MODE_BUTTON_SLOT, // Used to know what button is active in a specific slot\r\n\t\tGameTag.HEALTH,\r\n\t\tGameTag.HEAVILY_ARMORED,\r\n\t\tGameTag.HERO_ENTITY,\r\n\t\tGameTag.HERO_POWER_DISABLED,\r\n\t\tGameTag.HERO_POWER_DISABLED,\r\n\t\tGameTag.HERO_POWER_DOUBLE,\r\n\t\tGameTag.HIDDEN_CHOICE,\r\n\t\tGameTag.HIDE_STATS,\r\n\t\tGameTag.IMMUNE,\r\n\t\tGameTag.INSPIRE,\r\n\t\tGameTag.JUST_PLAYED,\r\n\t\tGameTag.LIFESTEAL,\r\n\t\tGameTag.MULLIGAN_STATE,\r\n\t\tGameTag.NEXT_OPPONENT_PLAYER_ID,\r\n\t\tGameTag.NUM_CARDS_PLAYED_THIS_TURN,\r\n\t\tGameTag.NUM_RESOURCES_SPENT_THIS_GAME,\r\n\t\tGameTag.OVERLOAD_LOCKED,\r\n\t\tGameTag.OVERLOAD_OWED,\r\n\t\tGameTag.PARENT_CARD,\r\n\t\tGameTag.PLAYER_ID,\r\n\t\tGameTag.PLAYER_LEADERBOARD_PLACE,\r\n\t\tGameTag.PLAYER_TECH_LEVEL,\r\n\t\tGameTag.PLAYSTATE,\r\n\t\tGameTag.POISONOUS,\r\n\t\tGameTag.PREMIUM,\r\n\t\tGameTag.PREMIUM,\r\n\t\tGameTag.QUEST_PROGRESS_TOTAL,\r\n\t\tGameTag.QUEST_PROGRESS,\r\n\t\tGameTag.QUEST,\r\n\t\tGameTag.REBORN,\r\n\t\tGameTag.RECEIVES_DOUBLE_SPELLDAMAGE_BONUS,\r\n\t\tGameTag.RESOURCES_USED,\r\n\t\tGameTag.RESOURCES,\r\n\t\tGameTag.SECRET,\r\n\t\tGameTag.SILENCED,\r\n\t\tGameTag.SPELLPOWER_DOUBLE,\r\n\t\tGameTag.STEALTH,\r\n\t\tGameTag.STEP,\r\n\t\tGameTag.TAG_SCRIPT_DATA_NUM_1,\r\n\t\tGameTag.TAG_SCRIPT_DATA_NUM_2,\r\n\t\tGameTag.TAUNT,\r\n\t\tGameTag.TECH_LEVEL_MANA_GEM,\r\n\t\tGameTag.TECH_LEVEL,\r\n\t\tGameTag.TRIGGER_VISUAL,\r\n\t\tGameTag.TURN,\r\n\t\tGameTag.WINDFURY,\r\n\t\tGameTag.ZONE_POSITION,\r\n\t\tGameTag.ZONE,\r\n\t];\r\n\r\n\tpublic applyHistoryUntilEnd(\r\n\t\tpreviousStateEntities: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t\tpreviousProcessedItem: HistoryItem,\r\n\t): Map<number, Entity> {\r\n\t\tconst startIndex = history.indexOf(previousProcessedItem);\r\n\t\tconst futureHistory = history.slice(startIndex);\r\n\t\tlet newStateEntities = previousStateEntities;\r\n\t\t// // console.log('applying history until now', startIndex, futureHistory, history);\r\n\t\tfor (const historyItem of futureHistory) {\r\n\t\t\tnewStateEntities = this.applyHistoryItem(newStateEntities, historyItem);\r\n\t\t}\r\n\t\t// // console.log('after history applied 150', newStateEntities.get(150) && newStateEntities.get(150).tags.toJS());\r\n\t\treturn newStateEntities;\r\n\t}\r\n\r\n\tpublic applyHistoryItem(entities: Map<number, Entity>, item: HistoryItem): Map<number, Entity> {\r\n\t\tif (item instanceof TagChangeHistoryItem) {\r\n\t\t\treturn this.updateWithTagChange(item, entities);\r\n\t\t} else if (item instanceof ShowEntityHistoryItem || item instanceof FullEntityHistoryItem) {\r\n\t\t\treturn this.updateWithEntity(item, entities);\r\n\t\t} else if (item instanceof ChangeEntityHistoryItem) {\r\n\t\t\treturn this.updateWithChangeEntity(item, entities);\r\n\t\t}\r\n\t\treturn entities;\r\n\t\t// TODO: options, choices, chosen entities\r\n\t}\r\n\r\n\tprivate updateWithEntity(\r\n\t\thistoryItem: ShowEntityHistoryItem | FullEntityHistoryItem,\r\n\t\tentities: Map<number, Entity>,\r\n\t): Map<number, Entity> {\r\n\t\tif (historyItem.entityDefintion.id === 35) {\r\n\t\t\t// console.log('applying history item', historyItem, historyItem.entityDefintion.tags?.toJS());\r\n\t\t}\r\n\t\tif (!entities.get(historyItem.entityDefintion.id)) {\r\n\t\t\tconsole.warn('[state-processor] could not update entity', historyItem.entityDefintion.id);\r\n\t\t\treturn entities;\r\n\t\t}\r\n\r\n\t\t// if (historyItem.entityDefintion.id === 73 || historyItem.entityDefintion.id === 74) {\r\n\t\t// \t// console.log('enriching state', historyItem);\r\n\t\t// }\r\n\t\tconst entity: Entity = entities.get(historyItem.entityDefintion.id).update(historyItem.entityDefintion);\r\n\t\t// if (entity.id === 150) {\r\n\t\t// \t// console.log(\r\n\t\t// \t\t'updating with 150',\r\n\t\t// \t\tentity,\r\n\t\t// \t\tentity.tags.toJS(),\r\n\t\t// \t\tentities\r\n\t\t// \t\t\t.set(entity.id, entity)\r\n\t\t// \t\t\t.get(150)\r\n\t\t// \t\t\t.tags.toJS(),\r\n\t\t// \t);\r\n\t\t// }\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n\r\n\tprivate updateWithChangeEntity(\r\n\t\thistoryItem: ChangeEntityHistoryItem,\r\n\t\tentities: Map<number, Entity>,\r\n\t): Map<number, Entity> {\r\n\t\tif (!entities.get(historyItem.entityDefintion.id)) {\r\n\t\t\tconsole.warn('[state-processor] could not update entity', historyItem.entityDefintion.id);\r\n\t\t\treturn entities;\r\n\t\t}\r\n\t\tconst entity: Entity = entities.get(historyItem.entityDefintion.id).update(historyItem.entityDefintion);\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n\r\n\tprivate updateWithTagChange(historyItem: TagChangeHistoryItem, entities: Map<number, Entity>): Map<number, Entity> {\r\n\t\t// Only a limited number of tags are useful for replay reconstitution. If the tag isn't\r\n\t\t// one of them, we simply ignore it. Thanks to this, we will have less differences\r\n\t\t// between our entities, which will improve the memory footprint and performances\r\n\t\tif (this.USEFUL_TAGS.indexOf(historyItem.tag.tag) === -1) {\r\n\t\t\treturn entities;\r\n\t\t}\r\n\t\t// No default creation - if the entity is not registered yet, it's a bug\r\n\t\t// It sometimes happens that the XML itself doesn't have the right entity\r\n\t\t// so we safeguard here\r\n\t\tif (!entities.get(historyItem.tag.entity)) {\r\n\t\t\tconsole.warn('[state-processor] could not update entity', historyItem.tag.entity);\r\n\t\t\treturn entities;\r\n\t\t}\r\n\r\n\t\tconst entity: Entity = entities\r\n\t\t\t.get(historyItem.tag.entity)\r\n\t\t\t.updateTag(historyItem.tag.tag, historyItem.tag.value);\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CardType, GameTag } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Action } from '../../models/action/action';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { Game } from '../../models/game/game';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { ActionParserConfig } from '../../models/models';\r\nimport { ActionButtonUsedParser } from '../action/action-button-used-parser';\r\nimport { AttachingEnchantmentParser } from '../action/attaching-enchantment-parser';\r\nimport { AttackParser } from '../action/attack-parser';\r\nimport { BaconBattleOverParser } from '../action/battlegrounds/bacon-battle-over-parser';\r\nimport { BaconBoardVisualStateParser } from '../action/battlegrounds/bacon-board-visual-state-parser';\r\nimport { BaconOpponentRevealedParser } from '../action/battlegrounds/bacon-opponent-revealed-parser';\r\nimport { CardBurnParser } from '../action/card-burn-parser';\r\nimport { CardDiscardParser } from '../action/card-discard-parser';\r\nimport { CardDrawParser } from '../action/card-draw-parser';\r\nimport { CardPlayedFromHandParser } from '../action/card-played-from-hand-parser';\r\nimport { CardTargetParser } from '../action/card-target-parser';\r\nimport { DamageParser } from '../action/damage-parser';\r\nimport { DiscoverParser } from '../action/discover-parser';\r\nimport { DiscoveryPickParser } from '../action/discovery-pick-parser';\r\nimport { EndGameParser } from '../action/end-game-parser';\r\nimport { FatigueDamageParser } from '../action/fatigue-damage-parser';\r\nimport { LocationActivatedParser } from '../action/location-activated-parser';\r\nimport { MinionDeathParser } from '../action/minion-death-parser';\r\nimport { MulliganCardChoiceParser } from '../action/mulligan-card-choice-parser';\r\nimport { MulliganCardParser } from '../action/mulligan-card-parser';\r\nimport { OptionsParser } from '../action/options-parser';\r\nimport { Parser } from '../action/parser';\r\nimport { PowerTargetParser } from '../action/power-target-parser';\r\nimport { QuestCompletedParser } from '../action/quest-completed-parser';\r\nimport { SecretPlayedFromHandParser } from '../action/secret-played-from-hand-parser';\r\nimport { SecretRevealedParser } from '../action/secret-revealed-parser';\r\nimport { StartOfMulliganParser } from '../action/start-of-mulligan-parser';\r\nimport { StartTurnParser } from '../action/start-turn-parser';\r\nimport { SummonsParser } from '../action/summons-parser';\r\nimport { TradeParser } from '../action/trade-parser';\r\nimport { AllCardsService } from '../all-cards.service';\r\nimport { StateProcessorService } from '../state-processor.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class ActionParserService {\r\n\tconstructor(\r\n\t\tprivate allCards: AllCardsService,\r\n\t\tprivate stateProcessorService: StateProcessorService,\r\n\t) {}\r\n\r\n\tprivate registerActionParsers(config: ActionParserConfig): Parser[] {\r\n\t\treturn [\r\n\t\t\tnew StartTurnParser(this.allCards),\r\n\t\t\tnew MulliganCardParser(this.allCards),\r\n\t\t\tnew MulliganCardChoiceParser(this.allCards),\r\n\t\t\tnew StartOfMulliganParser(this.allCards),\r\n\t\t\tnew CardDrawParser(this.allCards),\r\n\t\t\tnew CardBurnParser(this.allCards),\r\n\t\t\tnew ActionButtonUsedParser(this.allCards),\r\n\t\t\tnew CardPlayedFromHandParser(this.allCards),\r\n\t\t\tnew SecretPlayedFromHandParser(this.allCards),\r\n\t\t\tnew AttackParser(this.allCards),\r\n\t\t\tnew MinionDeathParser(this.allCards),\r\n\t\t\tnew PowerTargetParser(this.allCards),\r\n\t\t\tnew CardTargetParser(this.allCards),\r\n\t\t\tnew DiscoverParser(this.allCards),\r\n\t\t\tnew DiscoveryPickParser(this.allCards),\r\n\t\t\tnew SummonsParser(this.allCards),\r\n\t\t\tnew SecretRevealedParser(this.allCards),\r\n\t\t\tnew AttachingEnchantmentParser(this.allCards, config),\r\n\t\t\tnew DamageParser(this.allCards),\r\n\t\t\tnew TradeParser(this.allCards),\r\n\t\t\tnew LocationActivatedParser(this.allCards),\r\n\t\t\tnew CardDiscardParser(this.allCards),\r\n\t\t\tnew OptionsParser(this.allCards),\r\n\t\t\tnew EndGameParser(this.allCards),\r\n\t\t\tnew FatigueDamageParser(this.allCards),\r\n\t\t\tnew QuestCompletedParser(this.allCards),\r\n\t\t\tnew BaconOpponentRevealedParser(this.allCards),\r\n\t\t\tnew BaconBoardVisualStateParser(this.allCards),\r\n\t\t\tnew BaconBattleOverParser(this.allCards),\r\n\t\t];\r\n\t}\r\n\r\n\tpublic parseActions(\r\n\t\tgame: Game,\r\n\t\tentities: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t\tconfig: ActionParserConfig = new ActionParserConfig(),\r\n\t\tdebug = false,\r\n\t): Game {\r\n\t\t// Because mulligan is effectively index -1; since there is a 0 turn after that\r\n\t\tconst currentTurn = game.turns.size - 1;\r\n\t\tlet previousStateEntities: Map<number, Entity> = entities;\r\n\t\tlet previousProcessedItem: HistoryItem = history[0];\r\n\t\tlet actionsForTurn: readonly Action[] = [];\r\n\t\t// Recreating this every time lets the parsers store state and emit the action only when necessary\r\n\t\tconst actionParsers: Parser[] = this.registerActionParsers(config);\r\n\t\tfor (const item of history) {\r\n\t\t\tconst entitiesBeforeAction = previousStateEntities;\r\n\t\t\tpreviousStateEntities = this.stateProcessorService.applyHistoryItem(previousStateEntities, item);\r\n\t\t\tpreviousProcessedItem = item;\r\n\t\t\tactionsForTurn = this.updateActionsForTurn(\r\n\t\t\t\titem,\r\n\t\t\t\tactionsForTurn,\r\n\t\t\t\tactionParsers,\r\n\t\t\t\tentitiesBeforeAction,\r\n\t\t\t\thistory,\r\n\t\t\t\tgame,\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tpreviousStateEntities = this.stateProcessorService.applyHistoryUntilEnd(\r\n\t\t\tpreviousStateEntities,\r\n\t\t\thistory,\r\n\t\t\tpreviousProcessedItem,\r\n\t\t);\r\n\t\t// Sort actions based on their index (so that actions that were created from the same\r\n\t\t// parent action can have a custom order)\r\n\t\tactionsForTurn = this.sortActions(\r\n\t\t\tactionsForTurn,\r\n\t\t\t(a: Action, b: Action) => a.index - b.index || a.timestamp - b.timestamp,\r\n\t\t);\r\n\t\tactionsForTurn = this.fillMissingEntities(actionsForTurn, previousStateEntities);\r\n\t\t// Give an opportunity to each parser to combine the actions it produced by merging them\r\n\t\t// For instance, if we two card draws in a row, we might want to display them as a single\r\n\t\t// action that draws two cards\r\n\t\tactionsForTurn = this.reduceActions(actionParsers, actionsForTurn);\r\n\t\tactionsForTurn = this.addDamageToEntities(actionsForTurn, previousStateEntities);\r\n\t\ttry {\r\n\t\t\tif (currentTurn < 0) {\r\n\t\t\t\t// // console.log('handling game init entity updates');\r\n\t\t\t\treturn Game.createGame(game, { entitiesBeforeMulligan: previousStateEntities } as Game);\r\n\t\t\t}\r\n\t\t\tif (!game.turns.get(currentTurn)) {\r\n\t\t\t\tconsole.warn('could not get current turn', currentTurn, game.turns.toJS());\r\n\t\t\t}\r\n\t\t\tconst turnWithNewActions = game.turns.get(currentTurn).update({ actions: actionsForTurn });\r\n\t\t\tconst turnNumber = turnWithNewActions.turn === 'mulligan' ? 0 : parseInt(turnWithNewActions.turn);\r\n\t\t\tconst turns = game.turns.set(turnNumber, turnWithNewActions);\r\n\t\t\t// // console.log('turnWithNewActions', turnNumber, turnWithNewActions.actions);\r\n\t\t\tconst result = Game.createGame(game, { turns } as Game);\r\n\t\t\t// // console.log('oriejg', result.getLatestParsedState().toJS());\r\n\t\t\treturn result;\r\n\t\t} catch (e) {\r\n\t\t\tconsole.warn(currentTurn, game.turns.toJS(), actionsForTurn);\r\n\t\t\tconsole.error(e);\r\n\t\t\treturn game;\r\n\t\t}\r\n\t\t// this.logger.log('took', Date.now() - start, 'ms for parseActions');\r\n\t}\r\n\r\n\tprivate updateActionsForTurn(\r\n\t\titem: HistoryItem,\r\n\t\tactionsForTurn: readonly Action[],\r\n\t\tactionParsers: Parser[],\r\n\t\tentitiesBeforeAction: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t\tgame: Game,\r\n\t): readonly Action[] {\r\n\t\tconst currentTurn = game.turns.size - 1;\r\n\t\tactionParsers.forEach((parser) => {\r\n\t\t\tif (parser.applies(item)) {\r\n\t\t\t\t// When we perform an action, we want to show the result of the state updates until the next action is\r\n\t\t\t\t// played.\r\n\t\t\t\tconst actions: Action[] = parser.parse(item, currentTurn, entitiesBeforeAction, history, game.players);\r\n\t\t\t\tif (actions && actions.length > 0) {\r\n\t\t\t\t\tactionsForTurn = this.sortActions(\r\n\t\t\t\t\t\tactionsForTurn,\r\n\t\t\t\t\t\t(a: Action, b: Action) => a.index - b.index || a.timestamp - b.timestamp,\r\n\t\t\t\t\t);\r\n\t\t\t\t\tactionsForTurn = this.fillMissingEntities(actionsForTurn, entitiesBeforeAction);\r\n\t\t\t\t\tactionsForTurn = [...actionsForTurn, ...actions];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn actionsForTurn;\r\n\t}\r\n\r\n\tprivate fillMissingEntities(\r\n\t\tactionsForTurn: readonly Action[],\r\n\t\tpreviousStateEntities: Map<number, Entity>,\r\n\t): readonly Action[] {\r\n\t\tconst newActionsForTurn = [];\r\n\t\tfor (let i = 0; i < actionsForTurn.length; i++) {\r\n\t\t\tif (actionsForTurn[i].entities) {\r\n\t\t\t\tnewActionsForTurn.push(actionsForTurn[i]);\r\n\t\t\t} else {\r\n\t\t\t\t//if (actionsForTurn[i] instanceof SummonAction) {\r\n\t\t\t\t//\t// console.log(\r\n\t\t\t\t//\t\t'filling missing entities for',\r\n\t\t\t\t//\t\tpreviousStateEntities.get(35) && previousStateEntities.get(35).tags.toJS(),\r\n\t\t\t\t//\t\tactionsForTurn[i],\r\n\t\t\t\t//\t);\r\n\t\t\t\t//}\r\n\t\t\t\tnewActionsForTurn.push(actionsForTurn[i].update(previousStateEntities));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn newActionsForTurn;\r\n\t}\r\n\r\n\tprivate addDamageToEntities(\r\n\t\tactionsForTurn: readonly Action[],\r\n\t\tpreviousStateEntities: Map<number, Entity>,\r\n\t): readonly Action[] {\r\n\t\tconst newActionsForTurn = [];\r\n\t\tfor (let i = 0; i < actionsForTurn.length; i++) {\r\n\t\t\tif (!actionsForTurn[i]) {\r\n\t\t\t\tconsole.warn('BBBB', actionsForTurn);\r\n\t\t\t}\r\n\t\t\tconst newEntities = actionsForTurn[i].entities ? actionsForTurn[i].entities : previousStateEntities;\r\n\t\t\tconst entitiesAfterDamageUpdate: Map<number, Entity> = newEntities\r\n\t\t\t\t.map((entity) => this.updateDamageForEntity(actionsForTurn[i], entity))\r\n\t\t\t\t.toMap();\r\n\t\t\tnewActionsForTurn.push(actionsForTurn[i].update(entitiesAfterDamageUpdate));\r\n\t\t}\r\n\t\treturn newActionsForTurn;\r\n\t}\r\n\r\n\tprivate updateDamageForEntity(action: Action, entity: Entity): Entity {\r\n\t\tif (\r\n\t\t\t!action.damages ||\r\n\t\t\t[CardType.SPELL, CardType.ENCHANTMENT, CardType.BATTLEGROUND_QUEST_REWARD, CardType.HERO_POWER].includes(\r\n\t\t\t\tentity.getTag(GameTag.CARDTYPE),\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn entity;\r\n\t\t}\r\n\t\tconst damages: Map<number, number> = action.damages;\r\n\t\tconst damage = damages.get(entity.id);\r\n\t\treturn entity.updateDamage(damage);\r\n\t}\r\n\r\n\t// private updateCurrentTurn(item: HistoryItem, game: Game, actions: readonly Action[], currentTurn): [Turn, number] {\r\n\t// \tif (\r\n\t// \t\tactions.length > 1 &&\r\n\t// \t\tactions[actions.length - 1] instanceof StartTurnAction &&\r\n\t// \t\t!(actions[actions.length - 1] as StartTurnAction).isStartOfMulligan\r\n\t// \t) {\r\n\t// \t\tconst turnToUpdate: Turn = game.turns.get(currentTurn);\r\n\t// \t\treturn [turnToUpdate, currentTurn + 1];\r\n\t// \t}\r\n\t// \treturn [null, currentTurn];\r\n\t// }\r\n\r\n\tprivate reduceActions(actionParsers: Parser[], actionsForTurn: readonly Action[]): readonly Action[] {\r\n\t\tlet reducedActions = actionsForTurn;\r\n\t\tfor (const parser of actionParsers) {\r\n\t\t\t// // console.log('reducing', parser, actionsForTurn);\r\n\t\t\treducedActions = parser.reduce(reducedActions);\r\n\t\t}\r\n\t\t// // console.log('finished round of reduces');\r\n\t\t// Because the different parsers can interact with each other, we need to apply all\r\n\t\t// of them until the result doesn't change anymore\r\n\t\t// This looks heavy in perf, but there aren't many actions, and it lets us\r\n\t\t// handle each action type independently, which makes for more separated concerns\r\n\t\tif (!this.areEqual(reducedActions, actionsForTurn)) {\r\n\t\t\t// // console.log('going for another round');\r\n\t\t\treturn this.reduceActions(actionParsers, reducedActions);\r\n\t\t}\r\n\t\t// // console.log('fully finished');\r\n\t\treturn reducedActions;\r\n\t}\r\n\r\n\tprivate sortActions<T>(array: readonly T[], sortingFunction: (a: T, b: T) => number): readonly T[] {\r\n\t\tconst intermediate: T[] = [...array];\r\n\t\tintermediate.sort(sortingFunction);\r\n\t\treturn intermediate as readonly T[];\r\n\t}\r\n\r\n\tprivate areEqual(actions1: readonly Action[], actions2: readonly Action[]): boolean {\r\n\t\tif (actions1.length !== actions2.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tfor (let i = 0; i < actions1.length; i++) {\r\n\t\t\tif (actions1[i] !== actions2[i]) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { GameTag, Mulligan, Step } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { ActionTurn } from '../../models/game/action-turn';\r\nimport { Game } from '../../models/game/game';\r\nimport { GameEntity } from '../../models/game/game-entity';\r\nimport { MulliganTurn } from '../../models/game/mulligan-turn';\r\nimport { Turn } from '../../models/game/turn';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { PlayerHistoryItem } from '../../models/models';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class TurnParserService {\r\n\tconstructor() {}\r\n\r\n\tpublic createTurns(game: Game, history: readonly HistoryItem[]): Game {\r\n\t\tlet turns: Map<number, Turn> = game.turns;\r\n\t\tlet turnNumber = turns.size;\r\n\t\t// // console.log('last history item', history[history.length - 1]);\r\n\t\tfor (const item of history) {\r\n\t\t\tif (turnNumber === 0 && this.isMulligan(item, game)) {\r\n\t\t\t\t// // console.log('adding mulligan turn', item);\r\n\t\t\t\tconst mulliganTurn: MulliganTurn = this.parseMulliganTurn(item as TagChangeHistoryItem, turns);\r\n\t\t\t\tturns = turns.set(0, mulliganTurn);\r\n\t\t\t\tturnNumber++;\r\n\t\t\t} else if (turnNumber === 0 && this.isMulliganDone(item, game)) {\r\n\t\t\t\t// The proper mulligan input could not be parsed\r\n\t\t\t\t// console.warn('Could not detect mulligan input, creating mulligan turn');\r\n\t\t\t\tconst mulliganTurn: MulliganTurn = this.parseMulliganTurn(item as PlayerHistoryItem, turns);\r\n\t\t\t\tturns = turns.set(0, mulliganTurn);\r\n\t\t\t\tturnNumber++;\r\n\t\t\t} else if (this.isStartOfTurn(item, game)) {\r\n\t\t\t\t// // console.log('adding new turn', turnNumber);\r\n\t\t\t\t// Used for instance in Bob's encounters\r\n\t\t\t\tif (!turns.has(0)) {\r\n\t\t\t\t\t// // console.log('creating fake mulligan turn', turns, turns.toJS());\r\n\t\t\t\t\tconst mulliganTurn: MulliganTurn = this.parseMulliganTurn(item as TagChangeHistoryItem, turns);\r\n\t\t\t\t\tturns = turns.set(0, mulliganTurn);\r\n\t\t\t\t\tturnNumber++;\r\n\t\t\t\t}\r\n\t\t\t\tconst turn: ActionTurn = this.parseTurn(turnNumber, item as TagChangeHistoryItem, turns);\r\n\t\t\t\tturns = turns.set(turnNumber, turn);\r\n\t\t\t\tturnNumber++;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// // console.log('created turns', turns.toJS());\r\n\t\treturn Game.createGame(game, { turns } as Game);\r\n\t}\r\n\r\n\tprivate parseTurn(currentTurnNumber: number, item: TagChangeHistoryItem, turns: Map<number, Turn>): ActionTurn {\r\n\t\tconst itemIndex = (item as TagChangeHistoryItem).tag.index;\r\n\t\t// Turn 1 is mulligan in the log, while for us mulligan is turn 0\r\n\t\tlet turn: ActionTurn = turns.get(\r\n\t\t\tcurrentTurnNumber,\r\n\t\t\tObject.assign(new ActionTurn(), {\r\n\t\t\t\tturn: `${currentTurnNumber}`,\r\n\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\tindex: itemIndex,\r\n\t\t\t\tactivePlayer: undefined,\r\n\t\t\t\tactions: [],\r\n\t\t\t}) as ActionTurn,\r\n\t\t) as ActionTurn;\r\n\t\tturn = Object.assign(new ActionTurn(), turn, {\r\n\t\t\tindex: Math.max(turn.index, itemIndex),\r\n\t\t});\r\n\t\treturn turn;\r\n\t}\r\n\r\n\tprivate parseMulliganTurn(item: TagChangeHistoryItem | PlayerHistoryItem, turns: Map<number, Turn>): MulliganTurn {\r\n\t\tconst itemIndex = item instanceof TagChangeHistoryItem ? item.tag.index : item.index;\r\n\t\tlet mulliganTurn: MulliganTurn = turns.get(\r\n\t\t\t0,\r\n\t\t\tObject.assign(new MulliganTurn(), {\r\n\t\t\t\tturn: 'mulligan',\r\n\t\t\t\ttimestamp: item.timestamp,\r\n\t\t\t\tindex: itemIndex,\r\n\t\t\t\tactions: [],\r\n\t\t\t}) as MulliganTurn,\r\n\t\t) as MulliganTurn;\r\n\t\tmulliganTurn = Object.assign(new MulliganTurn(), mulliganTurn, {\r\n\t\t\tindex: Math.max(mulliganTurn.index, itemIndex),\r\n\t\t});\r\n\t\treturn mulliganTurn;\r\n\t}\r\n\r\n\tprivate isMulligan(item: HistoryItem, game: Game) {\r\n\t\treturn (\r\n\t\t\titem instanceof TagChangeHistoryItem &&\r\n\t\t\titem.tag.tag === GameTag.MULLIGAN_STATE &&\r\n\t\t\titem.tag.value === Mulligan.INPUT\r\n\t\t);\r\n\t}\r\n\r\n\tprivate isMulliganDone(item: HistoryItem, game: Game) {\r\n\t\treturn (\r\n\t\t\t(item instanceof PlayerHistoryItem &&\r\n\t\t\t\titem.entityDefintion.tags[GameTag[GameTag.MULLIGAN_STATE]] === Mulligan.DONE) ||\r\n\t\t\t(item instanceof TagChangeHistoryItem &&\r\n\t\t\t\titem.tag.tag === GameTag.MULLIGAN_STATE &&\r\n\t\t\t\titem.tag.value === Mulligan.DONE)\r\n\t\t);\r\n\t}\r\n\r\n\tprivate isStartOfTurn(item: HistoryItem, game: Game) {\r\n\t\tif (!(item instanceof TagChangeHistoryItem)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tconst startOfTurn = item.tag.tag === GameTag.STEP && item.tag.value === Step.MAIN_READY;\r\n\t\tif (startOfTurn) {\r\n\t\t\t// // console.log('start of turn, isGameEntity?', item.tag.entity, game.getLatestParsedState()?.toJS())\r\n\t\t}\r\n\t\treturn this.isGameEntity(item.tag.entity, game) && startOfTurn;\r\n\t}\r\n\r\n\t// private isPlayerEntity(entityId: number, game: Game) {\r\n\t// \treturn game.entities.get(entityId) instanceof PlayerEntity;\r\n\t// }\r\n\r\n\tprivate isGameEntity(entityId: number, game: Game): boolean {\r\n\t\treturn game.getLatestParsedState().get(entityId) instanceof GameEntity;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HistoryItem } from '../models/history/history-item';\r\nimport { EntityDefinition } from '../models/parser/entity-definition';\r\nimport { AllCardsService } from './all-cards.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class ImagePreloaderService {\r\n\t// Declare here all the image resources we will need in the app\r\n\tpublic readonly STATIC_IMAGES = {\r\n\t\t// Used in CSS\r\n\t\tenchantmentBanner:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/enchantments/enchantment-banner.png',\r\n\t\tmana: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/mana.png',\r\n\t\tmanaSpent: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/mana_spent.png',\r\n\t\tmanaLocked: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/mana_locked.png',\r\n\t\t// Used in JS\r\n\t\traceBanner: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/card/race-banner.png',\r\n\t\tframeMinionPremium:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/card/frame-minion-premium.png',\r\n\t\tframeHeroPower: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/hero/hero_power.png',\r\n\t\tframeHeroPowerExhausted:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/hero/hero_power_exhausted.png',\r\n\t\tframeHeroPowerPremium:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/hero/hero_power_premium.png',\r\n\t\tframeHeroPowerExhaustedPremium:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/hero/hero_power_exhausted_premium.png',\r\n\t\tonBoardMinionFrame:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/onboard_minion_frame.png',\r\n\t\tonBoardMinionFramePremium:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/onboard_minion_frame_premium.png',\r\n\t\tonBoardMinionTaunt:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/onboard_minion_taunt.png',\r\n\t\tonBoardMinionTauntPremium:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/onboard_minion_taunt_premium.png',\r\n\t\theroFrame: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/hero/hero_frame.png',\r\n\t\theroFramePremium:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/hero/hero_frame_premium.png',\r\n\t\tnameBannerSpell: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/card/name-banner-spell.png',\r\n\t\tnameBannerMinion:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/card/name-banner-minion.png',\r\n\t\tnameBannerWeapon:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/card/name-banner-weapon.png',\r\n\t\tweaponSheathed: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/weapon_sheathed.png',\r\n\t\tweaponUnsheathed: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/weapon_unsheathed.png',\r\n\t\texhausted: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/exhausted.png',\r\n\t\ticonDeathrattle:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/effects/icon_deathrattle.png',\r\n\t\ticonPoisonous: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/effects/icon_poisonous.png',\r\n\t\ticonLifesteal: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/effects/icon_lifesteal.png',\r\n\t\ticonInspire: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/effects/icon_inspire.png',\r\n\t\ticonTrigger: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/effects/icon_trigger.png',\r\n\t\toverlayImmune: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/minion_immune.png',\r\n\t\toverlayDivineShield:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/minion_divine_shield.png',\r\n\t\toverlaySilenced:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/minion_silenced.png',\r\n\t\toverlayFrozen: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/minion_frozen.png',\r\n\t\toverlayStealth: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/minion_stealth.png',\r\n\t\toverlayElusive: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/minion_elusive.png',\r\n\t\toverlayWindfury:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/minion_windfury.png',\r\n\t\toverlayTemporaryEffect:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/minion_temporary_effect.png',\r\n\t\theroOverlayStealth:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/hero_stealth.png',\r\n\t\theroOverlayImmune: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/hero_immune.png',\r\n\t\theroOverlayHeavilyArmored:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/hero_heavily_armored.png',\r\n\t\theroOverlayFrozen: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/hero_frozen.png',\r\n\t\tenchantmentRing:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/enchantments/enchantment-ring.png',\r\n\t\trarityCommon: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/card/rarity-common.png',\r\n\t\trarityRare: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/card/rarity-rare.png',\r\n\t\trarityEpic: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/card/rarity-epic.png',\r\n\t\trarityLegendary: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/card/rarity-legendary.png',\r\n\t\tattack: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/attack.png',\r\n\t\thealth: 'https://static.zerotoheroes.com/hearthstone/asset/manastorm/health_new.png',\r\n\t\tarmor: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/armor.png',\r\n\t\tdamage: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/icon_damage.png',\r\n\t\theal: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/icon_heal.png',\r\n\t\tburned: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/overlays/burned.png',\r\n\t\tmulliganDiscard: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/mulligan_discard.png',\r\n\t\tcardback: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/cardback.png',\r\n\t\tquest: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/secrets/quest_button.png',\r\n\t\tquestBang: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/secrets/quest_bang.png',\r\n\t\tquestInfo: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/secrets/quest_info_arrow.png',\r\n\t\tsecretQuestionMark:\r\n\t\t\t'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/secrets/secret_question_mark.png',\r\n\t\tfatigue: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/fatigue.png',\r\n\t\tvictoryScreen: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/victory_screen.png',\r\n\t\tlossScreen: 'https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/loss_screen.png',\r\n\t};\r\n\tpublic readonly CLASS_IMAGES = {\r\n\t\tspellFrame: playerClass =>\r\n\t\t\t`https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/card/frame-spell-${playerClass}.png`,\r\n\t\tminionFrame: playerClass =>\r\n\t\t\t`https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/card/frame-minion-${playerClass}.png`,\r\n\t\tweaponFrame: playerClass =>\r\n\t\t\t`https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/card/frame-weapon-${playerClass}.png`,\r\n\t\tsecretFrame: playerClass => {\r\n\t\t\tif (['warlock', 'druid', 'priest', 'neutral'].indexOf(playerClass) !== -1) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn `https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/secrets/secret_${playerClass}.png`;\r\n\t\t},\r\n\t\tsecretSplash: playerClass => {\r\n\t\t\tif (['warlock', 'druid', 'priest', 'neutral'].indexOf(playerClass) !== -1) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn `https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/secrets/secret_splash_${playerClass}.png`;\r\n\t\t},\r\n\t\tsecretBanner: playerClass => {\r\n\t\t\tif (['warlock', 'druid', 'priest', 'neutral'].indexOf(playerClass) !== -1) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn `https://static.zerotoheroes.com/hearthstone/asset/coliseum/images/secrets/secret_banner_${playerClass}.png`;\r\n\t\t},\r\n\t};\r\n\r\n\tconstructor(private cards: AllCardsService) {}\r\n\r\n\tpublic *preloadImages(history: readonly HistoryItem[]) {\r\n\t\tconst imageUrls = this.buildImageUrls(history);\r\n\t\t// yield;\r\n\t\t// // // console.log('preloading ' + imageUrls.length + ' images');\r\n\t\tfor (let i = 0; i < imageUrls.length; i++) {\r\n\t\t\tconst imageUrl = imageUrls[i];\r\n\t\t\t// // // console.log('[image-preloader] preloading image', imageUrl);\r\n\t\t\tconst image = new Image();\r\n\t\t\timage.onload = () =>\r\n\t\t\t\t// // // console.log('[image-preloader] preloaded image', imageUrl);\r\n\t\t\t\t(image.src = imageUrl);\r\n\t\t\t// if (i % 15 === 0) {\r\n\t\t\t// \tyield;\r\n\t\t\t// }\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\tprivate buildImageUrls(history: readonly HistoryItem[]): readonly string[] {\r\n\t\tconst cardIds = history\r\n\t\t\t.filter(history => (history as any).entityDefintion)\r\n\t\t\t.map(history => (history as any).entityDefintion as EntityDefinition)\r\n\t\t\t.map(def => def.cardID)\r\n\t\t\t.filter(cardId => cardId);\r\n\t\tconst cardArtUrls = cardIds.map(\r\n\t\t\tcardId => `https://static.zerotoheroes.com/hearthstone/cardart/256x/${cardId}.jpg`,\r\n\t\t);\r\n\r\n\t\tconst staticImageUrls = Object.values(this.STATIC_IMAGES);\r\n\r\n\t\tconst classes = cardIds\r\n\t\t\t.map(cardId => this.cards.getCard(cardId))\r\n\t\t\t.filter(card => card && card.playerClass) // This could happen if the json cards are not in sync, like right after a patch\r\n\t\t\t.map(card => card.playerClass as string)\r\n\t\t\t.filter(playerClass => playerClass)\r\n\t\t\t.map(playerClass => playerClass.toLowerCase());\r\n\t\tconst dynamicImageUrls = Object.values(this.CLASS_IMAGES)\r\n\t\t\t.map(generator => classes.map(playerClass => generator(playerClass)))\r\n\t\t\t.reduce((a, b) => a.concat(b), []);\r\n\r\n\t\tconst withDuplications = [...cardArtUrls, ...staticImageUrls, ...dynamicImageUrls];\r\n\t\treturn withDuplications.filter((item, index) => withDuplications.indexOf(item) === index);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CardType, GameTag, Zone, isBattlegrounds } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { GameEntity } from '../../models/game/game-entity';\r\nimport { PlayerEntity } from '../../models/game/player-entity';\r\nimport { FullEntityHistoryItem } from '../../models/history/full-entity-history-item';\r\nimport { GameHistoryItem } from '../../models/history/game-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { PlayerHistoryItem } from '../../models/history/player-history-item';\r\nimport { ShowEntityHistoryItem } from '../../models/history/show-entity-history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { Game } from '../../models/models';\r\nimport { EntityDefinition } from '../../models/parser/entity-definition';\r\nimport { AllCardsService } from '../all-cards.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class GamePopulationService {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic initNewEntities(\r\n\t\tgame: Game,\r\n\t\thistory: readonly HistoryItem[],\r\n\t\tentityCardIdMapping: Map<number, string>,\r\n\t): Map<number, Entity> {\r\n\t\t// Map of entityId - entity definition\r\n\t\t// TODO: should we remove here all the SETASIDE / REMOVEDFROMGAME entities?\r\n\t\tconst entities: Map<number, Entity> = game\r\n\t\t\t.getLatestParsedState()\r\n\t\t\t.filter((entity: Entity) => ![Zone.REMOVEDFROMGAME].includes(entity.getTag(GameTag.ZONE)));\r\n\t\t// console.debug('entities reduced from', game.getLatestParsedState().size, 'to', entities.size);\r\n\t\tconst entitiesAfterInit: Map<number, Entity> = this.initializeEntities(history, entities);\r\n\t\tconst entitiesAfterFillingCardIds: Map<number, Entity> = this.addMissingCardIds(\r\n\t\t\tentitiesAfterInit,\r\n\t\t\tentityCardIdMapping,\r\n\t\t);\r\n\t\tconst entitiesAfterMissingInfo: Map<number, Entity> = this.completeMissingInformation(\r\n\t\t\thistory,\r\n\t\t\tentitiesAfterFillingCardIds,\r\n\t\t);\r\n\t\tconst entitiesAfterBasicData: Map<number, Entity> = this.addBasicData(entitiesAfterMissingInfo);\r\n\t\treturn entitiesAfterBasicData;\r\n\t\t// return Game.createGame(game, {\r\n\t\t// \tentities: entitiesAfterBasicData,\r\n\t\t// } as Game);\r\n\t\t// return entitiesAfterBasicData;\r\n\t}\r\n\r\n\tprivate initializeEntities(history: readonly HistoryItem[], entities: Map<number, Entity>): Map<number, Entity> {\r\n\t\tlet result = entities;\r\n\t\tfor (const item of history) {\r\n\t\t\tif (item instanceof PlayerHistoryItem) {\r\n\t\t\t\tresult = this.initializePlayer(item, result);\r\n\t\t\t} else if (item instanceof GameHistoryItem) {\r\n\t\t\t\tresult = this.initializeGame(item, result);\r\n\t\t\t} else if (item instanceof FullEntityHistoryItem) {\r\n\t\t\t\tresult = this.initializeFullEntity(item, result);\r\n\t\t\t} else if (item instanceof ShowEntityHistoryItem) {\r\n\t\t\t\tresult = this.initializeShowEntity(item, result);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate addMissingCardIds(\r\n\t\tentitiesAfterInit: Map<number, Entity>,\r\n\t\tentityCardIdMapping: Map<number, string>,\r\n\t): Map<number, Entity> {\r\n\t\treturn entitiesAfterInit\r\n\t\t\t.map((entity, entityId) => {\r\n\t\t\t\tif (!entity.cardID) {\r\n\t\t\t\t\treturn entity.update({\r\n\t\t\t\t\t\tcardID: entityCardIdMapping.get(entityId),\r\n\t\t\t\t\t} as EntityDefinition);\r\n\t\t\t\t}\r\n\t\t\t\treturn entity;\r\n\t\t\t})\r\n\t\t\t.toMap();\r\n\t}\r\n\r\n\tprivate initializePlayer(historyItem: PlayerHistoryItem, entities: Map<number, Entity>): Map<number, Entity> {\r\n\t\t// Remove the battle tag if present\r\n\t\tconst playerName =\r\n\t\t\thistoryItem.entityDefintion.name.indexOf('#') !== -1\r\n\t\t\t\t? historyItem.entityDefintion.name.split('#')[0]\r\n\t\t\t\t: historyItem.entityDefintion.name;\r\n\t\tconst entity: PlayerEntity = PlayerEntity.create({\r\n\t\t\tid: historyItem.entityDefintion.id,\r\n\t\t\tplayerId: historyItem.entityDefintion.playerID,\r\n\t\t\taccountHi: historyItem.accountHi,\r\n\t\t\taccountLo: historyItem.accountLo,\r\n\t\t\tname: playerName,\r\n\t\t\tisMainPlayer: historyItem.isMainPlayer,\r\n\t\t} as PlayerEntity).update(historyItem.entityDefintion);\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n\r\n\tprivate initializeGame(historyItem: GameHistoryItem, entities: Map<number, Entity>): Map<number, Entity> {\r\n\t\tconst base: GameEntity = Object.assign(new GameEntity(), {\r\n\t\t\tid: historyItem.entityDefintion.id,\r\n\t\t\tbuildNumber: historyItem.buildNumber,\r\n\t\t\tformatType: historyItem.formatType,\r\n\t\t\tgameType: historyItem.gameType,\r\n\t\t\tscenarioID: historyItem.scenarioID,\r\n\t\t});\r\n\t\tlet entity: GameEntity = GameEntity.create(base).update(historyItem.entityDefintion);\r\n\t\t// Battlegrounds doesn't have the right board state set at start\r\n\t\tif (isBattlegrounds(historyItem.gameType)) {\r\n\t\t\t// // console.log('initializing game entity with visual state', entity.tags.toJS(), entity);\r\n\t\t\tentity = entity.updateTag(GameTag.BOARD_VISUAL_STATE, 1);\r\n\t\t\t// // console.log('updated', entity.tags.toJS(), entity);\r\n\t\t}\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n\r\n\tprivate initializeFullEntity(\r\n\t\thistoryItem: FullEntityHistoryItem,\r\n\t\tentities: Map<number, Entity>,\r\n\t): Map<number, Entity> {\r\n\t\tconst newAttributes: any = {};\r\n\t\t// We use the ShowEntity only to update the cardID at this stage\r\n\t\t// and for a few other tags.\r\n\t\t// Since we don't stop at mulligan stage, this means that otherwise\r\n\t\t// a lot of other entities will be created\r\n\t\tif (historyItem.entityDefintion.cardID) {\r\n\t\t\tnewAttributes.cardID = historyItem.entityDefintion.cardID;\r\n\t\t}\r\n\t\t// if (historyItem.entityDefintion.id === 73 || historyItem.entityDefintion.id === 74) {\r\n\t\t// \t// // console.log('enriching', historyItem);\r\n\t\t// }\r\n\t\tconst entity: Entity = entities\r\n\t\t\t.get(historyItem.entityDefintion.id, Entity.create({ id: historyItem.entityDefintion.id } as Entity))\r\n\t\t\t.update(newAttributes as EntityDefinition);\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n\r\n\tprivate initializeShowEntity(\r\n\t\thistoryItem: ShowEntityHistoryItem,\r\n\t\tentities: Map<number, Entity>,\r\n\t): Map<number, Entity> {\r\n\t\tconst newAttributes: any = {};\r\n\t\t// Same here\r\n\t\tif (historyItem.entityDefintion.cardID) {\r\n\t\t\tnewAttributes.cardID = historyItem.entityDefintion.cardID;\r\n\t\t}\r\n\t\t// if (historyItem.entityDefintion.id === 73 || historyItem.entityDefintion.id === 74) {\r\n\t\t// \t// // console.log('enriching', historyItem);\r\n\t\t// }\r\n\t\tconst entity: Entity = entities\r\n\t\t\t.get(historyItem.entityDefintion.id, Entity.create({ id: historyItem.entityDefintion.id } as Entity))\r\n\t\t\t.update(newAttributes as EntityDefinition);\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n\r\n\tprivate completeMissingInformation(\r\n\t\thistory: readonly HistoryItem[],\r\n\t\tentities: Map<number, Entity>,\r\n\t): Map<number, Entity> {\r\n\t\tlet result = entities;\r\n\t\tfor (const item of history) {\r\n\t\t\tif (item instanceof TagChangeHistoryItem) {\r\n\t\t\t\tresult = this.addTagInformation(item, result);\r\n\t\t\t}\r\n\t\t\tif (item instanceof ShowEntityHistoryItem) {\r\n\t\t\t\tresult = this.addEntityInformation(item, result);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprivate addTagInformation(item: TagChangeHistoryItem, entities: Map<number, Entity>): Map<number, Entity> {\r\n\t\t// if (item.tag.entity === 73 || item.tag.entity === 74) {\r\n\t\t// \t// // console.log('enriching', item);\r\n\t\t// }\r\n\t\tif (item.tag.tag === GameTag.SECRET && item.tag.value === 1) {\r\n\t\t\tconst entity: Entity = entities.get(item.tag.entity)?.update({ tags: { [GameTag[item.tag.tag]]: 1 } });\r\n\t\t\treturn !!entity ? entities.set(entity.id, entity) : entities;\r\n\t\t} else if (item.tag.tag === GameTag.QUEST && item.tag.value === 1) {\r\n\t\t\tconst entity: Entity = entities.get(item.tag.entity)?.update({ tags: { [GameTag[item.tag.tag]]: 1 } });\r\n\t\t\treturn !!entity ? entities.set(entity.id, entity) : entities;\r\n\t\t} else if (item.tag.tag === GameTag.PARENT_CARD) {\r\n\t\t\tconst entity: Entity = entities\r\n\t\t\t\t.get(item.tag.entity)\r\n\t\t\t\t?.update({ tags: { [GameTag[item.tag.tag]]: item.tag.value } });\r\n\t\t\treturn !!entity ? entities.set(entity.id, entity) : entities;\r\n\t\t}\r\n\t\treturn entities;\r\n\t}\r\n\r\n\tprivate addEntityInformation(item: ShowEntityHistoryItem, entities: Map<number, Entity>): Map<number, Entity> {\r\n\t\t// if (item.entityDefintion.id === 73 || item.entityDefintion.id === 74) {\r\n\t\t// \t// // console.log('enriching', item);\r\n\t\t// }\r\n\t\tlet result = entities;\r\n\t\tif (item.entityDefintion.tags[GameTag[GameTag.SECRET]] === 1) {\r\n\t\t\tconst entity: Entity = entities.get(item.entityDefintion.id).update({\r\n\t\t\t\ttags: { [GameTag[GameTag.SECRET]]: 1 },\r\n\t\t\t});\r\n\t\t\tresult = entities.set(entity.id, entity);\r\n\t\t}\r\n\t\tconst newTags: { [tagName: string]: number } = {\r\n\t\t\t[GameTag[GameTag.CREATOR]]: item.entityDefintion.tags[GameTag[GameTag.CREATOR]],\r\n\t\t\t[GameTag[GameTag.TAG_SCRIPT_DATA_NUM_1]]: item.entityDefintion.tags[GameTag[GameTag.TAG_SCRIPT_DATA_NUM_1]],\r\n\t\t\t[GameTag[GameTag.TAG_SCRIPT_DATA_NUM_2]]: item.entityDefintion.tags[GameTag[GameTag.TAG_SCRIPT_DATA_NUM_2]],\r\n\t\t};\r\n\t\tconst finalEntity: Entity = result.get(item.entityDefintion.id).update({ tags: newTags });\r\n\t\treturn result.set(finalEntity.id, finalEntity);\r\n\t}\r\n\r\n\tprivate addBasicData(entities: Map<number, Entity>): Map<number, Entity> {\r\n\t\treturn entities\r\n\t\t\t.map((value: Entity) => {\r\n\t\t\t\tif (!value.cardID) {\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t}\r\n\t\t\t\tconst card = this.allCards.getCard(value.cardID);\r\n\t\t\t\tlet newTags: { [tagName: string]: number } = {};\r\n\t\t\t\tif (card) {\r\n\t\t\t\t\tif (card.type === 'Spell' && !value.getTag(GameTag.CARDTYPE)) {\r\n\t\t\t\t\t\tnewTags = { ...value.tags, [GameTag[GameTag.CARDTYPE]]: CardType.SPELL };\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (card.type === 'Enchantment' && !value.getTag(GameTag.CARDTYPE)) {\r\n\t\t\t\t\t\tnewTags = { ...value.tags, [GameTag[GameTag.CARDTYPE]]: CardType.ENCHANTMENT };\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn value.update({ tags: newTags });\r\n\t\t\t})\r\n\t\t\t.toMap();\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { GameTag, Step } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { FullEntityHistoryItem } from '../../models/history/full-entity-history-item';\r\nimport { HistoryItem } from '../../models/history/history-item';\r\nimport { ShowEntityHistoryItem } from '../../models/history/show-entity-history-item';\r\nimport { TagChangeHistoryItem } from '../../models/history/tag-change-history-item';\r\nimport { Game } from '../../models/models';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class GameStateParserService {\r\n\tpublic updateEntitiesUntilMulliganState(\r\n\t\tgame: Game,\r\n\t\tentities: Map<number, Entity>,\r\n\t\thistory: readonly HistoryItem[],\r\n\t): Game {\r\n\t\tfor (const item of history) {\r\n\t\t\tif (item instanceof TagChangeHistoryItem) {\r\n\t\t\t\tconst tagChange: TagChangeHistoryItem = item as TagChangeHistoryItem;\r\n\t\t\t\t// Once mulligan state is reached the game has been fully initialized\r\n\t\t\t\tif (tagChange.tag.tag === GameTag.MULLIGAN_STATE) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t// For some solo modes (like puzzles) there is no mulligan, so we based ourselves on the STEP = READY tag\r\n\t\t\t\tif (\r\n\t\t\t\t\ttagChange.tag.tag === GameTag.STEP &&\r\n\t\t\t\t\t(tagChange.tag.value === Step.MAIN_READY || tagChange.tag.value === Step.BEGIN_MULLIGAN)\r\n\t\t\t\t) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tentities = this.updateWithTagChange(tagChange, entities);\r\n\t\t\t} else if (item instanceof ShowEntityHistoryItem) {\r\n\t\t\t\tentities = this.updateWithShowEntity(item, entities);\r\n\t\t\t} else if (item instanceof FullEntityHistoryItem) {\r\n\t\t\t\tentities = this.updateWithFullEntity(item, entities);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn game.update({ entitiesBeforeMulligan: entities } as Game);\r\n\t}\r\n\r\n\tprivate updateWithTagChange(historyItem: TagChangeHistoryItem, entities: Map<number, Entity>): Map<number, Entity> {\r\n\t\tconst entity: Entity = entities\r\n\t\t\t.get(historyItem.tag.entity)\r\n\t\t\t.updateTag(historyItem.tag.tag, historyItem.tag.value);\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n\r\n\tprivate updateWithShowEntity(\r\n\t\thistoryItem: ShowEntityHistoryItem,\r\n\t\tentities: Map<number, Entity>,\r\n\t): Map<number, Entity> {\r\n\t\t// No default creation - if the entity is not registered yet, it's a bug\r\n\t\tconst entity: Entity = entities.get(historyItem.entityDefintion.id).update(historyItem.entityDefintion);\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n\r\n\tprivate updateWithFullEntity(\r\n\t\thistoryItem: FullEntityHistoryItem,\r\n\t\tentities: Map<number, Entity>,\r\n\t): Map<number, Entity> {\r\n\t\t// No default creation - if the entity is not registered yet, it's a bug\r\n\t\tconst entity: Entity = entities.get(historyItem.entityDefintion.id).update(historyItem.entityDefintion);\r\n\t\treturn entities.set(entity.id, entity);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CardType } from '@firestone-hs/reference-data';\r\nimport { Map } from 'immutable';\r\nimport { Entity } from '../../models/game/entity';\r\nimport { Game } from '../../models/game/game';\r\nimport { GameHepler } from '../../models/game/game-helper';\r\nimport { PlayerEntity } from '../../models/game/player-entity';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class GameInitializerService {\r\n\tpublic initializePlayers(game: Game, entities: Map<number, Entity>): Game {\r\n\t\tconst players: PlayerEntity[] = entities\r\n\t\t\t.valueSeq()\r\n\t\t\t.toArray()\r\n\t\t\t.filter((entity: Entity) => entity.getCardType() === CardType.PLAYER)\r\n\t\t\t.map(entity => entity as PlayerEntity);\r\n\t\tlet player1 = players.find(player => player.isMainPlayer);\r\n\t\tlet player2 = players.find(player => !player.isMainPlayer);\r\n\t\t// console.debug('[game-parser] found players', player1, player2, entities.valueSeq());\r\n\t\tif (!player1) {\r\n\t\t\tconst firstPlayerHand: readonly Entity[] = GameHepler.getPlayerHand(entities, players[0].playerId);\r\n\t\t\tif (\r\n\t\t\t\t// All game modes known today have the main player have at least 3 cards in hand\r\n\t\t\t\tfirstPlayerHand.length < 3 ||\r\n\t\t\t\t!firstPlayerHand[0].isRevealed() ||\r\n\t\t\t\t!firstPlayerHand[1].isRevealed() ||\r\n\t\t\t\t!firstPlayerHand[2].isRevealed()\r\n\t\t\t) {\r\n\t\t\t\t[player1, player2] = [player2, player1];\r\n\t\t\t}\r\n\r\n\t\t\t// AI trick\r\n\t\t\tif (player1.accountHi === '0' && player1.accountLo === '0') {\r\n\t\t\t\t[player1, player2] = [player2, player1];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn Game.createGame(game, {\r\n\t\t\tplayers: [player1, player2] as readonly PlayerEntity[],\r\n\t\t} as Game);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Action } from '../../models/action/action';\r\nimport { Game } from '../../models/game/game';\r\nimport { Turn } from '../../models/game/turn';\r\nimport { AllCardsService } from '../all-cards.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class ActivePlayerParserService {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic parseActivePlayerForLastTurn(game: Game): Game {\r\n\t\tlet turns = game.turns;\r\n\t\tconst numberOfTurns = turns.size;\r\n\t\tconst turn = game.turns.get(numberOfTurns - 1);\r\n\t\tconst enrichedTurn = this.enrichTurn(turn);\r\n\t\tturns = turns.set(numberOfTurns - 1, enrichedTurn);\r\n\t\treturn Game.createGame(game, { turns } as Game);\r\n\t}\r\n\r\n\tprivate enrichTurn(turn: Turn): Turn {\r\n\t\tconst newActions = [];\r\n\t\tfor (let i = 0; i < turn.actions.length; i++) {\r\n\t\t\tconst previousAction = i === 0 ? null : newActions[i - 1];\r\n\t\t\tconst newAction = this.enrichAction(turn.actions[i], previousAction);\r\n\t\t\tnewActions.push(newAction);\r\n\t\t}\r\n\t\treturn turn.update({ actions: newActions as readonly Action[] } as Turn);\r\n\t}\r\n\r\n\tprivate enrichAction(action: Action, previousAction: Action): Action {\r\n\t\tif (action.activePlayer) {\r\n\t\t\treturn action;\r\n\t\t} else if (previousAction && previousAction.activePlayer) {\r\n\t\t\treturn action.updateAction({\r\n\t\t\t\tactivePlayer: previousAction.activePlayer,\r\n\t\t\t} as Action);\r\n\t\t} else {\r\n\t\t\treturn action;\r\n\t\t}\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CardType, GameTag } from '@firestone-hs/reference-data';\r\nimport { Action } from '../../models/action/action';\r\nimport { AttachingEnchantmentAction } from '../../models/action/attaching-enchantment-action';\r\nimport { CardDrawAction } from '../../models/action/card-draw-action';\r\nimport { CardPlayedFromHandAction } from '../../models/action/card-played-from-hand-action';\r\nimport { CardTargetAction } from '../../models/action/card-target-action';\r\nimport { DamageAction } from '../../models/action/damage-action';\r\nimport { HealingAction } from '../../models/action/healing-action';\r\nimport { PowerTargetAction } from '../../models/action/power-target-action';\r\nimport { SecretRevealedAction } from '../../models/action/secret-revealed-action';\r\nimport { StartTurnAction } from '../../models/action/start-turn-action';\r\nimport { SummonAction } from '../../models/action/summon-action';\r\nimport { Game } from '../../models/game/game';\r\nimport { Turn } from '../../models/game/turn';\r\nimport { AllCardsService } from '../all-cards.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class ActiveSpellParserService {\r\n\tprivate readonly ACTIONS_THAT_RESET_ACTIVE_SPELL = [typeof StartTurnAction];\r\n\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic parseActiveSpellForLastTurn(game: Game): Game {\r\n\t\tlet turns = game.turns;\r\n\t\tconst numberOfTurns = turns.size;\r\n\t\tconst turn = game.turns.get(numberOfTurns - 1);\r\n\t\tconst enrichedTurn = this.enrichTurn(turn);\r\n\t\tturns = turns.set(numberOfTurns - 1, enrichedTurn);\r\n\t\treturn Game.createGame(game, { turns } as Game);\r\n\t}\r\n\r\n\tprivate enrichTurn(turn: Turn): Turn {\r\n\t\tconst newActions = [];\r\n\t\tfor (let i = 0; i < turn.actions.length; i++) {\r\n\t\t\tconst previousAction = i === 0 ? null : newActions[i - 1];\r\n\t\t\tconst newAction = this.enrichAction(turn.actions[i], previousAction);\r\n\t\t\tnewActions.push(newAction);\r\n\t\t}\r\n\t\treturn turn.update({ actions: newActions as readonly Action[] } as Turn);\r\n\t}\r\n\r\n\tprivate enrichAction(action: Action, previousAction: Action): Action {\r\n\t\t// Don't set any active spell for these actions\r\n\t\tif (this.ACTIONS_THAT_RESET_ACTIVE_SPELL.indexOf(typeof action) !== -1) {\r\n\t\t\treturn action;\r\n\t\t}\r\n\r\n\t\t// By default, don't show any active spell\r\n\t\tlet activeSpell;\r\n\t\tif (\r\n\t\t\taction instanceof CardPlayedFromHandAction &&\r\n\t\t\taction.entities.get(action.entityId)\r\n\t\t\t//&& action.entities.get(action.entityId).getTag(GameTag.CARDTYPE) === CardType.SPELL\r\n\t\t) {\r\n\t\t\tactiveSpell = action.entityId;\r\n\t\t} else if (\r\n\t\t\taction instanceof PowerTargetAction &&\r\n\t\t\taction.entities.get(action.originId) &&\r\n\t\t\taction.entities.get(action.originId).getTag(GameTag.CARDTYPE) === CardType.SPELL\r\n\t\t) {\r\n\t\t\tactiveSpell = action.originId;\r\n\t\t} else if (\r\n\t\t\taction instanceof AttachingEnchantmentAction &&\r\n\t\t\taction.entities.get(action.originId) &&\r\n\t\t\taction.entities.get(action.originId).getTag(GameTag.CARDTYPE) === CardType.SPELL\r\n\t\t) {\r\n\t\t\tactiveSpell = action.originId;\r\n\t\t} else if (\r\n\t\t\taction instanceof CardTargetAction &&\r\n\t\t\taction.entities.get(action.originId) &&\r\n\t\t\taction.entities.get(action.originId).getTag(GameTag.CARDTYPE) === CardType.SPELL\r\n\t\t) {\r\n\t\t\tactiveSpell = action.originId;\r\n\t\t} else if (\r\n\t\t\taction instanceof SummonAction &&\r\n\t\t\taction.entities.get(action.originId) &&\r\n\t\t\taction.entities.get(action.originId).getTag(GameTag.CARDTYPE) === CardType.SPELL\r\n\t\t) {\r\n\t\t\tactiveSpell = action.originId;\r\n\t\t} else if (\r\n\t\t\taction instanceof SecretRevealedAction &&\r\n\t\t\taction.entities.get(action.entityId) &&\r\n\t\t\taction.entities.get(action.entityId).getTag(GameTag.CARDTYPE) === CardType.SPELL\r\n\t\t) {\r\n\t\t\tactiveSpell = action.entityId;\r\n\t\t} else if (action instanceof AttachingEnchantmentAction && previousAction && previousAction.activeSpell) {\r\n\t\t\tactiveSpell = previousAction.activeSpell;\r\n\t\t} else if (action instanceof CardDrawAction && previousAction && previousAction.activeSpell) {\r\n\t\t\tactiveSpell = previousAction.activeSpell;\r\n\t\t} else if (action instanceof DamageAction && previousAction && previousAction.activeSpell) {\r\n\t\t\tactiveSpell = previousAction.activeSpell;\r\n\t\t} else if (action instanceof HealingAction && previousAction && previousAction.activeSpell) {\r\n\t\t\tactiveSpell = previousAction.activeSpell;\r\n\t\t} else if (action instanceof PowerTargetAction && previousAction && previousAction.activeSpell) {\r\n\t\t\tactiveSpell = previousAction.activeSpell;\r\n\t\t}\r\n\r\n\t\tif (activeSpell) {\r\n\t\t\t// // // console.log('Updating active spell', activeSpell);\r\n\t\t\treturn action.updateAction({ activeSpell } as Action);\r\n\t\t}\r\n\t\treturn action;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Action } from '../../models/action/action';\r\nimport { HasTarget } from '../../models/action/has-target';\r\nimport { HasTargets } from '../../models/action/has-targets';\r\nimport { Game } from '../../models/game/game';\r\nimport { Turn } from '../../models/game/turn';\r\nimport { AllCardsService } from '../all-cards.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class TargetsParserService {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic parseTargetsForLastTurn(game: Game): Game {\r\n\t\tlet turns = game.turns;\r\n\t\tconst numberOfTurns = turns.size;\r\n\t\tconst turn = game.turns.get(numberOfTurns - 1);\r\n\t\tconst enrichedTurn = this.enrichTurn(turn);\r\n\t\tturns = turns.set(numberOfTurns - 1, enrichedTurn);\r\n\t\treturn Game.createGame(game, { turns } as Game);\r\n\t}\r\n\r\n\tprivate enrichTurn(turn: Turn): Turn {\r\n\t\tconst newActions = [];\r\n\t\tfor (let i = 0; i < turn.actions.length; i++) {\r\n\t\t\tconst previousAction = i === 0 ? null : newActions[i - 1];\r\n\t\t\tconst newAction = this.enrichAction(turn.actions[i], previousAction);\r\n\t\t\tnewActions.push(newAction);\r\n\t\t}\r\n\t\treturn turn.update({ actions: newActions as readonly Action[] } as Turn);\r\n\t}\r\n\r\n\tprivate enrichAction(action: Action, previousAction: Action): Action {\r\n\t\tif (this.hasTarget(action)) {\r\n\t\t\tconst targetPair: readonly [number, number][] = [[action.originId, action.targetId]];\r\n\t\t\treturn action.updateAction({ targets: targetPair } as Action);\r\n\t\t} else if (this.hasTargets(action)) {\r\n\t\t\tconst targetPairs = action.targetIds.map(\r\n\t\t\t\ttargetId => [action.originId, targetId] as [number, number],\r\n\t\t\t) as readonly [number, number][];\r\n\t\t\treturn action.updateAction({ targets: targetPairs } as Action);\r\n\t\t}\r\n\t\treturn action;\r\n\t}\r\n\r\n\tprivate hasTarget(action: any): action is HasTarget {\r\n\t\treturn 'originId' in action && 'targetId' in action && action.originId && action.targetId;\r\n\t}\r\n\r\n\tprivate hasTargets(action: any): action is HasTargets {\r\n\t\treturn 'originId' in action && 'targetIds' in action && action.originId && action.targetIds;\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CardType, GameTag, Step, Zone } from '@firestone-hs/reference-data';\r\nimport { Action } from '../../models/action/action';\r\nimport { Game } from '../../models/game/game';\r\nimport { GameEntity } from '../../models/game/game-entity';\r\nimport { Turn } from '../../models/game/turn';\r\nimport { AllCardsService } from '../all-cards.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class MulliganParserService {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic affectMulligan(game: Game): Game {\r\n\t\tlet turns = game.turns;\r\n\t\tconst mulliganTurn = game.turns.get(0);\r\n\t\tconst enrichedMulligan = this.enrichTurn(mulliganTurn);\r\n\t\tturns = turns.set(0, enrichedMulligan);\r\n\t\treturn Game.createGame(game, { turns } as Game);\r\n\t}\r\n\r\n\tprivate enrichTurn(turn: Turn): Turn {\r\n\t\tconst newActions = [];\r\n\t\tfor (let i = 0; i < turn.actions.length; i++) {\r\n\t\t\tconst previousAction = i === 0 ? null : newActions[i - 1];\r\n\t\t\tconst newAction = this.enrichAction(turn.actions[i], previousAction);\r\n\t\t\tnewActions.push(newAction);\r\n\t\t}\r\n\t\treturn turn.update({ actions: newActions as readonly Action[] } as Turn);\r\n\t}\r\n\r\n\tprivate enrichAction(action: Action, previousAction: Action): Action {\r\n\t\t// // console.log(\r\n\t\t// \t'enriching action',\r\n\t\t// \taction,\r\n\t\t// \taction.entities.toJS(),\r\n\t\t// \taction.entities.get(73).tags.toJS(),\r\n\t\t// \taction.entities.get(74).tags.toJS(),\r\n\t\t// );\r\n\t\tconst mulliganEntities = action.entities\r\n\t\t\t.valueSeq()\r\n\t\t\t.toArray()\r\n\t\t\t.filter(entity => entity.getTag(GameTag.ZONE) === Zone.HAND)\r\n\t\t\t.filter(entity => entity.cardID !== 'GAME_005') // Don't show the coin yet\r\n\t\t\t.sort((a, b) => a.getTag(GameTag.ZONE_POSITION) - b.getTag(GameTag.ZONE_POSITION));\r\n\t\t// // console.log('mulligan entities', mulliganEntities, mulliganEntities.map(entity => entity.tags.toJS()));\r\n\t\t// Hero selection phase\r\n\t\tlet isHeroSelection = false;\r\n\t\tif (mulliganEntities.length > 0 && mulliganEntities[0].getCardType() === CardType.HERO) {\r\n\t\t\t// // console.log('hero selection');\r\n\t\t\tisHeroSelection = true;\r\n\t\t}\r\n\r\n\t\tlet isMulligan = !isHeroSelection && mulliganEntities.length > 0;\r\n\t\t// // console.log('isMulligan?', isMulligan, mulliganEntities);\r\n\t\t// // console.log('previous entities', previousAction && previousAction.entities.toJS());\r\n\t\tif (action.activeSpell) {\r\n\t\t\tisMulligan = false;\r\n\t\t} else if (\r\n\t\t\tpreviousAction &&\r\n\t\t\tpreviousAction.entities.find(entity => entity instanceof GameEntity).getTag(GameTag.STEP) ===\r\n\t\t\t\tStep.BEGIN_MULLIGAN\r\n\t\t) {\r\n\t\t\tisMulligan = previousAction.isMulligan;\r\n\t\t}\r\n\t\treturn action.updateAction({ isMulligan, isHeroSelection } as Action);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { PlayState } from '@firestone-hs/reference-data';\r\nimport { Action } from '../../models/action/action';\r\nimport { EndGameAction } from '../../models/action/end-game-action';\r\nimport { Game } from '../../models/game/game';\r\nimport { Turn } from '../../models/game/turn';\r\nimport { AllCardsService } from '../all-cards.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class EndGameParserService {\r\n\tconstructor(private allCards: AllCardsService) {}\r\n\r\n\tpublic parseEndGame(game: Game): Game {\r\n\t\tlet turns = game.turns;\r\n\t\tconst lastTurn = turns.get(turns.size - 1);\r\n\t\tconst enrichedLastTurn = this.enrichTurn(lastTurn);\r\n\t\t// // console.log('previous', turns.get(turns.size - 2));\r\n\t\tturns = turns.set(turns.size - 1, enrichedLastTurn);\r\n\t\treturn Game.createGame(game, { turns } as Game);\r\n\t}\r\n\r\n\tprivate enrichTurn(turn: Turn): Turn {\r\n\t\tconst newActions = [];\r\n\t\tfor (let i = 0; i < turn.actions.length - 1; i++) {\r\n\t\t\tnewActions.push(turn.actions[i]);\r\n\t\t}\r\n\t\tif (!turn.actions[turn.actions.length - 1]) {\r\n\t\t\tconsole.warn('missing last action' + turn.actions[turn.actions.length - 1], turn);\r\n\t\t\treturn turn;\r\n\t\t}\r\n\r\n\t\tif (!(turn.actions[turn.actions.length - 1] instanceof EndGameAction)) {\r\n\t\t\t// // console.log('last action is not an endgame, returning');\r\n\t\t\treturn turn;\r\n\t\t}\r\n\t\tconst newEndGame = this.enrichAction(turn.actions[turn.actions.length - 1] as EndGameAction);\r\n\t\tnewActions.push(newEndGame);\r\n\t\treturn turn.update({ actions: newActions as readonly Action[] } as Turn);\r\n\t}\r\n\r\n\tprivate enrichAction(action: EndGameAction): EndGameAction {\r\n\t\tconst status: PlayState = action.winStatus.filter(st => st[0] === action.entityId).map(st => st[1])[0];\r\n\t\treturn action.updateAction<EndGameAction>({\r\n\t\t\tisEndGame: true,\r\n\t\t\tendGameStatus: status,\r\n\t\t} as EndGameAction);\r\n\t}\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Map } from 'immutable';\r\nimport { Observable } from 'rxjs';\r\nimport { Game } from '../models/game/game';\r\nimport { HistoryItem } from '../models/history/history-item';\r\nimport { ActionParserConfig, GameHistoryItem } from '../models/models';\r\nimport { AllCardsService } from './all-cards.service';\r\nimport { GamePopulationService } from './entitiespipeline/game-population.service';\r\nimport { GameStateParserService } from './entitiespipeline/game-state-parser.service';\r\nimport { ActionParserService } from './gamepipeline/action-parser.service';\r\nimport { ActivePlayerParserService } from './gamepipeline/active-player-parser.service';\r\nimport { ActiveSpellParserService } from './gamepipeline/active-spell-parser.service';\r\nimport { EndGameParserService } from './gamepipeline/end-game-parser.service';\r\nimport { GameInitializerService } from './gamepipeline/game-initializer.service';\r\nimport { MulliganParserService } from './gamepipeline/mulligan-parser.service';\r\nimport { NarratorService } from './gamepipeline/narrator.service';\r\nimport { TargetsParserService } from './gamepipeline/targets-parser.service';\r\nimport { TurnParserService } from './gamepipeline/turn-parser.service';\r\nimport { ImagePreloaderService } from './image-preloader.service';\r\nimport { StateProcessorService } from './state-processor.service';\r\nimport { XmlParserService } from './xml-parser.service';\r\n\r\nconst SMALL_PAUSE = 15;\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class GameParserService {\r\n\tconstructor(\r\n\t\tprivate allCards: AllCardsService,\r\n\t\tprivate actionParser: ActionParserService,\r\n\t\tprivate turnParser: TurnParserService,\r\n\t\tprivate imagePreloader: ImagePreloaderService,\r\n\t\tprivate gamePopulationService: GamePopulationService,\r\n\t\tprivate gameStateParser: GameStateParserService,\r\n\t\tprivate gameInitializer: GameInitializerService,\r\n\t\tprivate activePlayerParser: ActivePlayerParserService,\r\n\t\tprivate activeSpellParser: ActiveSpellParserService,\r\n\t\tprivate targetsParser: TargetsParserService,\r\n\t\tprivate mulliganParser: MulliganParserService,\r\n\t\tprivate endGameParser: EndGameParserService,\r\n\t\tprivate narrator: NarratorService,\r\n\t\tprivate stateProcessor: StateProcessorService,\r\n\t) {}\r\n\tprivate cancelled: boolean;\r\n\tprivate processingTimeout;\r\n\r\n\tpublic async parse(\r\n\t\treplayAsString: string,\r\n\t\toptions?: TechnicalParsingOptions,\r\n\t\tconfig: ActionParserConfig = new ActionParserConfig(),\r\n\t): Promise<Observable<[Game, string, boolean]>> {\r\n\t\tconst start = Date.now();\r\n\t\tthis.cancelled = false;\r\n\t\tif (this.processingTimeout) {\r\n\t\t\tclearTimeout(this.processingTimeout);\r\n\t\t\tthis.processingTimeout = undefined;\r\n\t\t}\r\n\r\n\t\tif (!this.allCards.getCards()?.length) {\r\n\t\t\tawait this.allCards.initializeCardsDb();\r\n\t\t\tthis.logPerf('Retrieved cards DB, parsing replay', start);\r\n\t\t}\r\n\r\n\t\tconst iterator: IterableIterator<[Game, number, string]> = this.createGamePipeline(\r\n\t\t\treplayAsString,\r\n\t\t\tstart,\r\n\t\t\toptions,\r\n\t\t\tconfig,\r\n\t\t);\r\n\t\treturn Observable.create(observer => {\r\n\t\t\tthis.buildObservableFunction(observer, iterator);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic cancelProcessing(): void {\r\n\t\tthis.cancelled = true;\r\n\t\tclearTimeout(this.processingTimeout);\r\n\t}\r\n\r\n\tprivate buildObservableFunction(observer, iterator: IterableIterator<[Game, number, string]>) {\r\n\t\t// // console.log('calling next iteration');\r\n\t\ttry {\r\n\t\t\tconst itValue = iterator.next();\r\n\t\t\t// // console.log('calling next obersable', itValue, itValue.value);\r\n\t\t\tobserver.next([itValue.value[0], itValue.value[2], itValue.done]);\r\n\t\t\tif (!itValue.done && !this.cancelled) {\r\n\t\t\t\tthis.processingTimeout = setTimeout(\r\n\t\t\t\t\t() => this.buildObservableFunction(observer, iterator),\r\n\t\t\t\t\titValue.value[1],\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tconsole.error('[game-parser] Exception in buildObservableFunction', e);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate *createGamePipeline(\r\n\t\treplayAsString: string,\r\n\t\tstart: number,\r\n\t\toptions: TechnicalParsingOptions,\r\n\t\tconfig: ActionParserConfig,\r\n\t): IterableIterator<[Game, number, string]> {\r\n\t\tif (!replayAsString || replayAsString.length == 0) {\r\n\t\t\treturn [null, SMALL_PAUSE, 'Invalid XML replay'];\r\n\t\t}\r\n\r\n\t\t// console.log('[game-parser] preparing entity / acrd ID mapping');\r\n\t\tlet entityCardId: Map<number, string> = Map([]);\r\n\t\tconst fullEntityIdCardIdMatcher = new RegExp(/id=\"(.*?)\" cardID=\"(.*?)\"/g);\r\n\t\tconst fullEntityMatchResult = replayAsString.match(fullEntityIdCardIdMatcher);\r\n\t\tfor (let match of fullEntityMatchResult) {\r\n\t\t\tconst result = new RegExp(/id=\"(.*?)\" cardID=\"(.*?)\"/g).exec(match);\r\n\t\t\tif (result) {\r\n\t\t\t\tentityCardId = entityCardId.set(parseInt(result[1]), result[2]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst showEntityIdCardIdMatcher = new RegExp(/cardID=\"(.*?)\" entity=\"(.*?)\"/g);\r\n\t\tconst showEntityMatchResult = replayAsString.match(showEntityIdCardIdMatcher);\r\n\t\tfor (let match of showEntityMatchResult) {\r\n\t\t\t// // console.log(\"updating with show', result\", copy);\r\n\t\t\tconst result = new RegExp(/cardID=\"(.*?)\" entity=\"(.*?)\"/g).exec(match);\r\n\t\t\tif (result) {\r\n\t\t\t\t// // console.log('result', result);\r\n\t\t\t\tentityCardId = entityCardId.set(parseInt(result[2]), result[1]);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// console.log('[game-parser] mapping done', entityCardId.size);\r\n\r\n\t\t// Do the parsing turn by turn\r\n\t\t// let history: readonly HistoryItem[];\r\n\t\tconst xmlParsingIterator: IterableIterator<readonly HistoryItem[]> = new XmlParserService().parseXml(\r\n\t\t\treplayAsString,\r\n\t\t);\r\n\t\tlet game: Game = Game.createGame({} as Game);\r\n\t\tlet counter = 0;\r\n\t\twhile (true) {\r\n\t\t\tconst itValue = xmlParsingIterator.next();\r\n\t\t\tconst history: readonly HistoryItem[] = itValue.value;\r\n\t\t\t// console.debug('[game-parser] parsing for', counter, 'with history length', history.length);\r\n\r\n\t\t\tif (!history || itValue.done) {\r\n\t\t\t\t// console.debug('[game-parser] history parsing over', itValue);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (history[0] instanceof GameHistoryItem) {\r\n\t\t\t\tconst gameHistory: GameHistoryItem = history[0] as GameHistoryItem;\r\n\t\t\t\tgame = Object.assign(game, {\r\n\t\t\t\t\tbuildNumber: gameHistory.buildNumber,\r\n\t\t\t\t\tformatType: gameHistory.formatType,\r\n\t\t\t\t\tgameType: gameHistory.gameType,\r\n\t\t\t\t\tscenarioID: gameHistory.scenarioID,\r\n\t\t\t\t} as Game);\r\n\t\t\t\t// console.log('[game-parser] assign meta data to game', game);\r\n\t\t\t}\r\n\r\n\t\t\t// Battlegrounds tutorial\r\n\t\t\tif (game.scenarioID === 3539) {\r\n\t\t\t\t// console.log('[game-parser] Battlegrounds tutorial not supported, returning');\r\n\t\t\t\treturn [null, SMALL_PAUSE, 'Batllegrounds tutorial is not supported'];\r\n\t\t\t}\r\n\r\n\t\t\t// Preload the images we'll need early on\r\n\t\t\t// const preloadIterator = this.imagePreloader.preloadImages(history);\r\n\t\t\t// while (true) {\r\n\t\t\t// \tconst itValue = preloadIterator.next();\r\n\t\t\t// \tif (itValue.done) {\r\n\t\t\t// \t\tbreak;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\r\n\t\t\t// console.log('[game-parser] will initNewEntities', game, history, entityCardId.toJS());\r\n\t\t\tlet entities = this.gamePopulationService.initNewEntities(game, history, entityCardId);\r\n\t\t\t// console.log('[game-parser] initNewEntities', entities.size);\r\n\t\t\tif (game.turns.size === 0) {\r\n\t\t\t\tgame = this.gameInitializer.initializePlayers(game, entities);\r\n\t\t\t\tgame = this.gameStateParser.updateEntitiesUntilMulliganState(game, entities, history);\r\n\t\t\t\tentities = game.entitiesBeforeMulligan;\r\n\t\t\t\t// // console.log('game after populateEntitiesUntilMulliganState', game, game.turns.toJS());\r\n\t\t\t}\r\n\r\n\t\t\tgame = this.turnParser.createTurns(game, history);\r\n\t\t\t// // console.log('game after turn creation', game.turns.size);\r\n\t\t\tgame = this.actionParser.parseActions(game, entities, history, config);\r\n\t\t\t// // console.log(\r\n\t\t\t// \t'entity 150 parseActions',\r\n\t\t\t// \tgame.getLatestParsedState().get(150) &&\r\n\t\t\t// \t\tgame\r\n\t\t\t// \t\t\t.getLatestParsedState()\r\n\t\t\t// \t\t\t.get(150)\r\n\t\t\t// \t\t\t.tags.toJS(),\r\n\t\t\t// );\r\n\t\t\t// // console.log('game after action pasring', game.getLatestParsedState().toJS());\r\n\t\t\tif (game.turns.size > 0) {\r\n\t\t\t\tgame = this.activePlayerParser.parseActivePlayerForLastTurn(game);\r\n\t\t\t\t// // console.log(\r\n\t\t\t\t// \t'entity 150 parseActivePlayerForLastTurn',\r\n\t\t\t\t// \tgame.getLatestParsedState().get(150) &&\r\n\t\t\t\t// \t\tgame\r\n\t\t\t\t// \t\t\t.getLatestParsedState()\r\n\t\t\t\t// \t\t\t.get(150)\r\n\t\t\t\t// \t\t\t.tags.toJS(),\r\n\t\t\t\t// );\r\n\t\t\t\t// // console.log('game after parseActivePlayer', game, game.turns.toJS());\r\n\t\t\t\tgame = this.activeSpellParser.parseActiveSpellForLastTurn(game);\r\n\t\t\t\t// // console.log(\r\n\t\t\t\t// \t'entity 150 parseActiveSpellForLastTurn',\r\n\t\t\t\t// \tgame.getLatestParsedState().get(150) &&\r\n\t\t\t\t// \t\tgame\r\n\t\t\t\t// \t\t\t.getLatestParsedState()\r\n\t\t\t\t// \t\t\t.get(150)\r\n\t\t\t\t// \t\t\t.tags.toJS(),\r\n\t\t\t\t// );\r\n\t\t\t\t// // console.log('game after parseActiveSpell', game, game.turns.toJS());\r\n\t\t\t\tgame = this.targetsParser.parseTargetsForLastTurn(game);\r\n\t\t\t\t// // console.log(\r\n\t\t\t\t// \t'entity 150 parseTargetsForLastTurn',\r\n\t\t\t\t// \tgame.getLatestParsedState().get(150) &&\r\n\t\t\t\t// \t\tgame\r\n\t\t\t\t// \t\t\t.getLatestParsedState()\r\n\t\t\t\t// \t\t\t.get(150)\r\n\t\t\t\t// \t\t\t.tags.toJS(),\r\n\t\t\t\t// );\r\n\t\t\t\t// // console.log('game after parseTargets', game, game.turns.toJS());\r\n\t\t\t\tif (game.turns.size === 1) {\r\n\t\t\t\t\tgame = this.mulliganParser.affectMulligan(game);\r\n\t\t\t\t}\r\n\t\t\t\t// // console.log('game after affectMulligan', game, game.turns.toJS());\r\n\t\t\t\tgame = this.endGameParser.parseEndGame(game);\r\n\t\t\t\t// // console.log('game after parseEndGame', game, game.turns.toJS());\r\n\t\t\t\tgame = this.narrator.populateActionTextForLastTurn(game);\r\n\t\t\t\t// // console.log('game after populateActionText', game, game.turns.toJS());\r\n\t\t\t\tgame = this.narrator.createGameStoryForLastTurn(game);\r\n\t\t\t\t// // console.log(\r\n\t\t\t\t// \t'entity 150 createGameStoryForLastTurn',\r\n\t\t\t\t// \tgame.getLatestParsedState().get(150) &&\r\n\t\t\t\t// \t\tgame\r\n\t\t\t\t// \t\t\t.getLatestParsedState()\r\n\t\t\t\t// \t\t\t.get(150)\r\n\t\t\t\t// \t\t\t.tags.toJS(),\r\n\t\t\t\t// );\r\n\t\t\t\t// // console.log('game after createGameStory', game, game.turns.toJS());\r\n\t\t\t\t// if (counter === 4) {\r\n\t\t\t\t// \tcounter++;\r\n\t\t\t\t// \t// console.log('returning', counter);\r\n\t\t\t\t// \treturn [game, SMALL_PAUSE, 'Rendering game state'];\r\n\t\t\t\t// }\r\n\t\t\t\t// counter++;\r\n\t\t\t\t// // console.log('moving on', counter);\r\n\t\t\t\t// if (game.turns.size === 33) {\r\n\t\t\t\t// \t// console.log(\r\n\t\t\t\t// \t\t'entities at end of turn',\r\n\t\t\t\t// \t\tgame.getLatestParsedState().toJS(),\r\n\t\t\t\t// \t\tgame.getLatestParsedState().get(507),\r\n\t\t\t\t// \t);\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tyield [game, SMALL_PAUSE, 'Parsed turn ' + counter++];\r\n\t\t\t} else {\r\n\t\t\t\t// if (counter++ === 3) {\r\n\t\t\t\t// \tcounter++;\r\n\t\t\t\t// \t// // console.log('returning', counter, game.entities.get(73), game.entities.get(74));\r\n\t\t\t\t// \treturn [game, SMALL_PAUSE, 'Rendering game state'];\r\n\t\t\t\t// }\r\n\t\t\t\t// counter++;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// console.log('parsing done, returning');\r\n\t\treturn [game, SMALL_PAUSE, 'Rendering game state'];\r\n\t}\r\n\r\n\tprivate logPerf<T>(what: string, start: number, result?: T): T {\r\n\t\t// console.log('[perf] ', what, 'done after ', Date.now() - start, 'ms');\r\n\t\treturn result;\r\n\t}\r\n}\r\n\r\nexport interface GameProcessingStep {\r\n\tgame: Game;\r\n\tshouldBubble: boolean;\r\n}\r\n\r\nexport interface TechnicalParsingOptions {\r\n\treadonly shouldYield: number;\r\n\treadonly skipUi: boolean;\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\n@NgModule({\n\tdeclarations: [],\n\timports: [],\n\texports: [],\n})\nexport class ReplayParserModule {\n\tstatic forRoot(): ModuleWithProviders<ReplayParserModule> {\n\t\treturn {\n\t\t\tngModule: ReplayParserModule,\n\t\t\tproviders: [],\n\t\t};\n\t}\n}\n","/*\n * Public API Surface of replay-parser\n */\n\nexport * from './lib/models/models';\nexport * from './lib/services/all-cards.service';\nexport * from './lib/services/battlegrounds-simulation/battlegrounds-simulation-parser.service';\nexport * from './lib/services/game-parser.service';\nexport * from './lib/services/replay-parser.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BaseService","i1.AllCardsService","i2.NarratorService","i2.StateProcessorService","i2.ActionParserService","i3.TurnParserService","i4.ImagePreloaderService","i5.GamePopulationService","i6.GameStateParserService","i7.GameInitializerService","i8.ActivePlayerParserService","i9.ActiveSpellParserService","i10.TargetsParserService","i11.MulliganParserService","i12.EndGameParserService","i13.NarratorService","i14.StateProcessorService"],"mappings":"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"}