public AddStage ( |
||
stage | ||
return | void |
public Project Load(string filePath) { if (!File.Exists(filePath)) throw new FileNotFoundException("The project file does not exist: " + filePath); _project = new Project(); _project.GameFile = FilePath.FromAbsolute(filePath, Path.GetDirectoryName(filePath)); XElement reader = XElement.Load(filePath); XAttribute nameAttr = reader.Attribute("name"); if (nameAttr != null) _project.Name = nameAttr.Value; XAttribute authAttr = reader.Attribute("author"); if (authAttr != null) _project.Author = authAttr.Value; XElement sizeNode = reader.Element("Size"); if (sizeNode != null) { _project.ScreenWidth = sizeNode.TryAttribute<int>("x"); _project.ScreenHeight = sizeNode.TryAttribute<int>("y"); } XElement nsfNode = reader.Element("NSF"); if (nsfNode != null) { LoadNSFInfo(nsfNode); } XElement stagesNode = reader.Element("Stages"); if (stagesNode != null) { foreach (XElement stageNode in stagesNode.Elements("Stage")) { var info = new StageLinkInfo(); info.Name = stageNode.RequireAttribute("name").Value; info.StagePath = FilePath.FromRelative(stageNode.RequireAttribute("path").Value, _project.BaseDir); var winNode = stageNode.Element("Win"); if (winNode != null) { var winHandlerNode = winNode.Element("Next"); if (winHandlerNode != null) { info.WinHandler = LoadHandlerTransfer(winHandlerNode); } } var loseNode = stageNode.Element("Lose"); if (loseNode != null) { var loseHandlerNode = loseNode.Element("Next"); if (loseHandlerNode != null) { info.LoseHandler = LoadHandlerTransfer(loseHandlerNode); } } _project.AddStage(info); } } XElement startNode = reader.Element("Next"); if (startNode != null) { _project.StartHandler = LoadHandlerTransfer(startNode); } _project.AddIncludeFiles(reader.Elements("Include") .Select(e => e.Value) .Where(v => !string.IsNullOrEmpty(v.Trim()))); _project.AddIncludeFolders(reader.Elements("IncludeFolder") .Select(e => e.Value) .Where(v => !string.IsNullOrEmpty(v.Trim()))); var includeReader = new IncludeFileXmlReader(); foreach (var includePath in _project.Includes) { string includefile = includePath.Absolute; includeReader.LoadIncludedFile(_project, includefile); } return _project; }