RapidGameFramework
Reusable Godot managers for data-driven small games
Loading...
Searching...
No Matches
card_manager.gd
Go to the documentation of this file.
1extends RefCounted
2
3
14
15const DataCacheManager = preload("res://scripts/systems/dataCacheManager/data_cache_manager.gd")
16
17var cards := {}
18var cards_by_rarity := {}
19var card_order := []
20var data_cache_manager = DataCacheManager.new()
21
22
23
24func load_cards(file_path:String) -> void:
25 reset()
26 load_card_data(data_cache_manager.load_json(file_path))
27
28
29
30func get_cache_stats() -> Dictionary:
31 return data_cache_manager.get_cache_stats()
32
33
34
35func load_card_data(data) -> void:
36 reset()
37 if not data is Dictionary:
38 return
39 for raw_card in data.get("cards", []):
40 if not raw_card is Dictionary:
41 continue
42 var card = raw_card.duplicate(true)
43 var id = str(card.get("id", ""))
44 if id == "":
45 continue
46 var rarity = str(card.get("rarity", "Common"))
47 cards[id] = card
48 card_order.append(id)
49 if not cards_by_rarity.has(rarity):
50 cards_by_rarity[rarity] = []
51 cards_by_rarity[rarity].append(card)
52
53
54
55func get_card(id) -> Dictionary:
56 return cards.get(str(id), {})
57
58
59
60func get_all_cards() -> Array:
61 var list = []
62 for id in card_order:
63 list.append(cards[id])
64 return list
65
66
67
68func get_cards_by_rarity(rarity:String) -> Array:
69 return cards_by_rarity.get(rarity, [])
70
71
72
73func get_random_card_by_rarity(rarity:String) -> Dictionary:
74 var options = get_cards_by_rarity(rarity)
75 if options.is_empty():
76 return {}
77 return options[randi_range(0, options.size() - 1)].duplicate(true)
78
79
80
81func get_random_card() -> Dictionary:
82 var all_cards = get_all_cards()
83 if all_cards.is_empty():
84 return {}
85 return all_cards[randi_range(0, all_cards.size() - 1)].duplicate(true)
86
87
88
89func reset() -> void:
90 cards.clear()
91 cards_by_rarity.clear()
92 card_order.clear()