diff --git a/src/World/RpgInput.cs b/src/World/RpgInput.cs
index c32ee36..5e8d84f 100644
--- a/src/World/RpgInput.cs
+++ b/src/World/RpgInput.cs
@@ -11,7 +11,8 @@ namespace Cthangover.Mods.Rpg
/// they are on a Russian or any other layout; the arrows work too.
///
/// The world must not walk while something else owns the keyboard or the
- /// player's attention: a dialog, a toolbar panel (inventory, journal), a
+ /// player's attention: a dialog, a toolbar panel (inventory, journal) or a
+ /// window-like overlay opened by a scenario (a trade window, a workbench), a
/// focused editor window or text field, a paused tree, a scene transition.
/// collects those checks in one place.
///
@@ -61,13 +62,17 @@ namespace Cthangover.Mods.Rpg
return IsPanelOpen();
}
+ // Panels and "once" overlays opened on demand are window-like entries on the
+ // host layer. Overlays shown from the start (a HUD strip) do not block walking.
private static bool IsPanelOpen()
{
var host = UiHost.Instance;
if (host == null)
return false;
- foreach (var entry in UiRegistry.PanelEntries)
+ foreach (var entry in UiRegistry.Entries)
{
+ if (!UiRegistry.IsPanel(entry) && !(entry.Once && !entry.ShowOnStart))
+ continue;
if (host.TryGetInstance(entry.Id, out var panel) && panel.IsVisibleInTree())
return true;
}