internal LinkNodeEdge(VisualScriptLinkViewModel viewModel, BlockNodeVertex source, BlockNodeVertex target) : base(source, target) { ViewModel = viewModel; SourceSlot = viewModel.SourceSlot; TargetSlot = viewModel.TargetSlot; if (SourceSlot == null || TargetSlot == null) { throw new InvalidOperationException("Could not find appropriate slots for this link"); } }
private async Task AddBlockViewModel(Block block) { using (var transaction = editor.UndoRedoService.CreateTransaction(TransactionFlags.KeepParentsAlive)) { var viewModel = new VisualScriptBlockViewModel(this, block); var blockNodeVertex = new BlockNodeVertex(viewModel); // Update initial diagnostics (if any) foreach (var diagnostic in editor.Diagnostics.Where(x => x.BlockId.HasValue && x.BlockId.Value == block.Id)) { viewModel.Diagnostics.Add(diagnostic); } blocks.Add(blockNodeVertex); blockMapping.Add(block, blockNodeVertex); // (Re)generate slots await this.method.RegenerateSlots(block); editor.UndoRedoService.SetName(transaction, "Added block"); } }