Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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));
        }