From bb8f098714fb4a0817b90bf7187777f794513b0a Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sun, 13 Aug 2023 19:14:57 +0200 Subject: [PATCH] Add reroute node usage to Visject only if surface type allows it --- Source/Editor/Surface/VisjectSurface.Input.cs | 8 +++---- Source/Editor/Surface/VisjectSurface.cs | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Source/Editor/Surface/VisjectSurface.Input.cs b/Source/Editor/Surface/VisjectSurface.Input.cs index ecc29d74f..062a0d603 100644 --- a/Source/Editor/Surface/VisjectSurface.Input.cs +++ b/Source/Editor/Surface/VisjectSurface.Input.cs @@ -299,7 +299,7 @@ namespace FlaxEditor.Surface if (IsMouseOver && !_leftMouseDown && !IsPrimaryMenuOpened) { var nextViewScale = ViewScale + delta * 0.1f; - + if (delta > 0 && !_rightMouseDown) { // Scale towards mouse when zooming in @@ -314,7 +314,7 @@ namespace FlaxEditor.Surface ViewScale = nextViewScale; ViewCenterPosition = viewCenter; } - + return true; } @@ -329,12 +329,12 @@ namespace FlaxEditor.Surface if (!handled) CustomMouseDoubleClick?.Invoke(ref location, button, ref handled); - if (!handled && CanEdit) + // Insert reroute node + if (!handled && CanEdit && CanUseNodeType(7, 29)) { var mousePos = _rootControl.PointFromParent(ref _mousePos); if (IntersectsConnection(mousePos, out InputBox inputBox, out OutputBox outputBox) && GetControlUnderMouse() == null) { - // Insert reroute node if (Undo != null) { bool undoEnabled = Undo.Enabled; diff --git a/Source/Editor/Surface/VisjectSurface.cs b/Source/Editor/Surface/VisjectSurface.cs index 675598b16..0275586a4 100644 --- a/Source/Editor/Surface/VisjectSurface.cs +++ b/Source/Editor/Surface/VisjectSurface.cs @@ -524,6 +524,27 @@ namespace FlaxEditor.Surface /// public virtual bool CanSetParameters => false; + /// + /// Determines whether the specified node archetype can be used in the surface. + /// + /// The nodes group archetype identifier. + /// The node archetype identifier. + /// True if can use this node archetype, otherwise false. + public bool CanUseNodeType(ushort groupID, ushort typeID) + { + var result = false; + var nodeArchetypes = NodeArchetypes ?? NodeFactory.DefaultGroups; + if (NodeFactory.GetArchetype(nodeArchetypes, groupID, typeID, out var groupArchetype, out var nodeArchetype)) + { + var flags = nodeArchetype.Flags; + nodeArchetype.Flags &= ~NodeFlags.NoSpawnViaGUI; + nodeArchetype.Flags &= ~NodeFlags.NoSpawnViaPaste; + result = CanUseNodeType(groupArchetype, nodeArchetype); + nodeArchetype.Flags = flags; + } + return result; + } + /// /// Determines whether the specified node archetype can be used in the surface. ///