# editor/move_importer.gd @tool class_name PokeApiMoveImporter 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.moves_dir() func run() -> void: DirAccess.make_dir_recursive_absolute(_dir) var list = await _client.get_json(PokeApiClient.API + "move?limit=2000") if list == null: message.emit("[color=red]Impossible de récupérer la liste des capacités.[/color]") return var entries : Array = [] for r in list["results"]: var id : int = int(String(r["url"]).trim_suffix("/").get_file()) if id < 10000: entries.append(r) # ignore les capacités "shadow" (Colosseum/XD) message.emit("%d capacités à traiter..." % entries.size()) await _client.run_parallel(entries, _import_move) message.emit("Capacités terminées.") func _import_move(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 m := MoveData.new() m.id = j["id"] m.api_name = j["name"] m.names = PokeApiText.names(j["names"], _languages) m.descriptions = PokeApiText.flavors(j["flavor_text_entries"], _languages) m.type = j["type"]["name"] m.category = j["damage_class"]["name"] m.power = int(j["power"]) if j["power"] != null else 0 m.accuracy = int(j["accuracy"]) if j["accuracy"] != null else 0 m.pp = int(j["pp"]) if j["pp"] != null else 0 m.priority = j["priority"] m.target = j["target"]["name"] ResourceSaver.save(m, path)