diff --git a/card.gd b/card.gd index 354a5fe..7782a43 100644 --- a/card.gd +++ b/card.gd @@ -5,7 +5,7 @@ extends TextureRect ## Contains helper text for the text, the cards ID, and the image path. ## The goal of this class is to make card management easier. -# we want to use this to convert the mana cost into text +# we want to use this to convert the mana cost into text # in the helper text box, but thats for the future const ManaCosts = preload("res://data/mana.gd") @@ -18,42 +18,48 @@ var oracle_text = "placeholder_oracle_text" var _png_path = "placeholder_image_path" var _jpg_path = "placeholder_image_path" + func _card_error(error_type: String) -> String: return "CARD::" + card_id + "::" + error_type + "\n" + func _init(id) -> void: card_id = id + func _ready() -> void: - if (_check_cache(card_id)): + if _check_cache(card_id): return await _do_cache_grab() + func _do_cache_grab() -> void: - await _do_http_request_card() - await _do_http_request_imgs(_png_path, true) - await _do_http_request_imgs(_jpg_path, false) - cache_done.emit() + await _do_http_request_card() + await _do_http_request_imgs(_png_path, true) + await _do_http_request_imgs(_jpg_path, false) + cache_done.emit() + func _check_cache(id: String) -> bool: - if (!FileAccess.file_exists("user://card_cache/" + id + "/card.json")): + if !FileAccess.file_exists("user://card_cache/" + id + "/card.json"): return false - if (!FileAccess.file_exists("user://card_cache/" + id + "/card.png")): + if !FileAccess.file_exists("user://card_cache/" + id + "/card.png"): return false - if (!FileAccess.file_exists("user://card_cache/" + id + "/card.jpg")): + if !FileAccess.file_exists("user://card_cache/" + id + "/card.jpg"): return false return true + func _do_http_request_imgs(image_path: String, png: bool) -> void: var httpr = HTTPRequest.new() add_child(httpr) - + var headers = PackedStringArray(["User-Agent: MTGUntapClone/0.1", "Accept: */*"]) var error = httpr.request(image_path, headers) if error != OK: push_error(_card_error("GET_REQUEST") + "An error occurred in the Scryfall request.") var response = await httpr.request_completed - + var img = Image.new() var imgerr if png: @@ -62,10 +68,11 @@ func _do_http_request_imgs(image_path: String, png: bool) -> void: imgerr = img.load_jpg_from_buffer(response[3]) if imgerr != OK: push_error(_card_error("IMG_LOADING") + "Couldn't load the image.") - + img.save_png("user://card_cache/" + card_id + ("/card.png" if png else "/card.jpg")) img = null + func _do_http_request_card() -> void: var httpr = HTTPRequest.new() add_child(httpr) @@ -74,53 +81,61 @@ func _do_http_request_card() -> void: var error = httpr.request("https://api.scryfall.com/cards/" + card_id, headers) if error != OK: push_error(_card_error("GET_REQUEST") + "An error occurred in the Scryfall request.") - + var response = await httpr.request_completed - - + if response[0] != HTTPRequest.RESULT_SUCCESS: push_error(_card_error("GET_REQUEST") + "Failed to fetch card data from Scryfall") return - + var unprocessed_body = response[3].get_string_from_utf8() var card_content = JSON.parse_string(unprocessed_body) - if (card_content == null): + if card_content == null: push_error(_card_error("PARSING") + "Failed to parse the Scryfall card results.") - + var dir = DirAccess.open("user://") - dir.make_dir_recursive("user://card_cache/" + card_id + "/") # lets ensure the path is there + dir.make_dir_recursive("user://card_cache/" + card_id + "/") # lets ensure the path is there dir = null - - var card_cache = FileAccess.open("user://card_cache/" + card_id + "/card.json", FileAccess.WRITE) - card_cache.store_string(unprocessed_body) # cache the json response - card_cache = null # closes the file - + + var card_cache = FileAccess.open( + "user://card_cache/" + card_id + "/card.json", FileAccess.WRITE + ) + card_cache.store_string(unprocessed_body) # cache the json response + card_cache = null # closes the file + var image_uris = card_content["image_uris"] _png_path = image_uris["png"] _jpg_path = image_uris["normal"] + ## load_card ## -## Loads the card, returns false, and triggers -## a cache fetch if the card is not in the cache, +## Loads the card, returns false, and triggers +## a cache fetch if the card is not in the cache, ## otherwise sets the cards variables if the cache is present. func load_card() -> bool: if !_check_cache(card_id): await _do_cache_grab() - push_error(_card_error("CACHE_FAIL") + "Cache wasn't ready, this card will need to be reinitialized") + push_error( + ( + _card_error("CACHE_FAIL") + + "Cache wasn't ready, this card will need to be reinitialized" + ) + ) return false - - var ondisk_card = FileAccess.open("user://card_cache/" + card_id + "/card.json", FileAccess.READ) + var ondisk_card = FileAccess.open( + "user://card_cache/" + card_id + "/card.json", FileAccess.READ + ) var card_json = JSON.parse_string(ondisk_card.get_as_text()) - + card_name = card_json["name"] card_type = card_json["type_line"] oracle_text = card_json["oracle_text"] - + var img = Image.new() img.load("user://card_cache/" + card_id + "/card.jpg") texture = ImageTexture.create_from_image(img) - + ondisk_card = null return true diff --git a/data/mana.gd b/data/mana.gd index 5f3ed67..bbc8ee7 100644 --- a/data/mana.gd +++ b/data/mana.gd @@ -1,10 +1 @@ -enum ManaCosts { - WHITE, - BLUE, - BLACK, - RED, - GREEN, - COLOURLESS, - GENERIC, - LIFE -} +enum ManaCosts { WHITE, BLUE, BLACK, RED, GREEN, COLOURLESS, GENERIC, LIFE } diff --git a/library.gd b/library.gd index 8fd4328..ccd5276 100644 --- a/library.gd +++ b/library.gd @@ -5,9 +5,11 @@ var _card_class = preload("res://card.gd") var lib_cards var num_cards + func _load_card_callback(card) -> void: card.load_card() + func _init(card_ids: Array) -> void: lib_cards = Array() var temp_card @@ -16,22 +18,26 @@ func _init(card_ids: Array) -> void: temp_card.cache_done.connect(_load_card_callback.bind(temp_card)) lib_cards.push_back(temp_card) num_cards += 1 - + + func add_cards(cards: Array, top: bool) -> void: for card in cards: add_card(card, top) + func add_card(card, top: bool) -> void: if top: lib_cards.push_front(card) else: lib_cards.push_back(card) + func shuffle() -> void: lib_cards.shuffle() + func draw_cards(num) -> Array: var ret = Array() for i in num: - ret.push_back(lib_cards.pop_front()) + ret.push_back(lib_cards.pop_front()) return ret diff --git a/player.gd b/player.gd index c7cb1a0..897f957 100644 --- a/player.gd +++ b/player.gd @@ -4,10 +4,12 @@ var _card_class = preload("res://card.gd") var card + func _on_request_completed(result, response_code, headers, body): var json = JSON.parse_string(body.get_string_from_utf8()) print(json["name"]) + func _test_func(): card.load_card() print(card.card_id) @@ -21,10 +23,10 @@ func _ready() -> void: # TODO: Create 2-4 player instances as children of this tabletop node. card = _card_class.new("d3f10f07-7cfe-4a6f-8de6-373e367a731b") add_child(card) - + card.cache_done.connect(_test_func) - pass # Replace with function body. + pass # Replace with function body. # Called every frame. 'delta' is the elapsed time since the previous frame. diff --git a/project.godot b/project.godot index 753f1cc..2a5cc2f 100644 --- a/project.godot +++ b/project.godot @@ -15,6 +15,12 @@ run/main_scene="uid://b4ldtb3gw0jlu" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg" +[display] + +window/size/viewport_width=1920 +window/size/viewport_height=1080 +window/size/mode=3 + [editor_plugins] -enabled=PackedStringArray("res://addons/godot_vim/plugin.cfg") +enabled=PackedStringArray() diff --git a/tabletop.gd b/tabletop.gd index 3970446..f6bc1ca 100644 --- a/tabletop.gd +++ b/tabletop.gd @@ -3,15 +3,14 @@ extends Node2D var player_class = preload("res://player.gd") - # Called when the node enters the scene tree for the first time. func _ready() -> void: # TODO: Create 2-4 player instances as children of this tabletop node. var player = player_class.new() add_child(player) - - pass # Replace with function body. + + pass # Replace with function body. # Called every frame. 'delta' is the elapsed time since the previous frame. diff --git a/tabletop.tscn b/tabletop.tscn index fa6d891..9bd0c02 100644 --- a/tabletop.tscn +++ b/tabletop.tscn @@ -3,5 +3,4 @@ [ext_resource type="Script" uid="uid://cfkew150yl1y3" path="res://tabletop.gd" id="1_3we3x"] [node name="Tabletop" type="Node2D"] -position = Vector2(-5760, -16768) script = ExtResource("1_3we3x")