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 InputPorts = new List(); public List OutputPorts = new List(); 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(); } }