/// <summary>
        /// Loads an Artifact from the given Path.
        /// Path needs to point to the Directory the Artifact lays in.
        /// </summary>
        /// <param name="path">The BaseDirectory of the Artifacts.</param>
        /// <param name="name">The Name of the Artifact to be loaded.</param>
        /// <returns></returns>
        public static ArtifactTemplate LoadArtifactTemplate(string name)
        {
            ArtifactTemplate ReturnMe   = new ArtifactTemplate();
            XmlSerializer    serializer = new XmlSerializer(typeof(ArtifactTemplate));

            using (Stream file = File.OpenRead(AppDomain.CurrentDomain.BaseDirectory + PATH + "\\" + name + ".xml"))
            {
                ReturnMe = (ArtifactTemplate)serializer.Deserialize(file);
            }
            return(ReturnMe);
        }
        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 static void SaveArtifactTemplate(ArtifactTemplate artifact)
        {
            if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + PATH))
            {
                Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + PATH);
            }

            XmlSerializer serializer = new XmlSerializer(typeof(ArtifactTemplate));

            using (Stream file = File.OpenWrite(AppDomain.CurrentDomain.BaseDirectory + PATH + "//" + artifact.Name + ".xml"))
            {
                serializer.Serialize(file, artifact);
            }
        }
        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++);
            }
        }