Defer feedback messages to display after loot reveal

Move MessageEvent, AdventureUnlockedEvent and LootTableModifiedEvent
rendering after the loot table so players see their items first,
then contextual feedback like key hints and adventure unlocks.
This commit is contained in:
Samuel Bouchet 2026-03-15 18:47:31 +01:00
parent 41bfb54a2c
commit 671aa30409

View file

@ -467,8 +467,8 @@ public static class Program
// Collect all received items to show as a single grouped loot reveal // Collect all received items to show as a single grouped loot reveal
var allLoot = new List<(string name, string rarity, string category)>(); var allLoot = new List<(string name, string rarity, string category)>();
// Collect interactions to show after loot reveal with context // Collect messages to show after loot reveal
var deferredInteractions = new List<string>(); var deferredMessages = new List<string>();
// Track consumed item names for interaction context // Track consumed item names for interaction context
var consumedItemNames = new Dictionary<Guid, string>(); var consumedItemNames = new Dictionary<Guid, string>();
@ -544,12 +544,12 @@ public static class Program
{ {
interMsg = _loc.Get(interEvt.DescriptionKey); interMsg = _loc.Get(interEvt.DescriptionKey);
} }
deferredInteractions.Add(interMsg); deferredMessages.Add(interMsg);
break; break;
case ChainBonusEvent chainEvt: case ChainBonusEvent chainEvt:
var bonusName = GetLocalizedName(chainEvt.BonusItemId); var bonusName = GetLocalizedName(chainEvt.BonusItemId);
deferredInteractions.Add(_loc.Get("interaction.chain_bonus", chainEvt.ChainLength) + $" {bonusName}"); deferredMessages.Add(_loc.Get("interaction.chain_bonus", chainEvt.ChainLength) + $" {bonusName}");
break; break;
case ResourceChangedEvent resEvt: case ResourceChangedEvent resEvt:
@ -558,7 +558,7 @@ public static class Program
break; break;
case MessageEvent msgEvt: case MessageEvent msgEvt:
_renderer.ShowMessage(_loc.Get(msgEvt.MessageKey, msgEvt.Args ?? [])); deferredMessages.Add(_loc.Get(msgEvt.MessageKey, msgEvt.Args ?? []));
break; break;
case ChoiceRequiredEvent choiceEvt: case ChoiceRequiredEvent choiceEvt:
@ -566,12 +566,12 @@ public static class Program
break; break;
case LootTableModifiedEvent: case LootTableModifiedEvent:
_renderer.ShowMessage(_loc.Get("interaction.key_no_match")); deferredMessages.Add(_loc.Get("interaction.key_no_match"));
break; break;
case AdventureUnlockedEvent advUnlockedEvt: case AdventureUnlockedEvent advUnlockedEvt:
var advName = GetAdventureName(advUnlockedEvt.Theme); var advName = GetAdventureName(advUnlockedEvt.Theme);
_renderer.ShowMessage(_loc.Get("adventure.unlocked", advName)); deferredMessages.Add(_loc.Get("adventure.unlocked", advName));
break; break;
case AdventureStartedEvent advEvt: case AdventureStartedEvent advEvt:
@ -614,11 +614,11 @@ public static class Program
// Resource summary removed — characteristics are shown in the dedicated panel // Resource summary removed — characteristics are shown in the dedicated panel
} }
// Show deferred interactions after the loot reveal, with context // Show deferred messages after the loot reveal
foreach (var interactionMsg in deferredInteractions) foreach (var msg in deferredMessages)
{ {
_renderer.ShowMessage(""); _renderer.ShowMessage("");
_renderer.ShowInteraction(interactionMsg); _renderer.ShowInteraction(msg);
} }
_renderer.WaitForKeyPress(_loc.Get("prompt.press_key")); _renderer.WaitForKeyPress(_loc.Get("prompt.press_key"));