Files
MovementTests/addons/forge/editor/statescript/StatescriptGraphNode.NodeSetup.cs
Minimata 1d856fd937
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 26s
Create tag and build when new code gets to main / Export (push) Successful in 5m42s
Replicated the weapon flying tick setup using resources
2026-04-07 16:32:26 +02:00

222 lines
5.0 KiB
C#

// Copyright © Gamesmiths Guild.
#if TOOLS
using Gamesmiths.Forge.Godot.Resources.Statescript;
using Godot;
namespace Gamesmiths.Forge.Godot.Editor.Statescript;
public partial class StatescriptGraphNode
{
private void SetupNodeByType(StatescriptNodeType nodeType)
{
switch (nodeType)
{
case StatescriptNodeType.Entry:
SetupEntryNode();
break;
case StatescriptNodeType.Exit:
SetupExitNode();
break;
case StatescriptNodeType.Action:
SetupActionNode();
break;
case StatescriptNodeType.Condition:
SetupConditionNode();
break;
case StatescriptNodeType.State:
SetupStateNode();
break;
}
}
private void SetupEntryNode()
{
CustomMinimumSize = new Vector2(100, 0);
var label = new Label { Text = "Start" };
AddChild(label);
SetSlotEnabledRight(0, true);
SetSlotColorRight(0, _eventColor);
ApplyTitleBarColor(_entryColor);
}
private void SetupExitNode()
{
CustomMinimumSize = new Vector2(100, 0);
var label = new Label { Text = "End" };
AddChild(label);
SetSlotEnabledLeft(0, true);
SetSlotColorLeft(0, _eventColor);
ApplyTitleBarColor(_exitColor);
}
private void SetupActionNode()
{
var label = new Label { Text = "Execute" };
AddChild(label);
SetSlotEnabledLeft(0, true);
SetSlotColorLeft(0, _eventColor);
SetSlotEnabledRight(0, true);
SetSlotColorRight(0, _eventColor);
ApplyTitleBarColor(_actionColor);
}
private void SetupConditionNode()
{
var hBox = new HBoxContainer();
hBox.AddThemeConstantOverride("separation", 16);
AddChild(hBox);
var inputLabel = new Label { Text = "Condition" };
hBox.AddChild(inputLabel);
SetSlotEnabledLeft(0, true);
SetSlotColorLeft(0, _eventColor);
var trueLabel = new Label
{
Text = "True",
HorizontalAlignment = HorizontalAlignment.Right,
SizeFlagsHorizontal = SizeFlags.ExpandFill,
};
hBox.AddChild(trueLabel);
SetSlotEnabledRight(0, true);
SetSlotColorRight(0, _eventColor);
var falseLabel = new Label
{
Text = "False",
HorizontalAlignment = HorizontalAlignment.Right,
SizeFlagsHorizontal = SizeFlags.ExpandFill,
};
AddChild(falseLabel);
SetSlotEnabledRight(1, true);
SetSlotColorRight(1, _eventColor);
ApplyTitleBarColor(_conditionColor);
}
private void SetupStateNode()
{
var hBox1 = new HBoxContainer();
hBox1.AddThemeConstantOverride("separation", 16);
AddChild(hBox1);
var inputLabel = new Label { Text = "Begin" };
hBox1.AddChild(inputLabel);
SetSlotEnabledLeft(0, true);
SetSlotColorLeft(0, _eventColor);
var activateLabel = new Label
{
Text = "OnActivate",
HorizontalAlignment = HorizontalAlignment.Right,
SizeFlagsHorizontal = SizeFlags.ExpandFill,
};
hBox1.AddChild(activateLabel);
SetSlotEnabledRight(0, true);
SetSlotColorRight(0, _eventColor);
var hBox2 = new HBoxContainer();
hBox2.AddThemeConstantOverride("separation", 16);
AddChild(hBox2);
var abortLabel = new Label { Text = "Abort" };
hBox2.AddChild(abortLabel);
SetSlotEnabledLeft(1, true);
SetSlotColorLeft(1, _eventColor);
var deactivateLabel = new Label
{
Text = "OnDeactivate",
HorizontalAlignment = HorizontalAlignment.Right,
SizeFlagsHorizontal = SizeFlags.ExpandFill,
};
hBox2.AddChild(deactivateLabel);
SetSlotEnabledRight(1, true);
SetSlotColorRight(1, _eventColor);
var abortOutputLabel = new Label
{
Text = "OnAbort",
HorizontalAlignment = HorizontalAlignment.Right,
SizeFlagsHorizontal = SizeFlags.ExpandFill,
};
AddChild(abortOutputLabel);
SetSlotEnabledRight(2, true);
SetSlotColorRight(2, _eventColor);
var subgraphLabel = new Label
{
Text = "Subgraph",
HorizontalAlignment = HorizontalAlignment.Right,
SizeFlagsHorizontal = SizeFlags.ExpandFill,
};
AddChild(subgraphLabel);
SetSlotEnabledRight(3, true);
SetSlotColorRight(3, _subgraphColor);
ApplyTitleBarColor(_stateColor);
}
private void ClearSlots()
{
foreach (Node child in GetChildren())
{
RemoveChild(child);
child.Free();
}
}
private void ApplyTitleBarColor(Color color)
{
var titleBarStyleBox = new StyleBoxFlat
{
BgColor = color,
ContentMarginLeft = 12,
ContentMarginRight = 12,
ContentMarginTop = 6,
ContentMarginBottom = 6,
CornerRadiusTopLeft = 4,
CornerRadiusTopRight = 4,
};
AddThemeStyleboxOverride("titlebar", titleBarStyleBox);
var selectedTitleBarStyleBox = (StyleBoxFlat)titleBarStyleBox.Duplicate();
selectedTitleBarStyleBox.BgColor = color.Lightened(0.2f);
AddThemeStyleboxOverride("titlebar_selected", selectedTitleBarStyleBox);
}
private void ApplyBottomPadding()
{
StyleBox? existing = GetThemeStylebox("panel");
if (existing is not null)
{
var panelStyle = (StyleBox)existing.Duplicate();
panelStyle.ContentMarginBottom = 10;
AddThemeStyleboxOverride("panel", panelStyle);
}
StyleBox? selectedExisting = GetThemeStylebox("panel_selected");
if (selectedExisting is not null)
{
var selectedPanelStyle = (StyleBox)selectedExisting.Duplicate();
selectedPanelStyle.ContentMarginBottom = 10;
AddThemeStyleboxOverride("panel_selected", selectedPanelStyle);
}
}
}
#endif