Add GroupArchetype to Visject nodes spawn query check

This commit is contained in:
Wojtek Figat
2023-08-03 14:53:02 +02:00
parent 8dc98174cf
commit bb96f2cd6d
11 changed files with 22 additions and 20 deletions

View File

@@ -345,7 +345,7 @@ namespace FlaxEditor.Surface
_cmStateMachineMenu = new VisjectCM(new VisjectCM.InitInfo
{
Groups = StateMachineGroupArchetypes,
CanSpawnNode = arch => true,
CanSpawnNode = (_, _) => true,
});
_cmStateMachineMenu.ShowExpanded = true;
}
@@ -406,9 +406,9 @@ namespace FlaxEditor.Surface
}
/// <inheritdoc />
public override bool CanUseNodeType(NodeArchetype nodeArchetype)
public override bool CanUseNodeType(GroupArchetype groupArchetype, NodeArchetype nodeArchetype)
{
return (nodeArchetype.Flags & NodeFlags.AnimGraph) != 0 && base.CanUseNodeType(nodeArchetype);
return (nodeArchetype.Flags & NodeFlags.AnimGraph) != 0 && base.CanUseNodeType(groupArchetype, nodeArchetype);
}
/// <inheritdoc />

View File

@@ -35,7 +35,7 @@ namespace FlaxEditor.Surface
}
/// <inheritdoc />
public override bool CanUseNodeType(NodeArchetype nodeArchetype)
public override bool CanUseNodeType(GroupArchetype groupArchetype, NodeArchetype nodeArchetype)
{
if (nodeArchetype.Title == "Function Input")
return true;
@@ -44,7 +44,7 @@ namespace FlaxEditor.Surface
if (Context == RootContext && nodeArchetype.Title == "Function Output")
return true;
return base.CanUseNodeType(nodeArchetype);
return base.CanUseNodeType(groupArchetype, nodeArchetype);
}
/// <inheritdoc />

View File

@@ -29,9 +29,10 @@ namespace FlaxEditor.Surface.ContextMenu
/// <summary>
/// Visject Surface node archetype spawn ability checking delegate.
/// </summary>
/// <param name="groupArch">The nodes group archetype to check.</param>
/// <param name="arch">The node archetype to check.</param>
/// <returns>True if can use this node to spawn it on a surface, otherwise false..</returns>
public delegate bool NodeSpawnCheckDelegate(NodeArchetype arch);
public delegate bool NodeSpawnCheckDelegate(GroupArchetype groupArch, NodeArchetype arch);
/// <summary>
/// Visject Surface parameters getter delegate.
@@ -184,7 +185,7 @@ namespace FlaxEditor.Surface.ContextMenu
nodes.Clear();
foreach (var nodeArchetype in groupArchetype.Archetypes)
{
if ((nodeArchetype.Flags & NodeFlags.NoSpawnViaGUI) == 0 && info.CanSpawnNode(nodeArchetype))
if ((nodeArchetype.Flags & NodeFlags.NoSpawnViaGUI) == 0 && info.CanSpawnNode(groupArchetype, nodeArchetype))
{
nodes.Add(nodeArchetype);
}

View File

@@ -36,13 +36,13 @@ namespace FlaxEditor.Surface
}
/// <inheritdoc />
public override bool CanUseNodeType(NodeArchetype nodeArchetype)
public override bool CanUseNodeType(GroupArchetype groupArchetype, NodeArchetype nodeArchetype)
{
if (nodeArchetype.Title == "Function Input" ||
nodeArchetype.Title == "Function Output")
return true;
return base.CanUseNodeType(nodeArchetype);
return base.CanUseNodeType(groupArchetype, nodeArchetype);
}
/// <inheritdoc />

View File

@@ -33,9 +33,9 @@ namespace FlaxEditor.Surface
}
/// <inheritdoc />
public override bool CanUseNodeType(NodeArchetype nodeArchetype)
public override bool CanUseNodeType(GroupArchetype groupArchetype, NodeArchetype nodeArchetype)
{
return (nodeArchetype.Flags & NodeFlags.MaterialGraph) != 0 && base.CanUseNodeType(nodeArchetype);
return (nodeArchetype.Flags & NodeFlags.MaterialGraph) != 0 && base.CanUseNodeType(groupArchetype, nodeArchetype);
}
/// <inheritdoc />

View File

@@ -35,13 +35,13 @@ namespace FlaxEditor.Surface
}
/// <inheritdoc />
public override bool CanUseNodeType(NodeArchetype nodeArchetype)
public override bool CanUseNodeType(GroupArchetype groupArchetype, NodeArchetype nodeArchetype)
{
if (nodeArchetype.Title == "Function Input" ||
nodeArchetype.Title == "Function Output")
return true;
return base.CanUseNodeType(nodeArchetype);
return base.CanUseNodeType(groupArchetype, nodeArchetype);
}
/// <inheritdoc />

View File

@@ -87,9 +87,9 @@ namespace FlaxEditor.Surface
}
/// <inheritdoc />
public override bool CanUseNodeType(NodeArchetype nodeArchetype)
public override bool CanUseNodeType(GroupArchetype groupArchetype, NodeArchetype nodeArchetype)
{
return (nodeArchetype.Flags & NodeFlags.ParticleEmitterGraph) != 0 && base.CanUseNodeType(nodeArchetype);
return (nodeArchetype.Flags & NodeFlags.ParticleEmitterGraph) != 0 && base.CanUseNodeType(groupArchetype, nodeArchetype);
}
/// <inheritdoc />

View File

@@ -254,7 +254,7 @@ namespace FlaxEditor.Surface
throw new InvalidOperationException("Unknown node type.");
// Validate given node type
if (!CanUseNodeType(nodeArchetype))
if (!CanUseNodeType(groupArchetype, nodeArchetype))
continue;
// Create

View File

@@ -520,9 +520,10 @@ namespace FlaxEditor.Surface
/// <summary>
/// Determines whether the specified node archetype can be used in the surface.
/// </summary>
/// <param name="groupArchetype">The nodes group archetype.</param>
/// <param name="nodeArchetype">The node archetype.</param>
/// <returns>True if can use this node archetype, otherwise false.</returns>
public virtual bool CanUseNodeType(NodeArchetype nodeArchetype)
public virtual bool CanUseNodeType(GroupArchetype groupArchetype, NodeArchetype nodeArchetype)
{
return (nodeArchetype.Flags & NodeFlags.NoSpawnViaPaste) == 0;
}

View File

@@ -361,7 +361,7 @@ namespace FlaxEditor.Surface
var flags = nodeArchetype.Flags;
nodeArchetype.Flags &= ~NodeFlags.NoSpawnViaGUI;
nodeArchetype.Flags &= ~NodeFlags.NoSpawnViaPaste;
if (_surface != null && !_surface.CanUseNodeType(nodeArchetype))
if (_surface != null && !_surface.CanUseNodeType(groupArchetype, nodeArchetype))
{
nodeArchetype.Flags = flags;
Editor.LogWarning("Cannot spawn given node type. Title: " + nodeArchetype.Title);

View File

@@ -532,9 +532,9 @@ namespace FlaxEditor.Surface
public override bool CanSetParameters => true;
/// <inheritdoc />
public override bool CanUseNodeType(NodeArchetype nodeArchetype)
public override bool CanUseNodeType(GroupArchetype groupArchetype, NodeArchetype nodeArchetype)
{
return (nodeArchetype.Flags & NodeFlags.VisualScriptGraph) != 0 && base.CanUseNodeType(nodeArchetype);
return (nodeArchetype.Flags & NodeFlags.VisualScriptGraph) != 0 && base.CanUseNodeType(groupArchetype, nodeArchetype);
}
/// <inheritdoc />