77 lines
No EOL
2.1 KiB
GDScript
77 lines
No EOL
2.1 KiB
GDScript
extends Node
|
|
|
|
var loadedSets := {}
|
|
var loadedCards := {}
|
|
|
|
class CardInfo:
|
|
var id := "unknown"
|
|
var name := "Unknown card"
|
|
var subname := "--"
|
|
var colors := []
|
|
var keywords := []
|
|
var traits := []
|
|
var requirements := {}
|
|
var cost := 0
|
|
var power := 0
|
|
var type := "None"
|
|
var text := "This card does not exist, if you see it it's because something failed loading"
|
|
var rarity := "UR"
|
|
var bonus := 0
|
|
var opponentPower := 0
|
|
|
|
func _init(cardEntry: Dictionary):
|
|
if not cardEntry.empty():
|
|
id = cardEntry.ID
|
|
name = cardEntry.Name
|
|
subname = cardEntry.Subname
|
|
colors = cardEntry.Element
|
|
keywords = cardEntry.Keywords
|
|
traits = cardEntry.Traits
|
|
type = cardEntry.Type
|
|
text = cardEntry.Text
|
|
rarity = cardEntry.Rarity
|
|
if cardEntry.has("Power"):
|
|
power = cardEntry.Power
|
|
if cardEntry.has("Cost"):
|
|
cost = cardEntry.Cost
|
|
if cardEntry.has("ProblemBonus"):
|
|
bonus = cardEntry.ProblemBonus
|
|
if cardEntry.has("Requirement"):
|
|
requirements = cardEntry.Requirement
|
|
elif cardEntry.has("ProblemRequirement"):
|
|
requirements = cardEntry.ProblemRequirement
|
|
if cardEntry.has("ProblemOpponentPower"):
|
|
opponentPower = cardEntry.ProblemOpponentPower
|
|
|
|
func _ready():
|
|
# Search for sets in MLPData
|
|
var dir := Directory.new()
|
|
var err := dir.change_dir("res://MLPData/Sets")
|
|
if err != OK:
|
|
print(err)
|
|
dir.list_dir_begin(true, true)
|
|
while true:
|
|
var next := dir.get_next()
|
|
if next == "":
|
|
break
|
|
# Check for cached resource
|
|
var file := File.new()
|
|
file.open("res://MLPData/Sets/" + next, File.READ)
|
|
var result = parse_json(file.get_as_text())
|
|
if typeof(result) == TYPE_DICTIONARY:
|
|
loadedSets[next] = result.Name
|
|
add_to_dict(result.Cards)
|
|
print("Loaded set: ", result.Name, " (", next, ", ", len(result.Cards), " cards)")
|
|
else:
|
|
breakpoint
|
|
|
|
func add_to_dict(cards: Array):
|
|
for card in cards:
|
|
loadedCards[card.ID] = CardInfo.new(card)
|
|
|
|
func get_by_id(id: String) -> CardInfo:
|
|
if not loadedCards.has(id):
|
|
print("[WARN] Trying to get unknown card: ", id)
|
|
#TODO return error or something
|
|
return CardInfo.new({})
|
|
return loadedCards[id] |