using System.Collections.Generic; using AcDream.Plugin.Abstractions; namespace AcDream.App.Plugins; /// /// Buffers plugin calls (which run in /// Program.cs before the GL window opens) until GameWindow drains them into the /// UiHost tree after construction. /// public sealed class BufferedUiRegistry : IUiRegistry { public readonly record struct Pending(string MarkupPath, object Binding); private readonly List _pending = new(); public void AddMarkupPanel(string markupPath, object binding) => _pending.Add(new Pending(markupPath, binding)); /// Return + clear all buffered registrations. public IReadOnlyList Drain() { var copy = _pending.ToArray(); _pending.Clear(); return copy; } }