public Project(Stream stream, ProjectResolver resolver) { _services = new ServiceContainer(); _levels = new NamedResourceCollection <Level>(); _levels.Modified += (s, e) => OnModified(EventArgs.Empty); _libraryManager = new LibraryManager(); _libraryManager.Libraries.Modified += (s, e) => OnModified(EventArgs.Empty); Extra = new List <XmlElement>(); XmlReaderSettings settings = new XmlReaderSettings() { CloseInput = true, IgnoreComments = true, IgnoreWhitespace = true, }; using (XmlReader reader = XmlTextReader.Create(stream, settings)) { XmlSerializer serializer = new XmlSerializer(typeof(ProjectX)); ProjectX proxy = serializer.Deserialize(reader) as ProjectX; FromXProxy(proxy, resolver, this); } ResetModified(); }
public static Project FromXProxy(ProjectX proxy, ProjectResolver resolver) { if (proxy == null) { return(null); } return(FromXProxy(proxy, resolver, new Project())); }
public static Project FromXProxy(ProjectX proxy, ProjectResolver resolver, Project project) { if (proxy == null) { return(null); } if (proxy.PropertyGroup != null) { project.Uid = proxy.PropertyGroup.ProjectGuid; project.Name = proxy.PropertyGroup.ProjectName; project._defaultLibraryUid = proxy.PropertyGroup.DefaultLibrary; project.Extra = new List <XmlElement>(proxy.PropertyGroup.Extra ?? new XmlElement[0]); } project._texturePool = new MetaTexturePool(); project._tilePools = new MetaTilePoolManager(project._texturePool); project._objectPools = new MetaObjectPoolManager(project._texturePool); project._tileBrushes = new MetaTileBrushManager(); foreach (var itemGroup in proxy.ItemGroups) { if (itemGroup.Libraries != null) { foreach (var libProxy in itemGroup.Libraries) { using (Stream stream = resolver.InputStream(libProxy.Include)) { project.AddLibrary(new Library(stream) { FileName = libProxy.Include, }); } } } if (itemGroup.Levels != null) { foreach (var level in itemGroup.Levels) { using (Stream stream = resolver.InputStream(level.Include)) { project.Levels.Add(new Level(stream, project) { FileName = level.Include, }); } } } } //project._tilePools.Pools.PropertyChanged += project.TilePoolsModifiedHandler; //project._objectPools.Pools.PropertyChanged += project.HandleObjectPoolManagerPropertyChanged; return(project); }
public void Save(Stream stream, ProjectResolver resolver) { List <ProjectX.LibraryX> libraries = new List <ProjectX.LibraryX>(); List <ProjectX.LevelX> levels = new List <ProjectX.LevelX>(); foreach (Library library in _libraryManager.Libraries) { if (library.FileName == null) { library.FileName = FormatSafeFileName(library.Name + ".tlbx"); } using (Stream libStream = resolver.OutputStream(library.FileName)) { library.Save(libStream); } libraries.Add(new ProjectX.LibraryX() { Include = library.FileName, }); } foreach (Level level in Levels) { if (level.FileName == null) { level.FileName = FormatSafeFileName(level.Name + ".tlvx"); } using (Stream levStream = resolver.OutputStream(level.FileName)) { level.Save(levStream); } levels.Add(new ProjectX.LevelX() { Include = level.FileName, }); } XmlWriterSettings settings = new XmlWriterSettings() { CloseOutput = true, Indent = true, }; XmlWriter writer = XmlTextWriter.Create(stream, settings); ProjectX proxy = new ProjectX() { ItemGroups = new List <ProjectX.ItemGroupX>(), PropertyGroup = new ProjectX.PropertyGroupX() { ProjectGuid = Uid, ProjectName = Name, DefaultLibrary = _defaultLibraryUid, Extra = (Extra != null && Extra.Count > 0) ? Extra.ToArray() : null, }, }; proxy.ItemGroups.Add(new ProjectX.ItemGroupX() { Libraries = libraries, }); proxy.ItemGroups.Add(new ProjectX.ItemGroupX() { Levels = levels, }); XmlSerializer serializer = new XmlSerializer(typeof(ProjectX)); serializer.Serialize(writer, proxy); writer.Close(); ResetModified(); }