using System.Numerics; using DaggerFramework; using DaggerFramework.Rendering; using DaggerFramework.SceneGraph; using DaggerFramework.UI; using DaggerFramework.Utils; public class UiLayer : Layer { protected override void OnStart() { base.OnStart(); GetResources(); CreateUiElements(); } protected override void OnUpdate(double dt) { base.OnUpdate(dt); if (Scene is null) return; _screenContainer.UpdateRect(Vector2.Zero, Scene.Renderer.WindowSize); } protected override void OnBeginDraw(Renderer renderer) { } protected override void OnDraw(Renderer renderer) { _screenContainer.Render(renderer); } protected override void OnEndDraw(Renderer renderer) { } private void CreateUiElements() { if (Scene is null) return; _screenContainer.UpdateRect(Vector2.Zero, Scene.Renderer.WindowSize); var style = new PanelStyle() { BackgroundColor = new Color(0.2f, 0.2f, 0.2f, 1.0f) }; _panel = new MarginPanel(style) { ExpandRatio = new Vector2(0.5f, 1f), AbsoluteMargin = Vector2.One * 16f }; _screenContainer.AddChild(_panel); var exampleText = new TextLabel() { Font = _defaultFont!, FontSize = 20, Text = "This Panel will occupy 50% of the screen.\nThis text in particular is inside a panel with an absolute margin of 16px.\nHow cool is that?" }; var contentPanel = new MarginPanel(new PanelStyle() { BackgroundColor = new Color(0.25f, 0.25f, 0.25f, 1.0f) }) { AbsoluteMargin = Vector2.One * 32f }; _panel.AddChild(contentPanel); var verticalPanel = new MarginPanel(new PanelStyle() { BackgroundColor = new Color(0.1f, 0.1f, 0.1f, 1.0f), }) { AbsoluteMargin = Vector2.One * 8f, }; contentPanel.AddChild(verticalPanel); verticalPanel.AddChild(exampleText); } private void GetResources() { ResourceManager.TryGetResource("inter_regular", out _defaultFont); } private Font? _defaultFont; private Container _screenContainer = new(); private Panel? _panel; private Logger _logger = new(nameof(UiLayer)); }