extends Node class_name PlayerComponent #base des composants du joueur (InputManagementComponent, AimTargeting, ThrowResolver, MountRider, RecallInput...). #- le joueur est retrouve en remontant l'arbre : le composant peut etre place n'importe ou sous le PlayerCharacter # (directement, ou dans un node de rangement), sans dependre de sa position exacte ni de get_parent(). #- un composant qui a une place dans le joueur (ex : player.aim_targeting) s'y enregistre lui-meme dans register_with_player() : # le joueur n'a plus besoin de le chercher par son nom ($AimTargeting) et le node peut etre renomme librement. #_enter_tree() est appele avant tous les _ready() : le joueur est donc deja renseigne quand un composant demarre. var player : PlayerCharacter func _enter_tree() -> void: player = _find_player() if player == null: push_error("%s : ce composant doit etre place sous un PlayerCharacter." % name) return register_with_player() func register_with_player() -> void: pass #a surcharger : player.xxx = self func _find_player() -> PlayerCharacter: var n : Node = get_parent() while n != null: if n is PlayerCharacter: return n n = n.get_parent() return null