public partial class Player : CharacterBody3D { public MovementController Movement { get; private set; } public CameraController Camera { get; private set; } public AnimationController Animation { get; private set; } public PickupController Pickup { get; private set; } public override void _Ready() { Movement = GetNode("MovementController"); Camera = GetNode("CameraController"); Animation = GetNode("AnimationController"); Pickup = GetNode("PickupController"); foreach (var child in GetChildren()) if (child is IInitalizable init) init.Initialize(this); } } public interface IInitalizable { void Initialize(T param); }