pokeapi_importer/editor/ability_importer.gd
2026-10-04 13:44:13 +02:00

45 lines
1.4 KiB
GDScript

# editor/ability_importer.gd
@tool
class_name PokeApiAbilityImporter
extends RefCounted
signal message(text : String)
var _client : PokeApiClient
var _overwrite : bool
var _languages : PackedStringArray
var _dir : String
func _init(client : PokeApiClient, overwrite : bool) -> void:
_client = client
_overwrite = overwrite
_languages = PokeApiSettings.languages()
_dir = PokeApiSettings.abilities_dir()
func run() -> void:
DirAccess.make_dir_recursive_absolute(_dir)
var list = await _client.get_json(PokeApiClient.API + "ability?limit=1000")
if list == null:
message.emit("[color=red]Impossible de récupérer la liste des talents.[/color]")
return
message.emit("%d talents à traiter..." % list["results"].size())
await _client.run_parallel(list["results"], _import_ability)
message.emit("Talents terminés.")
func _import_ability(entry : Dictionary) -> void:
var path : String = _dir + entry["name"] + ".tres"
if !_overwrite and FileAccess.file_exists(path): return
var j = await _client.get_json(entry["url"])
if j == null:
message.emit("[color=red]Échec : %s[/color]" % entry["name"])
return
var a := AbilityData.new()
a.id = PokeApiJson.get_int(j, "id")
a.api_name = PokeApiJson.get_str(j, "name", entry["name"])
a.names = PokeApiText.names(PokeApiJson.get_array(j, "names"), _languages)
a.descriptions = PokeApiText.flavors(PokeApiJson.get_array(j, "flavor_text_entries"), _languages)
ResourceSaver.save(a, path)