feat(render): implement Campaign AR and terrain fidelity

This commit is contained in:
Erik 2026-08-22 13:13:29 +02:00
parent 99cf26e00c
commit 7a5f96ede5
368 changed files with 50611 additions and 950 deletions

View file

@ -272,6 +272,29 @@ public sealed class UiTemplateListBox : UiDatElement
return row;
}
/// <summary>
/// Removes the dynamically-owned suffix after <paramref name="retainedItemCount"/>
/// without disturbing the retained prefix. This is the structural seam used by
/// optional Config-page extensions whose schema can change at runtime: retail's
/// authored prefix remains mounted, while only extension rows are detached.
/// Existing scroll is preserved and clamped by <see cref="UiScrollablePanel"/>.
/// </summary>
public void RemoveTail(int retainedItemCount)
{
int count = _viewport?.Children.Count ?? 0;
if (retainedItemCount < 0 || retainedItemCount > count)
throw new ArgumentOutOfRangeException(nameof(retainedItemCount));
if (_viewport is null || retainedItemCount == count)
return;
for (int i = count - 1; i >= retainedItemCount; i--)
_viewport.RemoveChild(_viewport.Children[i]);
}
/// <summary>Current number of materialized row widgets. Reading this does
/// not wake a dormant list box.</summary>
public int ItemCount => _viewport?.Children.Count ?? 0;
/// <summary>
/// Campaign FA slice FA3: removes every row previously added via
/// <see cref="AddItemFromTemplateList"/>/<see cref="AddPrebuiltRow"/>, resetting