54 lines
1.3 KiB
C#
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
|
|
};
|
|
}
|
|
}
|