/// <inheritdoc/>
        protected override async void ExecuteSync(INodePresenter nodePresenter, object parameter, object preExecuteResult)
        {
            if (!(nodePresenter is AssetMemberNodePresenter assetPresenter))
            {
                return;
            }

            var undoRedoService = assetPresenter.Asset.UndoRedoService;
            var session         = assetPresenter.Asset.Session;
            var serviceProvider = assetPresenter.Asset.ServiceProvider;

            var scriptSourceCodeProvider = serviceProvider.TryGet <IScriptSourceCodeResolver>();

            if (scriptSourceCodeProvider == null)
            {
                return;
            }

            var template = ScriptTemplateGenerator.GetScriptTemplateAssetDescriptions(session.FindTemplates(TemplateScope.Asset)).FirstOrDefault();

            if (template == null)
            {
                return;
            }

            var viewModel        = new TemplateDescriptionViewModel(serviceProvider, template);
            var customParameters = ScriptTemplateGenerator.GetAssetOverrideParameters(parameter as string, true);
            var assetViewModel   = (await session.ActiveAssetView.RunAssetTemplate(viewModel, null, customParameters)).FirstOrDefault();

            if (assetViewModel == null)
            {
                return;
            }

            //TODO: Maybe situations where this asset/node are no longer valid.
            if (assetViewModel.IsDeleted)
            {
                return;
            }

            IEnumerable <Type> componentTypes = scriptSourceCodeProvider.GetTypesFromSourceFile(assetViewModel.AssetItem.FullPath);
            var componentType = componentTypes.FirstOrDefault();

            if (componentType != null)
            {
                using (var transaction = session.UndoRedoService.CreateTransaction())
                {
                    object component = Activator.CreateInstance(componentType);
                    var    index     = new NodeIndex(nodePresenter.Children.Count);
                    nodePresenter.AddItem(component);
                    session.UndoRedoService.PushOperation(
                        new AnonymousDirtyingOperation(
                            assetPresenter.Asset.Dirtiables,
                            () => nodePresenter.RemoveItem(component, index),
                            () => nodePresenter.AddItem(component)));

                    session.UndoRedoService.SetName(transaction, "Add new script component.");
                }
            }
        }
Example #2
0
        private async void CreateSkeleton()
        {
            var source = Asset.Source;

            if (UPath.IsNullOrEmpty(source))
            {
                return;
            }

            using (var transaction = UndoRedoService.CreateTransaction())
            {
                var template = Session.FindTemplates(TemplateScope.Asset).SingleOrDefault(x => x.Id == SkeletonFromFileTemplateGenerator.Id);
                if (template != null)
                {
                    var viewModel = new TemplateDescriptionViewModel(ServiceProvider, template);
                    var skeleton  = (await Session.ActiveAssetView.RunAssetTemplate(viewModel, new[] { source })).SingleOrDefault();
                    if (skeleton == null)
                    {
                        return;
                    }

                    var skeletonNode = AssetRootNode[nameof(ModelAsset.Skeleton)];
                    var reference    = ContentReferenceHelper.CreateReference <Skeleton>(skeleton);
                    skeletonNode.Update(reference);
                }
                UndoRedoService.SetName(transaction, "Create Skeleton");
            }
        }
        public AddAssetTemplateCollectionViewModel(SessionViewModel session)
            : base(session.ServiceProvider)
        {
            foreach (TemplateDescription template in session.FindTemplates(TemplateScope.Asset))
            {
                var group = ProcessGroup(RootGroup, template.Group);
                if (group != null)
                {
                    var viewModel = new TemplateDescriptionViewModel(session.ServiceProvider, template);
                    group.Templates.Add(viewModel);
                }
            }

            SelectedGroup = RootGroup;
        }