From 5f86a2d674685f5759f0e6cd50beca1da9acacfe Mon Sep 17 00:00:00 2001 From: Stephano Telolahy Date: Fri, 24 Nov 2023 22:09:01 +0100 Subject: [PATCH] wip --- .../Game/DSL/Modifiers/Card+Modifiers.swift | 2 +- .../State+Extension/GameState+CardAlias.swift | 8 ++++--- GameKit/Sources/Game/State/Card.swift | 21 ++++++++++++++++--- GameKit/Sources/Inventory/CardList.swift | 6 +++++- GameKit/Tests/GameTests/DSL/CardTests.swift | 2 +- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/GameKit/Sources/Game/DSL/Modifiers/Card+Modifiers.swift b/GameKit/Sources/Game/DSL/Modifiers/Card+Modifiers.swift index 46a812483..c483b56a5 100644 --- a/GameKit/Sources/Game/DSL/Modifiers/Card+Modifiers.swift +++ b/GameKit/Sources/Game/DSL/Modifiers/Card+Modifiers.swift @@ -13,7 +13,7 @@ public extension Card { prototype: Card? = nil, silent: [String] = [], attributes: [String: Int] = [:], - alias: [String: String] = [:], + alias: [CardAlias] = [], priority: Int = 0, @CardRuleBuilder content: () -> [CardRule] = { [] } ) { diff --git a/GameKit/Sources/Game/Reducer/State+Extension/GameState+CardAlias.swift b/GameKit/Sources/Game/Reducer/State+Extension/GameState+CardAlias.swift index a731e0f57..84a8c828a 100644 --- a/GameKit/Sources/Game/Reducer/State+Extension/GameState+CardAlias.swift +++ b/GameKit/Sources/Game/Reducer/State+Extension/GameState+CardAlias.swift @@ -9,11 +9,13 @@ extension GameState { func alias(for card: String, player: String) -> String? { let playerObj = self.player(player) let figure = playerObj.figure - let cardAlias = self.cardRef[figure]?.alias ?? [:] - guard let matched = cardAlias.first(where: { card.matches(regex: $0.value ) }) else { + let cardAlias = self.cardRef[figure]?.alias ?? [] + guard let matched = cardAlias.first(where: { + card.matches(regex: $0.regex) + }) else { return nil } - return matched.key + return matched.card } } diff --git a/GameKit/Sources/Game/State/Card.swift b/GameKit/Sources/Game/State/Card.swift index d918447d8..d8f130e30 100644 --- a/GameKit/Sources/Game/State/Card.swift +++ b/GameKit/Sources/Game/State/Card.swift @@ -11,9 +11,7 @@ public struct Card: Codable, Equatable { public let attributes: [String: Int] /// Playable card alias - /// - key: card effect - /// - value: regex of played card - public let alias: [String: String] + public let alias: [CardAlias] /// Effect priority public let priority: Int @@ -29,3 +27,20 @@ public struct CardRule: Codable, Equatable { /// Conditions to trigger the card effect let playReqs: [PlayReq] } + +public struct CardAlias: Codable, Equatable { + /// Name of card having the play effect + let card: String + + /// Regex of alias card + let regex: String + + /// Conditions to trigger the card alias + let playReqs: [PlayReq] + + public init(card: String, regex: String, playReqs: [PlayReq] = []) { + self.card = card + self.regex = regex + self.playReqs = playReqs + } +} diff --git a/GameKit/Sources/Inventory/CardList.swift b/GameKit/Sources/Inventory/CardList.swift index 9f4f5c85e..761c56309 100644 --- a/GameKit/Sources/Inventory/CardList.swift +++ b/GameKit/Sources/Inventory/CardList.swift @@ -327,7 +327,11 @@ private extension CardList { static let luckyDuke = Card(.luckyDuke, prototype: pDefault, attributes: [.maxHealth: 4, .flippedCards: 2]) - static let calamityJanet = Card(.calamityJanet, prototype: pDefault, attributes: [.maxHealth: 4], alias: [.bang: .missed, .missed: .bang]) + private static let playBangAsMissedAndViceVersa: [CardAlias] = [ + CardAlias(card: .bang, regex: .missed), + CardAlias(card: .missed, regex: .bang) + ] + static let calamityJanet = Card(.calamityJanet, prototype: pDefault, attributes: [.maxHealth: 4], alias: playBangAsMissedAndViceVersa) static let bartCassidy = Card(.bartCassidy, prototype: pDefault, attributes: [.maxHealth: 4]) { CardEffect.drawDeck diff --git a/GameKit/Tests/GameTests/DSL/CardTests.swift b/GameKit/Tests/GameTests/DSL/CardTests.swift index 292aa8d09..d389a003f 100644 --- a/GameKit/Tests/GameTests/DSL/CardTests.swift +++ b/GameKit/Tests/GameTests/DSL/CardTests.swift @@ -22,7 +22,7 @@ final class CardTests: XCTestCase { "name": "c1", "priority": 1, "attributes": {}, - "alias": {}, + "alias": [], "rules": [] } """