public bool HasNextStage()
        {
            switch (ArtifactTemplate.GetArtifactTemplate(Template).StageSelectionMode)
            {
            case "Random":
                return(visitedStages.Count < ArtifactTemplate.GetArtifactTemplate(Template).Stages);

            case "InOrder":
            default:
                return(CurrentStage < ArtifactTemplate.GetArtifactTemplate(Template).Stages);
            }
        }
        public int GetNextStage()
        {
            switch (ArtifactTemplate.GetArtifactTemplate(Template).StageSelectionMode)
            {
            case "Random":
                List <int> possibleStages = new List <int>();
                for (int s = 0; s < ArtifactTemplate.GetArtifactTemplate(Template).Stages; s++)
                {
                    if (!visitedStages.Contains(s))
                    {
                        possibleStages.Add(s);
                    }
                }
                return(possibleStages[RandomHelper.GetHelper().GetGenerator().Next(0, possibleStages.Count)]);

            case "InOrder":
            default:
                return(CurrentStage++);
            }
        }