Files
YachtDice/Assets/Scripts/Modifiers/Pipeline/PipelineTrace.cs
T
2026-03-02 12:49:12 +07:00

67 lines
2.0 KiB
C#

using System.Collections.Generic;
using System.Text;
using YachtDice.Modifiers.Core;
namespace YachtDice.Modifiers.Pipeline
{
public class PipelineTrace
{
public TriggerType Trigger;
public readonly List<TraceEntry> Entries = new();
public struct TraceEntry
{
public string ModifierId;
public string BehaviorName;
public bool ConditionsPassed;
public string FailedCondition;
public string EffectApplied;
public ModifierPhase Phase;
}
public void AddConditionResult(string modifierId, string behaviorName, bool passed, string failedCondition = null)
{
Entries.Add(new TraceEntry
{
ModifierId = modifierId,
BehaviorName = behaviorName,
ConditionsPassed = passed,
FailedCondition = failedCondition,
});
}
public void AddEffectApplied(string modifierId, string effectName, ModifierPhase phase)
{
Entries.Add(new TraceEntry
{
ModifierId = modifierId,
EffectApplied = effectName,
Phase = phase,
ConditionsPassed = true,
});
}
public override string ToString()
{
var sb = new StringBuilder();
sb.AppendLine($"[ModifierPipeline] Trigger: {Trigger}");
foreach (var e in Entries)
{
if (e.EffectApplied != null)
{
sb.AppendLine($" EFFECT [{e.Phase}] {e.ModifierId} -> {e.EffectApplied}");
}
else if (e.ConditionsPassed)
{
sb.AppendLine($" PASS {e.ModifierId} / {e.BehaviorName}");
}
else
{
sb.AppendLine($" FAIL {e.ModifierId} / {e.BehaviorName} (failed: {e.FailedCondition})");
}
}
return sb.ToString();
}
}
}