extends Node class_name Player var attached_cards: Dictionary = {} var attached_effects: Dictionary = {} var hand_size: int = 2 var gold: int = 70 var tokens: int = 1 var game: ChessGame var run_count: int = 0 const MAX_HAND_SIZE = 5 var unlocked_cards = [] var cards_by_rank = { Card.Rank.RANK_0: [], # Most powerful (one-time use) Card.Rank.RANK_1: [], # Once per match Card.Rank.RANK_2: [], # Discard pile cards Card.Rank.RANK_3: [] # Basic cards } var cards_by_name = {} func _init(g: int, size: int, tok: int, gm: ChessGame): print("INIT PLAYER CHARACTER") # var classList = ProjectSettings.get_global_class_list(); # for classType in classList: # if classType.base == "Card": # print("ALL CARDS ", classType) gold = g tokens = tok game = gm hand_size = size update_deck_hand_size(size) load_all_cards() initialize_deck_from_defaults(unlocked_cards) # Debug output print_card_list() func initialize_deck_from_defaults(unlocked_cards: Array = []): if "deckManager" in game: game.deckManager.initializeStartingDeck(unlocked_cards) func update_deck_hand_size(size: int): if "deckManager" in game: game.deckManager.set_hand_size(hand_size) func set_hand_size(size: int): hand_size = size func get_tokens() -> int: return tokens func set_tokens(amount: int) -> void: tokens = amount func remove_tokens(amount: int) -> void: tokens = max(0, tokens - amount) func add_tokens(t: int) -> void : tokens += t func increment_runs() -> void : run_count += 1 func get_run_count() -> int : return run_count func get_gold() -> int : return gold func add_gold(g: int) -> void : gold += g func remove_gold(g: int) -> void : gold -= g func set_gold(g: int) -> void : gold = g func unlock_card(card_instance): unlocked_cards.append(card_instance) func load_all_cards(): var class_list = ProjectSettings.get_global_class_list() print("Loading all card classes...") for class_info in class_list: if class_info.base == "Card": var cname = class_info["class"] print("Found card class: ", cname) var script_path = class_info["path"] var card_script = load(script_path) if card_script == null: print("Couldn't load script: ", script_path) continue var card_instance = card_script.new() if card_instance.is_default: unlocked_cards.append(card_instance) cards_by_name[card_instance.cardName] = card_instance if card_instance.rank in cards_by_rank: cards_by_rank[card_instance.rank].append(card_instance) else: print("Warning: Card has unknown rank: ", card_instance.cardName, " (", card_instance.rank, ")") print("Successfully loaded card: ", card_instance.cardName, " (Rank ", card_instance.rank, ")") print("Card loading complete. Loaded ", cards_by_name.size(), " cards.") func print_card_list(): print("\n--- CARD LIST BY RANK ---") for rank in cards_by_rank: var rank_name = "" match rank: Card.Rank.RANK_0: rank_name = "RANK 0 (One-time use)" Card.Rank.RANK_1: rank_name = "RANK 1 (Once per match)" Card.Rank.RANK_2: rank_name = "RANK 2 (Discard pile)" Card.Rank.RANK_3: rank_name = "RANK 3 (Basic)" _: rank_name = "UNKNOWN RANK" print("\n" + rank_name + " (" + str(cards_by_rank[rank].size()) + " cards):") for card in cards_by_rank[rank]: print(" - " + card.cardName) print("\n--- END CARD LIST ---\n") print("\n--- UNLOCKED CARD LIST ---") for card in unlocked_cards: print(" - " + card.cardName) print("\n--- END UNLOCKED CARD LIST ---\n") func get_card(card_name: String) -> Card: if card_name in cards_by_name: return cards_by_name[card_name].duplicate() return null func get_random_card(rank: int) -> Card: if rank in cards_by_rank and not cards_by_rank[rank].is_empty(): var random_index = randi() % cards_by_rank[rank].size() return cards_by_rank[rank][random_index].duplicate() return null func get_cards_by_rank(rank: int) -> Array: if rank in cards_by_rank: var result = [] for card in cards_by_rank[rank]: result.append(card.duplicate()) return result return [] func get_all_cards() -> Array: var result = [] for rank in cards_by_rank: for card in cards_by_rank[rank]: result.append(card.duplicate()) return result