/// <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."); } } }
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; }