56 lines
1.2 KiB
C#
56 lines
1.2 KiB
C#
using System.Collections.Generic;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
|
|
[CreateAssetMenu(fileName = "NewNode", menuName = "Block Space/Nodes/Node Definition")]
|
|
public class NodeDefinition : ScriptableObject
|
|
{
|
|
[Header("Ports")]
|
|
public List<NodePortDefinition> InputPorts = new List<NodePortDefinition>();
|
|
|
|
public List<NodePortDefinition> OutputPorts = new List<NodePortDefinition>();
|
|
|
|
public string NodeName => base.name;
|
|
|
|
public string BehaviorClassName => GetSanitizedBehaviorBaseName(base.name) + "Behavior";
|
|
|
|
public NodeBoardSize GetBoardSize()
|
|
{
|
|
int num = Mathf.Max(InputPorts.Count, OutputPorts.Count);
|
|
if (num <= 3)
|
|
{
|
|
return NodeBoardSize.Small;
|
|
}
|
|
if (num <= 4)
|
|
{
|
|
return NodeBoardSize.Medium;
|
|
}
|
|
if (num <= 5)
|
|
{
|
|
return NodeBoardSize.Large;
|
|
}
|
|
return NodeBoardSize.ExtraLarge;
|
|
}
|
|
|
|
private static string GetSanitizedBehaviorBaseName(string sourceName)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(sourceName))
|
|
{
|
|
return "Node";
|
|
}
|
|
StringBuilder stringBuilder = new StringBuilder(sourceName.Length);
|
|
foreach (char c in sourceName)
|
|
{
|
|
if (char.IsLetterOrDigit(c) || c == '_')
|
|
{
|
|
stringBuilder.Append(c);
|
|
}
|
|
}
|
|
if (stringBuilder.Length <= 0)
|
|
{
|
|
return "Node";
|
|
}
|
|
return stringBuilder.ToString();
|
|
}
|
|
}
|