public StageDocument AddStage(string name) { var stagePath = FileStructure.CreateStagePath(name); var stage = new StageDocument(this) { Path = stagePath, Name = name }; openStages.Add(name, stage); var info = new StageLinkInfo { Name = name, StagePath = stagePath }; Project.AddStage(info); ViewModelMediator.Current.GetEvent <StageAddedEventArgs>().Raise(this, new StageAddedEventArgs() { Stage = info }); Dirty = true; return(stage); }
public StageDocument Load(ProjectDocument project, StageLinkInfo linkInfo) { var reader = _core.Reader.GetStageReader(linkInfo.StagePath); var stage = reader.Load(linkInfo.StagePath); var document = new StageDocument(project, stage, linkInfo); return(document); }
public void Load(StageLinkInfo info) { try { TryLoad(info); } catch (XmlException e) { throw new GameRunException(String.Format("The map file for stage {0} has badly formatted XML:\n\n{1}", info.Name, e.Message)); } }
public void TryLoad(StageLinkInfo info) { var stageReader = Game.CurrentGame.FileReaderProvider.GetStageReader(info.StagePath); StageInfo map = stageReader.Load(info.StagePath); var handler = new StageHandler(map); var joins = new Dictionary <ScreenInfo, Dictionary <Join, JoinHandler> >(); foreach (var screen in map.Screens.Values) { joins[screen] = new Dictionary <Join, JoinHandler>(); } foreach (Join join in map.Joins) { var screenOne = map.Screens[join.screenOne]; var screenTwo = map.Screens[join.screenTwo]; JoinHandler handlerOne = CreateJoin(join, handler, screenOne); joins[screenOne].Add(join, handlerOne); JoinHandler handlerTwo = CreateJoin(join, handler, screenTwo); joins[screenTwo].Add(join, handlerTwo); } var screens = new Dictionary <string, ScreenHandler>(); foreach (var screen in map.Screens.Values) { screens[screen.Name] = CreateScreen(handler, screen, joins[screen].Values.ToList()); } handler.InitScreens(screens); handler.WinHandler = info.WinHandler; if (info.LoseHandler == null) { // repeat this stage handler.LoseHandler = new HandlerTransfer { Fade = true, Type = HandlerType.Stage, Name = info.Name }; } else { handler.LoseHandler = info.LoseHandler; } _loadedStages[info.Name] = handler; }
public StageDocument(ProjectDocument project, StageInfo info, StageLinkInfo linkInfo) { Project = project; History = new History(); _map = info; Tileset = new TilesetDocument(_map.Tileset); LinkName = linkInfo.Name; // wrap all map screens in screendocuments // this should be the only time MegaMan.Screen's are touched directly foreach (var pair in _map.Screens) { WrapScreen(pair.Value); } }
public StageDocument(ProjectDocument project, StageLinkInfo linkInfo) { Project = project; History = new History(); var stageReader = new StageXmlReader(); map = stageReader.LoadStageXml(linkInfo.StagePath); Tileset = new TilesetDocument(map.Tileset); LinkName = linkInfo.Name; // wrap all map screens in screendocuments // this should be the only time MegaMan.Screen's are touched directly foreach (var pair in map.Screens) { WrapScreen(pair.Value); } }
public StageDocument AddStage(string name, string tilesetPath) { string stageDir = Path.Combine(BaseDir, "stages"); if (!Directory.Exists(stageDir)) { Directory.CreateDirectory(stageDir); } string stagePath = Path.Combine(stageDir, name); if (!Directory.Exists(stagePath)) { Directory.CreateDirectory(stagePath); } var stage = new StageDocument(this) { Path = FilePath.FromAbsolute(stagePath, this.BaseDir), Name = name }; stage.ChangeTileset(tilesetPath); stage.Save(); openStages.Add(name, stage); var info = new StageLinkInfo { Name = name, StagePath = FilePath.FromAbsolute(stagePath, BaseDir) }; Project.AddStage(info); Save(); // need to save the reference to the new stage if (StageAdded != null) { StageAdded(stage); } return(stage); }
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); }
public Project Load() { _project = new Project(); var gameFilePath = _dataSource.GetGameFile(); _project.GameFile = gameFilePath; var stream = _dataSource.GetData(gameFilePath); XElement reader = XElement.Load(stream); 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 = _transferReader.Load(winHandlerNode); } } var loseNode = stageNode.Element("Lose"); if (loseNode != null) { var loseHandlerNode = loseNode.Element("Next"); if (loseHandlerNode != null) { info.LoseHandler = _transferReader.Load(loseHandlerNode); } } _project.AddStage(info); } } XElement startNode = reader.Element("Next"); if (startNode != null) { _project.StartHandler = _transferReader.Load(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); } stream.Close(); return(_project); }
public StageTreeItemViewModel(TreeViewItemViewModel parent, StageLinkInfo stage) : base(parent) { _stage = stage; }