Move element update out of Render in UISystem, fix Size property retriggering MarkDirty.

This commit is contained in:
2026-06-01 22:45:05 +02:00
parent 7bbfab8359
commit 2576ea87bc
3 changed files with 17 additions and 19 deletions

View File

@@ -20,7 +20,7 @@ public class TestGame : Game
InitializeSystemsDefault(); InitializeSystemsDefault();
_uiSystem = new UISystem(Input); _uiSystem = new UISystem(Input);
// _uiSystem.RenderDebugRects = true; _uiSystem.RenderDebugRects = true;
ResourceManager.EnableFileWatching(); ResourceManager.EnableFileWatching();

View File

@@ -42,24 +42,23 @@ public abstract class UIElement : IElement, IRenderableElement, IResizeableEleme
get => _size; get => _size;
set set
{ {
if (value.Width < MinimumSize.Width) float width = Math.Max(value.Width, MinimumSize.Width);
{ float height = Math.Max(value.Height, MinimumSize.Height);
_size.Width = MinimumSize.Width;
}
if (value.Height < MinimumSize.Height) bool changed =
{ _size.Width != width ||
_size.Height = MinimumSize.Height; _size.Height != height;
}
if (_size != value) if (!changed)
{ return;
MarkDirty();
}
_size = value; _size.Width = width;
_size.Height = height;
MarkDirty();
} }
} }
public Vector2 AnchorOffset { get; set; } = Vector2.Zero; public Vector2 AnchorOffset { get; set; } = Vector2.Zero;
public Anchor Anchor { get; set; } = Anchor.TopLeft; public Anchor Anchor { get; set; } = Anchor.TopLeft;

View File

@@ -42,17 +42,16 @@ public class UISystem : IUpdatableSystem, IRenderableSystem, IReloadableSystem
float dt = (float)deltaTime; float dt = (float)deltaTime;
PropagateTick(_elements, dt); PropagateTick(_elements, dt);
HandleInput((float)deltaTime); HandleInput((float)deltaTime);
}
public void Render(RenderSystem renderer)
{
foreach (var element in _elements) foreach (var element in _elements)
{ {
if (element is not IUpdatableElement updatable) continue; if (element is not IUpdatableElement updatable) continue;
updatable.Update(); updatable.Update();
} }
}
public void Render(RenderSystem renderer)
{
foreach (var element in _elements) foreach (var element in _elements)
{ {
if (element is IRenderableElement renderable) if (element is IRenderableElement renderable)
@@ -110,7 +109,7 @@ public class UISystem : IUpdatableSystem, IRenderableSystem, IReloadableSystem
Vector2 currentMousePosition = _input.GetMousePosition(); Vector2 currentMousePosition = _input.GetMousePosition();
bool inputHandled = false; bool inputHandled = false;
// 1. Process Actions (Pressed or Held) // Process Actions (Pressed or Held)
foreach (var (actionName, mappings) in InputSystem.InputMappings) foreach (var (actionName, mappings) in InputSystem.InputMappings)
{ {
foreach (var action in mappings) foreach (var action in mappings)