[Fix] Limited Use Modifier
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user