150 lines
3.2 KiB
C#
150 lines
3.2 KiB
C#
// Copyright © Gamesmiths Guild.
|
|
|
|
#if TOOLS
|
|
using Gamesmiths.Forge.Godot.Resources.Statescript;
|
|
using Gamesmiths.Forge.Godot.Resources.Statescript.Resolvers;
|
|
using Godot;
|
|
|
|
namespace Gamesmiths.Forge.Godot.Editor.Statescript;
|
|
|
|
public partial class StatescriptGraphNode
|
|
{
|
|
private bool ReferencesVariable(string variableName)
|
|
{
|
|
if (NodeResource is null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
foreach (StatescriptNodeProperty binding in NodeResource.PropertyBindings)
|
|
{
|
|
if (binding.Resolver is VariableResolverResource varRes
|
|
&& varRes.VariableName == variableName)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private void ApplyHighlightBorder()
|
|
{
|
|
if (_isHighlighted)
|
|
{
|
|
if (GetThemeStylebox("panel") is not StyleBoxFlat baseStyle)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var highlightStyle = (StyleBoxFlat)baseStyle.Duplicate();
|
|
|
|
highlightStyle.BorderColor = _highlightColor;
|
|
highlightStyle.BorderWidthTop = 2;
|
|
highlightStyle.BorderWidthBottom = 2;
|
|
highlightStyle.BorderWidthLeft = 2;
|
|
highlightStyle.BorderWidthRight = 2;
|
|
|
|
highlightStyle.BgColor = baseStyle.BgColor.Lerp(_highlightColor, 0.15f);
|
|
|
|
AddThemeStyleboxOverride("panel", highlightStyle);
|
|
AddThemeStyleboxOverride("panel_selected", highlightStyle);
|
|
}
|
|
else
|
|
{
|
|
RemoveThemeStyleboxOverride("panel");
|
|
RemoveThemeStyleboxOverride("panel_selected");
|
|
|
|
ApplyBottomPadding();
|
|
}
|
|
}
|
|
|
|
private void UpdateChildHighlights()
|
|
{
|
|
UpdateHighlightsRecursive(this);
|
|
}
|
|
|
|
private void UpdateHighlightsRecursive(Node parent)
|
|
{
|
|
foreach (Node child in parent.GetChildren())
|
|
{
|
|
if (child is OptionButton optionButton)
|
|
{
|
|
HighlightOptionButtonIfMatches(optionButton);
|
|
}
|
|
else if (child is Label label)
|
|
{
|
|
HighlightLabelIfMatches(label);
|
|
}
|
|
|
|
UpdateHighlightsRecursive(child);
|
|
}
|
|
}
|
|
|
|
private void HighlightOptionButtonIfMatches(OptionButton dropdown)
|
|
{
|
|
if (!dropdown.HasMeta("is_variable_dropdown"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(_highlightedVariableName))
|
|
{
|
|
dropdown.RemoveThemeStyleboxOverride("normal");
|
|
return;
|
|
}
|
|
|
|
var selectedIdx = dropdown.Selected;
|
|
if (selectedIdx < 0)
|
|
{
|
|
dropdown.RemoveThemeStyleboxOverride("normal");
|
|
return;
|
|
}
|
|
|
|
var selectedText = dropdown.GetItemText(selectedIdx);
|
|
if (selectedText == _highlightedVariableName)
|
|
{
|
|
if (dropdown.GetThemeStylebox("normal") is not StyleBoxFlat baseStyle)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var highlightStyle = (StyleBoxFlat)baseStyle.Duplicate();
|
|
|
|
highlightStyle.BgColor = baseStyle.BgColor.Lerp(_highlightColor, 0.25f);
|
|
|
|
dropdown.AddThemeStyleboxOverride("normal", highlightStyle);
|
|
}
|
|
else
|
|
{
|
|
dropdown.RemoveThemeStyleboxOverride("normal");
|
|
}
|
|
}
|
|
|
|
private void HighlightLabelIfMatches(Label label)
|
|
{
|
|
if (string.IsNullOrEmpty(_highlightedVariableName))
|
|
{
|
|
if (label.HasMeta("is_highlight_colored"))
|
|
{
|
|
label.RemoveThemeColorOverride("font_color");
|
|
label.RemoveMeta("is_highlight_colored");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (label.Text == _highlightedVariableName)
|
|
{
|
|
label.AddThemeColorOverride("font_color", _highlightColor);
|
|
label.SetMeta("is_highlight_colored", true);
|
|
}
|
|
else if (label.HasMeta("is_highlight_colored"))
|
|
{
|
|
label.RemoveThemeColorOverride("font_color");
|
|
label.RemoveMeta("is_highlight_colored");
|
|
}
|
|
}
|
|
}
|
|
#endif
|