48 lines
1,023 B
C#
48 lines
1,023 B
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Questionable.Model.Questing;
|
|
|
|
namespace Questionable.Model;
|
|
|
|
internal sealed class Quest
|
|
{
|
|
public enum ESource
|
|
{
|
|
Assembly,
|
|
ProjectDirectory,
|
|
UserDirectory
|
|
}
|
|
|
|
public required ElementId Id { get; init; }
|
|
|
|
public required QuestRoot Root { get; init; }
|
|
|
|
public required IQuestInfo Info { get; init; }
|
|
|
|
public required ESource Source { get; init; }
|
|
|
|
public QuestSequence? FindSequence(byte currentSequence)
|
|
{
|
|
return Root.QuestSequence.SingleOrDefault((QuestSequence seq) => seq.Sequence == currentSequence);
|
|
}
|
|
|
|
public IEnumerable<QuestSequence> AllSequences()
|
|
{
|
|
return Root.QuestSequence;
|
|
}
|
|
|
|
public IEnumerable<(QuestSequence Sequence, int StepId, QuestStep Step)> AllSteps()
|
|
{
|
|
foreach (QuestSequence sequence in Root.QuestSequence)
|
|
{
|
|
int i = 0;
|
|
while (i < sequence.Steps.Count)
|
|
{
|
|
QuestStep item = sequence.Steps[i];
|
|
yield return (Sequence: sequence, StepId: i, Step: item);
|
|
int num = i + 1;
|
|
i = num;
|
|
}
|
|
}
|
|
}
|
|
}
|