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 }; } }