extends Node @export var full_deck: Dictionary[int, Card] @export var card_fallback_texture: Texture enum CardStyle { STICKMAN, } func get_shuffled_cards(client_ids: Array[String], cards_to_pick: int) -> Dictionary: # Dictionary[String, Array[int]] var dict: Dictionary = {} var deck: Array[int] = full_deck.keys() deck.shuffle() var card_index = 0 for client_id in client_ids: var player_deck: Array[int] = [] for j in cards_to_pick: player_deck.append(deck[card_index]) card_index += 1 dict[client_id] = player_deck # Add trump card, if there are cards left in the deck if card_index == 60: dict["trump"] = -1 else: dict["trump"] = deck[card_index] return dict func get_card_texture(card_id: int, style: CardStyle = CardStyle.STICKMAN) -> Texture: var style_name: String = "" match style: CardStyle.STICKMAN: style_name = "stickman" return load("res://cards/textures/" + style_name + "/" + _get_card_name(card_id) + ".webp") func get_winning_card(card_ids: Array[int], trump: int) -> int: print("ids: " + str(card_ids) + ", trump: " + str(trump)) if card_ids.has(56) or card_ids.has(57) or card_ids.has(58) or card_ids.has(59): # cards contain magician print("checking magician route") for card_id in card_ids: if full_deck[card_id].card_type == Card.CardType.MAGICIAN: print("picked magician") return card_id return -1 # should not happen elif not trump == -1: # trump exists, determine winner from this print("trump route") var largest_trump_card_id: int = -1 var trump_color: Card.CardColor = full_deck[trump].color for card_id in card_ids: if full_deck[card_id].color == trump_color and card_id > largest_trump_card_id: largest_trump_card_id = card_id if not largest_trump_card_id == -1: print("picked " + str(largest_trump_card_id)) return largest_trump_card_id # no trump played; determine from highest played card return _get_largest_non_trump_card(card_ids) else: # no trump exists return _get_largest_non_trump_card(card_ids) func _get_largest_non_trump_card(card_ids: Array[int]) -> int: var largest_card_id: int = -1 print("nontrump route") var first_color: Card.CardColor = _get_first_color_card(card_ids) if first_color == Card.CardColor.WHITE: print("all white") return card_ids[0] # first one wins if all played cards are white else: for card_id in card_ids: if full_deck[card_id].color == first_color and card_id > largest_card_id: largest_card_id = card_id print("picked " + str(largest_card_id)) return largest_card_id ## Returns the color of the first non-white card played. ## Returns WHITE if all cards played are white. func _get_first_color_card(card_ids: Array[int]) -> Card.CardColor: for card_id in card_ids: if not full_deck[card_id].color == Card.CardColor.WHITE: return full_deck[card_id].color return Card.CardColor.WHITE func _get_card_name(card_id: int) -> String: var color: String var suffix: String if card_id > 51 and card_id < 56: return "jester" elif card_id > 55: return "magician" elif card_id < 13: color = "blue" elif card_id < 26: color = "green" elif card_id < 39: color = "violet" else: color = "orange" match card_id: 0, 13, 26, 39: suffix = "1" 1, 14, 27, 40: suffix = "2" 2, 15, 28, 41: suffix = "3" 3, 16, 29, 42: suffix = "4" 4, 17, 30, 43: suffix = "5" 5, 18, 31, 44: suffix = "6" 6, 19, 32, 45: suffix = "7" 7, 20, 33, 46: suffix = "8" 8, 21, 34, 47: suffix = "9" 9, 22, 35, 48: suffix = "10" 10, 23, 36, 49: suffix = "11" 11, 24, 37, 50: suffix = "12" 12, 25, 38, 51: suffix = "13" 52, 53, 54, 55: suffix = "joker" 56, 57, 58, 59: suffix = "magician" return color + "_" + suffix func get_card_color(card_id: int) -> Card.CardColor: if card_id < 13: return Card.CardColor.BLUE elif card_id < 26: return Card.CardColor.GREEN elif card_id < 39: return Card.CardColor.RED elif card_id < 52: return Card.CardColor.YELLOW else: return Card.CardColor.WHITE