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.