From cd9c05afb3b300c5a734da8be28af2f1256ce012 Mon Sep 17 00:00:00 2001 From: iisaev Date: Tue, 27 Oct 2026 01:07:30 +0100 Subject: [PATCH] Record defeated enemy rewards before victory checks --- src/FFBattleCore.cs | 6 +++++- src/UI/FFEnemyPanel.cs | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/FFBattleCore.cs b/src/FFBattleCore.cs index d451014..4b132e1 100644 --- a/src/FFBattleCore.cs +++ b/src/FFBattleCore.cs @@ -152,6 +152,7 @@ namespace Cthangover.FFBattle _playerPanel.OnWidgetClicked += OnWidgetClicked; _enemyPanel.OnEnemyClicked += OnEnemyClicked; _enemyPanel.OnEnemyDead += OnEnemyDied; + _enemyPanel.OnEnemyDefeated += OnEnemyDefeated; _menuPanel.OnItemSelected += OnMenuItemSelected; _menuPanel.OnSelectionChanged += OnMenuSelectionChanged; _menuPanel.OnCancelled += OnMenuCancel; @@ -909,7 +910,7 @@ namespace Cthangover.FFBattle OnPlayerTurnEnd(); } - private void OnEnemyDied(FFCharacterWidget widget) + private void OnEnemyDefeated(FFCharacterWidget widget) { var ctx = BattleSceneContext.Instance; if (ctx != null && widget?.Card != null) @@ -917,7 +918,10 @@ namespace Cthangover.FFBattle ctx.RecordEnemyDefeated(widget.Card); ctx.NotifyCharacterDied(widget.Card); } + } + private void OnEnemyDied(FFCharacterWidget widget) + { UpdateHudCounts(); if (!_enemyPanel.HasAlive()) diff --git a/src/UI/FFEnemyPanel.cs b/src/UI/FFEnemyPanel.cs index 2ca6b11..a1f7890 100644 --- a/src/UI/FFEnemyPanel.cs +++ b/src/UI/FFEnemyPanel.cs @@ -31,6 +31,8 @@ namespace Cthangover.FFBattle.UI /// Raised when a widget's death animation completes and the widget is removed. public event System.Action OnEnemyDead; + /// Raised at lethal damage, before any victory check can consume the loot ledger. + public event System.Action OnEnemyDefeated; /// Raised when an enemy widget is clicked (used for target selection). public event System.Action OnEnemyClicked; @@ -168,6 +170,9 @@ namespace Cthangover.FFBattle.UI GridLayout(true); OnEnemyDead?.Invoke(widget); }); + // Victory can be resolved while the dissolve is still running. + // Record rewards synchronously instead of waiting for its callback. + OnEnemyDefeated?.Invoke(widget); } /// Removes a widget from the panel, frees it, and re-grids the remaining widgets.