diff --git a/Examples/Nodify.Calculator/ConnectorViewModel.cs b/Examples/Nodify.Calculator/ConnectorViewModel.cs index 61c3234..32899c8 100644 --- a/Examples/Nodify.Calculator/ConnectorViewModel.cs +++ b/Examples/Nodify.Calculator/ConnectorViewModel.cs @@ -59,7 +59,7 @@ namespace Nodify.Calculator set => SetProperty(ref _anchor, value); } - private System.Drawing.Color _color = System.Drawing.Color.DodgerBlue; + private System.Drawing.Color _color = NodeColors.Default; public System.Drawing.Color ConnectorColor { set @@ -144,23 +144,23 @@ namespace Nodify.Calculator } /// - /// Returns a color based on the C# data type. + /// Returns an Unreal Engine-inspired color based on the C# data type. /// public static System.Drawing.Color GetColorForType(string typeName) { return (typeName ?? "").ToLower() switch { - "string" => System.Drawing.Color.CornflowerBlue, - "int" => System.Drawing.Color.LightGreen, - "double" => System.Drawing.Color.Orange, - "float" => System.Drawing.Color.Gold, - "bool" => System.Drawing.Color.Tomato, - "decimal" => System.Drawing.Color.MediumOrchid, - "long" => System.Drawing.Color.YellowGreen, - "datetime" => System.Drawing.Color.DeepSkyBlue, - "object" => System.Drawing.Color.Silver, - "list" => System.Drawing.Color.Plum, - _ => System.Drawing.Color.LightGray, + "string" => NodeColors.String, + "int" => NodeColors.Integer, + "double" => NodeColors.Float, + "float" => NodeColors.Float, + "bool" => NodeColors.Boolean, + "decimal" => NodeColors.Decimal, + "long" => NodeColors.Long, + "datetime" => NodeColors.DateTime, + "object" => NodeColors.Object, + "list" => NodeColors.List, + _ => NodeColors.Default, }; } } diff --git a/Examples/Nodify.Calculator/NodeColors.cs b/Examples/Nodify.Calculator/NodeColors.cs new file mode 100644 index 0000000..1568656 --- /dev/null +++ b/Examples/Nodify.Calculator/NodeColors.cs @@ -0,0 +1,70 @@ +using System.Drawing; + +namespace Nodify.Calculator +{ + /// + /// Centralized color palette inspired by Unreal Engine Blueprint visual scripting. + /// All connector and node colors should reference these constants for consistency. + /// + public static class NodeColors + { + // ─── Variable / Data Type Pin Colors (Unreal Engine style) ─── + + /// Boolean (True/False) — Red + public static readonly Color Boolean = Color.FromArgb(255, 200, 50, 50); + + /// Integer — Light Blue + public static readonly Color Integer = Color.FromArgb(255, 100, 220, 200); + + /// Float / Double — Bright Green + public static readonly Color Float = Color.FromArgb(255, 120, 255, 100); + + /// String — Magenta / Pink + public static readonly Color String = Color.FromArgb(255, 255, 50, 150); + + /// Long / Name — Gold / Yellow-Green + public static readonly Color Long = Color.FromArgb(255, 200, 200, 50); + + /// Decimal — Orange (like Transform/Struct in UE) + public static readonly Color Decimal = Color.FromArgb(255, 230, 150, 50); + + /// DateTime — Cyan (like Rotator in UE) + public static readonly Color DateTime = Color.FromArgb(255, 50, 200, 220); + + /// Object (generic / untyped) — Gray + public static readonly Color Object = Color.FromArgb(255, 160, 160, 160); + + // ─── Connector Shape Colors ─── + + /// Model / Class reference — Purple (like Class references in UE) + public static readonly Color Model = Color.FromArgb(255, 150, 80, 220); + + /// List / Array — Green (Grid connectors) + public static readonly Color List = Color.FromArgb(255, 50, 220, 130); + + // ─── Execution Flow Colors ─── + + /// Execution / Flow pins (Triangle) — White (like UE exec pins) + public static readonly Color Exec = Color.White; + + /// Begin / End special flow — Red (like Event nodes in UE) + public static readonly Color Event = Color.FromArgb(255, 200, 30, 30); + + /// Loop body flow — Teal/Green branch + public static readonly Color LoopFlow = Color.FromArgb(255, 50, 220, 130); + + // ─── Node Connector Defaults ─── + + /// Universal / Copy / Untyped connector — White + public static readonly Color Universal = Color.White; + + /// Default connector color for unknown types + public static readonly Color Default = Color.FromArgb(255, 180, 180, 180); + + /// API param input — Teal + public static readonly Color ApiParam = Color.FromArgb(255, 100, 220, 200); + + /// Generic system connector — Cyan + public static readonly Color SystemGeneric = Color.FromArgb(255, 100, 220, 200); + } +} diff --git a/Examples/Nodify.Calculator/NodeHandlers/BasicSystemHandlers.cs b/Examples/Nodify.Calculator/NodeHandlers/BasicSystemHandlers.cs index ec00f13..48abf08 100644 --- a/Examples/Nodify.Calculator/NodeHandlers/BasicSystemHandlers.cs +++ b/Examples/Nodify.Calculator/NodeHandlers/BasicSystemHandlers.cs @@ -24,9 +24,9 @@ namespace Nodify.Calculator.NodeHandlers SystemOperationType = info.sysOp }; if (info.sysOp == SystemOperations.BEGIN) - op.Output.Add(new ConnectorViewModel { Title = "", IsInput = false, Shape = ConnectorShape.Triangle, ConnectorColor = Color.DarkRed }); + op.Output.Add(new ConnectorViewModel { Title = "", IsInput = false, Shape = ConnectorShape.Triangle, ConnectorColor = NodeColors.Event }); else - op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle, ConnectorColor = Color.DarkRed }); + op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle, ConnectorColor = NodeColors.Event }); return op; } @@ -65,7 +65,7 @@ namespace Nodify.Calculator.NodeHandlers Title = info.Title ?? "COPY", SystemOperationType = SystemOperations.COPY }; - op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Circle, ConnectorColor = Color.White, IsCopyConnector = true }); + op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Circle, ConnectorColor = NodeColors.Universal, IsCopyConnector = true }); return op; } @@ -118,7 +118,7 @@ namespace Nodify.Calculator.NodeHandlers Title = info.Title ?? "Split", SystemOperationType = SystemOperations.SPLIT }; - op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Square, ConnectorColor = Color.MediumPurple }); + op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Square, ConnectorColor = NodeColors.Model }); return op; } diff --git a/Examples/Nodify.Calculator/NodeHandlers/FlowNodeHandlers.cs b/Examples/Nodify.Calculator/NodeHandlers/FlowNodeHandlers.cs index 20e1a76..86f3de5 100644 --- a/Examples/Nodify.Calculator/NodeHandlers/FlowNodeHandlers.cs +++ b/Examples/Nodify.Calculator/NodeHandlers/FlowNodeHandlers.cs @@ -24,7 +24,7 @@ namespace Nodify.Calculator.NodeHandlers }; op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle }); op.Output.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle, IsInput = false }); - op.Input.Add(new ConnectorViewModel { Title = "Value", ConnectorColor = Color.LimeGreen }); + op.Input.Add(new ConnectorViewModel { Title = "Value", ConnectorColor = NodeColors.Object }); return op; } @@ -114,7 +114,7 @@ namespace Nodify.Calculator.NodeHandlers { Title = "List", Shape = ConnectorShape.Circle, - ConnectorColor = Color.White, + ConnectorColor = NodeColors.Universal, IsCopyConnector = true, IsTakeListConnector = true }); diff --git a/Examples/Nodify.Calculator/NodeHandlers/GetSetHandlers.cs b/Examples/Nodify.Calculator/NodeHandlers/GetSetHandlers.cs index e2be9af..5b8be69 100644 --- a/Examples/Nodify.Calculator/NodeHandlers/GetSetHandlers.cs +++ b/Examples/Nodify.Calculator/NodeHandlers/GetSetHandlers.cs @@ -126,7 +126,7 @@ namespace Nodify.Calculator.NodeHandlers Title = info.ClassName ?? "", IsInput = false, Shape = ConnectorShape.Square, - ConnectorColor = Color.MediumPurple, + ConnectorColor = NodeColors.Model, DataType = info.ClassName ?? "object" }); } @@ -145,7 +145,7 @@ namespace Nodify.Calculator.NodeHandlers var properties = OperationFactory.GetPropertiesFromClassPublic(fileContent); // Square input for the class object - op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Square, ConnectorColor = Color.MediumPurple }); + op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Square, ConnectorColor = NodeColors.Model }); // Circle output per property, colored by type foreach (var property in properties) @@ -164,13 +164,13 @@ namespace Nodify.Calculator.NodeHandlers else { // Fallback: generic square I/O - op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Square, ConnectorColor = Color.MediumPurple }); + op.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Square, ConnectorColor = NodeColors.Model }); op.Output.Add(new ConnectorViewModel { Title = info.ClassName ?? "", IsInput = false, Shape = ConnectorShape.Square, - ConnectorColor = Color.MediumPurple, + ConnectorColor = NodeColors.Model, DataType = info.ClassName ?? "object" }); } diff --git a/Examples/Nodify.Calculator/NodeHandlers/OtherNodeHandlers.cs b/Examples/Nodify.Calculator/NodeHandlers/OtherNodeHandlers.cs index e81807d..405579b 100644 --- a/Examples/Nodify.Calculator/NodeHandlers/OtherNodeHandlers.cs +++ b/Examples/Nodify.Calculator/NodeHandlers/OtherNodeHandlers.cs @@ -113,7 +113,7 @@ namespace Nodify.Calculator.NodeHandlers Title = rc, IsInput = false, Shape = ConnectorShape.Grid, - ConnectorColor = Color.MediumSpringGreen, + ConnectorColor = NodeColors.List, DataType = rc }); } @@ -137,7 +137,7 @@ namespace Nodify.Calculator.NodeHandlers Title = "Response", IsInput = false, Shape = ConnectorShape.Circle, - ConnectorColor = Color.LimeGreen, + ConnectorColor = NodeColors.Object, DataType = "object" }); } @@ -154,7 +154,7 @@ namespace Nodify.Calculator.NodeHandlers { Title = $"Body ({bc})", Shape = isList ? ConnectorShape.Grid : ConnectorShape.Square, - ConnectorColor = isList ? Color.MediumSpringGreen : Color.MediumPurple, + ConnectorColor = isList ? NodeColors.List : NodeColors.Model, DataType = bc }); } @@ -164,7 +164,7 @@ namespace Nodify.Calculator.NodeHandlers { Title = "Body", Shape = ConnectorShape.Circle, - ConnectorColor = Color.LimeGreen, + ConnectorColor = NodeColors.Object, DataType = "object" }); } @@ -173,7 +173,7 @@ namespace Nodify.Calculator.NodeHandlers // Other data inputs (query/path params) foreach (var label in info.Input) { - op.Input.Add(new ConnectorViewModel { Title = label, ConnectorColor = Color.LimeGreen }); + op.Input.Add(new ConnectorViewModel { Title = label, ConnectorColor = NodeColors.ApiParam }); } return op; }