Ejemplo n.º 1
0
 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");
            }
        }