Files
Voile/TestGame/UiLayer.cs

98 lines
2.3 KiB
C#

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));
}