From d00dc5bba26c85febf59987623cb207148f05261 Mon Sep 17 00:00:00 2001 From: TheThomaas Date: Tue, 29 Sep 2026 17:25:20 +0200 Subject: [PATCH] Update Evolution conditions --- data/evolution_condition.gd | 23 ++++++++++++++++++++++ data/evolution_condition.gd.uid | 1 + data/evolution_edge.gd | 9 +-------- editor/evolution_importer.gd | 35 ++++++++++++++++++++++----------- 4 files changed, 49 insertions(+), 19 deletions(-) create mode 100644 data/evolution_condition.gd create mode 100644 data/evolution_condition.gd.uid diff --git a/data/evolution_condition.gd b/data/evolution_condition.gd new file mode 100644 index 0000000..41355dd --- /dev/null +++ b/data/evolution_condition.gd @@ -0,0 +1,23 @@ +# data/evolution_condition.gd +@tool +class_name EvolutionCondition +extends Resource + +@export var trigger : String # "level-up", "trade", "use-item", "shed"... +@export var min_level : int = 0 # 0 = pas de condition de niveau +@export var item : String # objet à utiliser, "" si aucun +@export var held_item : String # objet à tenir, "" si aucun +@export var known_move : String # capacité requise, "" si aucune +@export var known_move_type : String # type de capacité requis, "" si aucun +@export var min_happiness : int = 0 +@export var min_beauty : int = 0 +@export var min_affection : int = 0 +@export var time_of_day : String # "day", "night", "" si indifférent +@export var location : String # lieu requis, "" si aucun +@export var trade_species : String # échange contre cette espèce précise, "" sinon +@export var party_species : String # espèce requise dans l'équipe, "" si aucune +@export var party_type : String # type requis dans l'équipe, "" si aucun +@export var relative_physical_stats : int = 0 # -1, 0, 1 (atkdef) ; PokeAPI: null -> 0 par défaut, ambigu avec "égal" +@export var needs_overworld_rain : bool = false +@export var turn_upside_down : bool = false +@export var gender : int = -1 # -1 = indifférent, 1 = femelle, 2 = mâle (valeurs de l'API PokeAPI) diff --git a/data/evolution_condition.gd.uid b/data/evolution_condition.gd.uid new file mode 100644 index 0000000..404f902 --- /dev/null +++ b/data/evolution_condition.gd.uid @@ -0,0 +1 @@ +uid://81p3aw271qyx diff --git a/data/evolution_edge.gd b/data/evolution_edge.gd index 11d9b4c..e117717 100644 --- a/data/evolution_edge.gd +++ b/data/evolution_edge.gd @@ -3,12 +3,5 @@ class_name EvolutionEdge extends Resource -@export var trigger : String # "level-up", "trade", "use-item", "shed"... -@export var min_level : int = 0 # 0 = pas de condition de niveau -@export var item : String # objet à utiliser, "" si aucun -@export var held_item : String # objet à tenir, "" si aucun -@export var known_move : String # capacité requise, "" si aucune -@export var min_happiness : int = 0 -@export var time_of_day : String # "day", "night", "" si indifférent -@export var trade_species : String # échange contre cette espèce précise, "" sinon @export var target : EvolutionNode +@export var conditions : Array[EvolutionCondition] = [] # chaque condition suffit à elle seule diff --git a/editor/evolution_importer.gd b/editor/evolution_importer.gd index 9cbee98..dc2ce90 100644 --- a/editor/evolution_importer.gd +++ b/editor/evolution_importer.gd @@ -36,17 +36,30 @@ func _build_node(link : Dictionary) -> EvolutionNode: node.species_name = link["species"]["name"] for evo in link["evolves_to"]: var edge := EvolutionEdge.new() - var details : Array = evo["evolution_details"] - if !details.is_empty(): - var det : Dictionary = details[0] # première méthode si plusieurs sont possibles - edge.trigger = det["trigger"]["name"] if det["trigger"] != null else "" - edge.min_level = int(det["min_level"]) if det["min_level"] != null else 0 - edge.item = det["item"]["name"] if det["item"] != null else "" - edge.held_item = det["held_item"]["name"] if det["held_item"] != null else "" - edge.known_move = det["known_move"]["name"] if det["known_move"] != null else "" - edge.min_happiness = int(det["min_happiness"]) if det["min_happiness"] != null else 0 - edge.time_of_day = String(det["time_of_day"]) if det["time_of_day"] != null else "" - edge.trade_species = det["trade_species"]["name"] if det["trade_species"] != null else "" edge.target = _build_node(evo) + for det in evo["evolution_details"]: + edge.conditions.append(_build_condition(det)) node.evolves_to.append(edge) return node + +func _build_condition(det : Dictionary) -> EvolutionCondition: + var c := EvolutionCondition.new() + c.trigger = det["trigger"]["name"] if det["trigger"] != null else "" + c.min_level = int(det["min_level"]) if det["min_level"] != null else 0 + c.item = det["item"]["name"] if det["item"] != null else "" + c.held_item = det["held_item"]["name"] if det["held_item"] != null else "" + c.known_move = det["known_move"]["name"] if det["known_move"] != null else "" + c.known_move_type = det["known_move_type"]["name"] if det["known_move_type"] != null else "" + c.min_happiness = int(det["min_happiness"]) if det["min_happiness"] != null else 0 + c.min_beauty = int(det["min_beauty"]) if det["min_beauty"] != null else 0 + c.min_affection = int(det["min_affection"]) if det["min_affection"] != null else 0 + c.time_of_day = String(det["time_of_day"]) if det["time_of_day"] != null and det["time_of_day"] != "" else "" + c.location = det["location"]["name"] if det["location"] != null else "" + c.trade_species = det["trade_species"]["name"] if det["trade_species"] != null else "" + c.party_species = det["party_species"]["name"] if det["party_species"] != null else "" + c.party_type = det["party_type"]["name"] if det["party_type"] != null else "" + c.relative_physical_stats = int(det["relative_physical_stats"]) if det["relative_physical_stats"] != null else 0 + c.needs_overworld_rain = det["needs_overworld_rain"] + c.turn_upside_down = det["turn_upside_down"] + c.gender = int(det["gender"]) if det["gender"] != null else -1 + return c