pokeapi_importer/settings.gd
2026-10-04 13:43:32 +02:00

63 lines
2.7 KiB
GDScript

# 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/"
static func items_dir() -> String: return data_dir() + "/items/"
# 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)}