[Fix] Limited Use Modifier

This commit is contained in:
2026-03-05 09:52:26 +07:00
parent 72bbdc76af
commit 05c2619de4
7 changed files with 190 additions and 18 deletions
@@ -38,6 +38,7 @@ namespace YachtDice.Modifiers.Core
// Trigger info
public TriggerType Trigger;
public bool IsPreview;
// Side-effect accumulators
public int CurrencyDelta;
@@ -90,10 +90,13 @@ namespace YachtDice.Modifiers.Pipeline
var effects = behavior.Effects;
for (int e = 0; e < effects.Count; e++)
{
if (effects[e] == null) continue;
var effect = effects[e];
if (effect == null) continue;
if (context.IsPreview && effect.Phase == ModifierPhase.SideEffect) continue;
_effectBuffer.Add(new EffectEntry
{
Effect = effects[e],
Effect = effect,
Instance = inst,
});
}
@@ -113,6 +116,8 @@ namespace YachtDice.Modifiers.Pipeline
trace.AddEffectApplied(entry.Instance.Definition.Id, entry.Effect.name, entry.Effect.Phase);
}
_registry.RemoveExpired();
if (trace != null)
{
string traceStr = trace.ToString();
@@ -195,6 +195,36 @@ namespace YachtDice.Modifiers.Runtime
OnChanged?.Invoke();
}
public void RemoveExpired()
{
var changed = false;
var activeChanged = false;
for (var i = _instances.Count - 1; i >= 0; i--)
{
var instance = _instances[i];
if (!instance.IsExpired)
continue;
if (instance.IsActive)
activeChanged = true;
instance.IsActive = false;
_instances.RemoveAt(i);
changed = true;
}
if (!changed)
return;
_activeCacheDirty = true;
if (activeChanged)
OnActiveModifiersChanged?.Invoke(Active);
OnChanged?.Invoke();
}
private void RebuildActiveCache()
{
_activeCache.Clear();