63 lines
2.7 KiB
GDScript
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)}
|