# settings.gd @tool class_name PokeApiSettings extends RefCounted const KEY_DATA_DIR := "pokeapi_importer/data_dir" const KEY_LANGUAGES := "pokeapi_importer/languages" const KEY_MODELS_DIR := "pokeapi_importer/models_dir" const KEY_MAX_CONCURRENT := "pokeapi_importer/max_concurrent_requests" const DEFAULT_DATA_DIR := "res://data/pokeapi" const DEFAULT_MODELS_DIR := "" const DEFAULT_MAX_CONCURRENT := 4 static func default_languages() -> PackedStringArray: return PackedStringArray(["fr", "en"]) static func register() -> void: _add(KEY_DATA_DIR, DEFAULT_DATA_DIR, TYPE_STRING, PROPERTY_HINT_DIR) _add(KEY_LANGUAGES, default_languages(), TYPE_PACKED_STRING_ARRAY) _add(KEY_MODELS_DIR, DEFAULT_MODELS_DIR, TYPE_STRING, PROPERTY_HINT_DIR) _add(KEY_MAX_CONCURRENT, DEFAULT_MAX_CONCURRENT, TYPE_INT, PROPERTY_HINT_RANGE, "1,16") static func _add(key : String, default : Variant, type : int, hint : int = PROPERTY_HINT_NONE, hint_string : String = "") -> void: if !ProjectSettings.has_setting(key): ProjectSettings.set_setting(key, default) ProjectSettings.set_initial_value(key, default) ProjectSettings.add_property_info({ "name": key, "type": type, "hint": hint, "hint_string": hint_string}) static func data_dir() -> String: return String(ProjectSettings.get_setting(KEY_DATA_DIR, DEFAULT_DATA_DIR)).trim_suffix("/") static func languages() -> PackedStringArray: return PackedStringArray(ProjectSettings.get_setting(KEY_LANGUAGES, default_languages())) static func models_dir() -> String: return String(ProjectSettings.get_setting(KEY_MODELS_DIR, DEFAULT_MODELS_DIR)).trim_suffix("/") static func max_concurrent() -> int: return int(ProjectSettings.get_setting(KEY_MAX_CONCURRENT, DEFAULT_MAX_CONCURRENT)) # chemins dérivés (avec "/" final pour les dossiers) static func moves_dir() -> String: return data_dir() + "/moves/" static func pokemon_dir() -> String: return data_dir() + "/pokemon/" static func sprites_dir() -> String: return data_dir() + "/sprites/" static func cries_dir() -> String: return data_dir() + "/cries/" static func types_dir() -> String: return data_dir() + "/types/" static func abilities_dir() -> String: return data_dir() + "/abilities/" static func evolution_dir() -> String: return data_dir() + "/evolution/" # nommage des fichiers pokémon : "0025_pikachu" static func pokemon_stem(id : int, api_name : String) -> String: return "%04d_%s" % [id, api_name] ## "0025_pikachu" -> {"id": 25, "name": "pikachu"} ; {} si le format ne correspond pas static func parse_pokemon_stem(stem : String) -> Dictionary: var sep := stem.find("_") if sep <= 0 or !stem.substr(0, sep).is_valid_int(): return {} return {"id": int(stem.substr(0, sep)), "name": stem.substr(sep + 1)}