qstbak/Questionable/Questionable.Controller.Conditions/QuestCompleteCondition.cs
2026-08-17 20:29:32 +10:00

54 lines
1.3 KiB
C#

using Questionable.Model.Questing;
namespace Questionable.Controller.Conditions;
internal sealed class QuestCompleteCondition : StopCondition
{
private bool _isSession;
public required ElementId QuestId { get; set; }
public int? Sequence { get; set; }
public override bool IsSession => _isSession;
public override EStopConditionType Type => EStopConditionType.QuestComplete;
public override bool Evaluate(StopEvaluationContext context)
{
int? sequence = Sequence;
if (sequence.HasValue)
{
int valueOrDefault = sequence.GetValueOrDefault();
ElementId? currentQuestId = context.CurrentQuestId;
if ((object)currentQuestId != null && currentQuestId.Equals(QuestId))
{
return context.CurrentSequence >= valueOrDefault;
}
return false;
}
return context.CompletedQuestId?.Equals(QuestId) ?? false;
}
public override string GetDescription()
{
string text = QuestId.ToString();
int? sequence = Sequence;
if (sequence.HasValue)
{
int valueOrDefault = sequence.GetValueOrDefault();
return $"Quest {text} at sequence {valueOrDefault}";
}
return "Quest " + text + " completed";
}
public static QuestCompleteCondition CreateSession(ElementId questId)
{
return new QuestCompleteCondition
{
QuestId = questId,
_isSession = true,
Mode = EStopConditionMode.Stop
};
}
}