using Godot; using System; // ReSharper disable MemberCanBePrivate.Global namespace BITKit; public partial class NodeBuilder : Node { [Export] private bool clearOnStart = true; [Export] private bool clearTemplateOnly = true; [ExportCategory("UX")] [Export] private Control emptyHints; [ExportCategory("Template")] [Export] private PackedScene template; public override void _Ready() { if (clearOnStart) { Clear(); } } public T Build() where T : Node { Node instance; if (template is not null) { instance = template.Instantiate(); AddChild(instance); } else { instance = new PanelContainer(); var margin = new MarginContainer(); AddChild(instance); instance.AddChild(margin); instance = margin; margin.AddThemeConstantOverride("theme_override_constants/margin_left",16); margin.AddThemeConstantOverride("theme_override_constants/margin_top",16); margin.AddThemeConstantOverride("theme_override_constants/margin_right",16); margin.AddThemeConstantOverride("theme_override_constants/margin_button",16); } emptyHints?.Hide();; return instance as T; } public void Clear() { emptyHints?.Show(); if (clearTemplateOnly) { foreach (var x in GetChildren()) { switch (template) { case null: x.QueueFree(); break; case (var y) when y.ResourcePath == x.SceneFilePath: x.QueueFree(); break; } } } else { MathNode.ClearChild(this); } } }