public bool SerializeXmlAssets() { try { var gameTempPath = Path.Combine(ViewModelLocator.AssetsTabViewModel.AssetTempDirectory.FullName, Guid.NewGuid().ToString() + ".xml"); var gameSerializer = new GameSerializer(); gameSerializer.OutputPath = gameTempPath; gameSerializer.Serialize(Game); Asset.SelectedAsset.SafeFile = new FileInfo(gameTempPath); var setSerializer = new SetSerializer() { Game = Game }; foreach (SetModel set in ViewModelLocator.SetTabViewModel.Items) { var setTempPath = Path.Combine(ViewModelLocator.AssetsTabViewModel.AssetTempDirectory.FullName, Guid.NewGuid().ToString() + ".xml"); setSerializer.OutputPath = setTempPath; setSerializer.Serialize(set._set); set.Asset.SelectedAsset.SafeFile = new FileInfo(setTempPath); } var scriptSerializer = new GameScriptSerializer(Game.Id) { Game = Game }; foreach (ScriptItemModel script in ViewModelLocator.ScriptsTabViewModel.Scripts) { scriptSerializer.OutputPath = script.Asset.SafePath; scriptSerializer.Serialize(script._script); } var proxyTempPath = Path.Combine(ViewModelLocator.AssetsTabViewModel.AssetTempDirectory.FullName, Guid.NewGuid().ToString() + ".xml"); var proxySerializer = new ProxyGeneratorSerializer(Game.Id) { Game = Game }; proxySerializer.OutputPath = proxyTempPath; proxySerializer.Serialize(ViewModelLocator.ProxyTabViewModel._proxydef); ViewModelLocator.ProxyTabViewModel.Asset.SelectedAsset.SafeFile = new FileInfo(proxyTempPath); return(true); } catch { return(false); } }
public ProxyTabViewModel() { StoredProxyProperties = new ObservableCollection <ProxyInputPropertyItemModel>(); StoredProxyProperties.CollectionChanged += (a, b) => { Messenger.Default.Send(new ProxyTemplateChangedMessage()); }; var game = ViewModelLocator.GameLoader.Game; var proxySerializer = new ProxyGeneratorSerializer(game.Id) { Game = game }; if (game.ProxyGenSource == null) { _proxydef = new ProxyDefinition(); var proxyAsset = ViewModelLocator.AssetsTabViewModel.NewAsset(new string[] { "Proxy" }, "proxydef", ".xml"); proxyAsset.IsReserved = true; Asset = new AssetController(AssetType.Xml); Asset.SelectedAsset = proxyAsset; } else { var path = Path.Combine(ViewModelLocator.GameLoader.WorkingDirectory.FullName, game.ProxyGenSource); //TODO: Catch if the target xml is not a valid proxy definition _proxydef = (ProxyDefinition)proxySerializer.Deserialize(path); Asset = new AssetController(AssetType.Xml); Asset.Register(path); } Asset.PropertyChanged += AssetUpdated; if (Asset.SelectedAsset != null) { Asset.SelectedAsset.IsReserved = true; } Templates = new IdeCollection <IdeBaseItem>(this, typeof(TemplateModel)); foreach (TemplateDefinition templateDef in _proxydef.TemplateSelector.GetTemplates()) { var template = new TemplateModel(templateDef, Templates); Templates.Add(template); if (templateDef.defaultTemplate) { Templates.DefaultItem = template; } } Templates.CollectionChanged += (sender, args) => { _proxydef.TemplateSelector.ClearTemplates(); foreach (TemplateModel x in Templates) { _proxydef.TemplateSelector.AddTemplate(x._def); } }; Templates.DefaultItemChanged += (sender, args) => { ((TemplateModel)args.OldItem)._def.defaultTemplate = false; ((TemplateModel)args.NewItem)._def.defaultTemplate = true; }; Templates.SelectedItemChanged += (sender, args) => { Selection = null; }; TextBlocks = new IdeCollection <IdeBaseItem>(this, typeof(TextBlockDefinitionItemModel)); foreach (var textblock in _proxydef.BlockManager.GetBlocks().Where(x => x.type == "text")) { TextBlocks.Add(new TextBlockDefinitionItemModel(textblock, TextBlocks)); } TextBlocks.CollectionChanged += (sender, args) => { _proxydef.BlockManager.ClearBlocks(); foreach (TextBlockDefinitionItemModel x in TextBlocks) { _proxydef.BlockManager.AddBlock(x._def); } foreach (OverlayBlockDefinitionItemModel x in OverlayBlocks) { _proxydef.BlockManager.AddBlock(x._def); } }; OverlayBlocks = new IdeCollection <IdeBaseItem>(this, typeof(OverlayBlockDefinitionItemModel)); foreach (var overlayblock in _proxydef.BlockManager.GetBlocks().Where(x => x.type == "overlay")) { OverlayBlocks.Add(new OverlayBlockDefinitionItemModel(overlayblock, OverlayBlocks)); } OverlayBlocks.CollectionChanged += (sender, args) => { _proxydef.BlockManager.ClearBlocks(); foreach (TextBlockDefinitionItemModel x in TextBlocks) { _proxydef.BlockManager.AddBlock(x._def); } foreach (OverlayBlockDefinitionItemModel x in OverlayBlocks) { _proxydef.BlockManager.AddBlock(x._def); } }; AddTextBlockCommand = new RelayCommand(AddTextBlock); AddTemplateCommand = new RelayCommand(AddTemplate); AddOverlayCommand = new RelayCommand(AddOverlay); RaisePropertyChanged("StoredProxyProperties"); Messenger.Default.Register <ProxyTemplateChangedMessage>(this, action => UpdateProxyTemplate(action)); }