Update Evolution conditions

This commit is contained in:
TheThomaas 2026-09-29 17:25:20 +02:00
parent bb75ce1b6c
commit d00dc5bba2
4 changed files with 49 additions and 19 deletions

View file

@ -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 (atk<def, atk=def, atk>def) ; 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)

View file

@ -0,0 +1 @@
uid://81p3aw271qyx

View file

@ -3,12 +3,5 @@
class_name EvolutionEdge class_name EvolutionEdge
extends Resource 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 target : EvolutionNode
@export var conditions : Array[EvolutionCondition] = [] # chaque condition suffit à elle seule

View file

@ -36,17 +36,30 @@ func _build_node(link : Dictionary) -> EvolutionNode:
node.species_name = link["species"]["name"] node.species_name = link["species"]["name"]
for evo in link["evolves_to"]: for evo in link["evolves_to"]:
var edge := EvolutionEdge.new() 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) edge.target = _build_node(evo)
for det in evo["evolution_details"]:
edge.conditions.append(_build_condition(det))
node.evolves_to.append(edge) node.evolves_to.append(edge)
return node 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