fix(client): restore retail interaction parity
All checks were successful
CI / linux-portable (push) Successful in 3m27s
CI / windows-gate (push) Successful in 6m42s
CI / release (push) Successful in 2m12s

Harden keyboard and camera routing, inventory and vendor interactions, chat/emotes, relog portal flow, and paperdoll rendering. Add retail research, connected gate coverage, and release-gate validation.
This commit is contained in:
Erik 2026-08-26 20:45:11 +02:00
parent 0c699240e0
commit f6fe0f2a4f
151 changed files with 10162 additions and 1211 deletions

View file

@ -134,6 +134,28 @@ public sealed class OptionsPanelController : IRetainedPanelController
public OptionPage ConfigPage => _pages[ConfigPageId];
/// <summary>True when the authored Gameplay Options page is active.</summary>
public bool IsShowingGameplay =>
_tabPanel.ActivePageElementId == GameplayPageId;
public bool IsShowingCharacter =>
_tabPanel.ActivePageElementId == CharacterPageId;
public bool IsShowingConfiguration =>
_tabPanel.ActivePageElementId == ConfigPageId;
/// <summary>
/// Programmatic form of retail action <c>0x1000001B</c>, resolved from
/// the installed ActionMap as "Show/Hide Gameplay Options Page". This is
/// the final fallback of <c>ClientUISystem::OnAction(EscapeKey)</c> at
/// <c>0x00564CBF</c>.
/// </summary>
public void ShowGameplay() => _tabPanel.SwitchTo(GameplayPageId);
public void ShowCharacter() => _tabPanel.SwitchTo(CharacterPageId);
public void ShowConfiguration() => _tabPanel.SwitchTo(ConfigPageId);
private OptionsPanelController(UiTabPanel tabPanel, Action? afterApply)
{
_tabPanel = tabPanel;