diff --git a/HSTracker/Logging/EntityInfo.swift b/HSTracker/Logging/EntityInfo.swift index f843200a..f7b7663f 100644 --- a/HSTracker/Logging/EntityInfo.swift +++ b/HSTracker/Logging/EntityInfo.swift @@ -38,7 +38,12 @@ class EntityInfo { var storedCardIds: [String] = [] var copyOfCardId: String? var latestCardId: String { - get { _latestCardId ?? _entity.cardId } + get { + if let id = _latestCardId, !id.isEmpty { + return id + } + return _entity.cardId + } set { _latestCardId = newValue } } var deckIndex = 0 diff --git a/HSTracker/Logging/Parsers/PowerGameStateParser.swift b/HSTracker/Logging/Parsers/PowerGameStateParser.swift index 251d8091..c0fe3882 100644 --- a/HSTracker/Logging/Parsers/PowerGameStateParser.swift +++ b/HSTracker/Logging/Parsers/PowerGameStateParser.swift @@ -284,6 +284,11 @@ class PowerGameStateParser: LogEventParser { if let currentBlock = currentBlock, entity.cardId.uppercased().contains("HERO") { currentBlock.hasFullEntityHeroPackets = true } + } else if let cardId, !cardId.isBlank, let entity = eventHandler.entities[id] { + // Entity already exists but FULL_ENTITY - Updating arrived with a different CardID + // This happens when a Discover choice is changed via Rewind + entity.cardId = cardId + entity.info.latestCardId = cardId } set(currentEntity: id) @@ -340,7 +345,9 @@ class PowerGameStateParser: LogEventParser { entity.cardId.hasPrefix("CREATED_BY_") { entity.cardId = cardId } - entity.info.latestCardId = cardId + if !cardId.isEmpty { + entity.info.latestCardId = cardId + } if type == "SHOW_ENTITY" { if entity.info.guessedCardState != GuessedCardState.none { entity.info.guessedCardState = GuessedCardState.revealed diff --git a/HSTracker/Logging/Parsers/TagChangeActions.swift b/HSTracker/Logging/Parsers/TagChangeActions.swift index c642c52d..4282913b 100644 --- a/HSTracker/Logging/Parsers/TagChangeActions.swift +++ b/HSTracker/Logging/Parsers/TagChangeActions.swift @@ -80,8 +80,6 @@ struct TagChangeActions { self.onRevealed(eventHandler: eventHandler, id: id, value: value, previous: prevValue) case .parent_card: self.onParentCardChange(eventHandler: eventHandler, id: id, value: value, previous: prevValue) - case .cant_play: - self.cantPlayChange(eventHandler: eventHandler, id: id, value: value, previous: prevValue) case .health: self.healthChange(eventHandler: eventHandler, id: id, value: value, previous: prevValue) case .maxresources: @@ -648,19 +646,6 @@ struct TagChangeActions { } } - private func cantPlayChange(eventHandler: PowerEventHandler, id: Int, value: Int, previous: Int) { - guard let entity = eventHandler.entities[id] else { - return - } - - let player = entity.isControlled(by: eventHandler.player.id) ? eventHandler.player : eventHandler.opponent - player?.cardsPlayedThisMatch.remove(entity) - player?.cardsPlayedThisTurn.remove(entity) - player?.spellsPlayedCards.remove(entity) - player?.spellsPlayedInFriendlyCharacters.remove(entity) - player?.spellsPlayedInOpponentCharacters.remove(entity) - } - private func onParentCardChange(eventHandler: PowerEventHandler, id: Int, value: Int, previous: Int) { guard let entity = eventHandler.entities[id] else { return