fix behavior tree nodes
This commit is contained in:
@@ -189,21 +189,74 @@ namespace FlaxEditor.Surface.Archetypes
|
||||
|
||||
public override void Draw()
|
||||
{
|
||||
base.Draw();
|
||||
var style = Style.Current;
|
||||
|
||||
var backgroundRect = new Rectangle(Float2.Zero, Size);
|
||||
|
||||
// Shadow
|
||||
if (DrawBasicShadow)
|
||||
{
|
||||
var shadowRect = backgroundRect.MakeOffsetted(ShadowOffset);
|
||||
Render2D.FillRectangle(shadowRect, Color.Black.AlphaMultiplied(0.125f));
|
||||
}
|
||||
|
||||
// Background
|
||||
Render2D.FillRectangle(backgroundRect, ArchetypeColor);
|
||||
|
||||
// Breakpoint hit
|
||||
if (Breakpoint.Hit)
|
||||
{
|
||||
var colorTop = Color.OrangeRed;
|
||||
var colorBottom = Color.Red;
|
||||
var time = DateTime.Now - Engine.StartupTime;
|
||||
Render2D.DrawRectangle(backgroundRect.MakeExpanded(Mathf.Lerp(3.0f, 12.0f, Mathf.Sin((float)time.TotalSeconds * 10.0f) * 0.5f + 0.5f)), colorTop, colorTop, colorBottom, colorBottom, 2.0f);
|
||||
}
|
||||
|
||||
// Header
|
||||
var headerColor = style.BackgroundHighlighted;
|
||||
if (_headerRect.Contains(ref _mousePosition) && !Surface.IsConnecting && !Surface.IsSelecting)
|
||||
headerColor *= 1.07f;
|
||||
Render2D.FillRectangle(_headerRect, style.BackgroundHighlighted);
|
||||
Render2D.DrawText(style.FontLarge, Title, _headerTextRect, style.Foreground, TextAlignment.Near, TextAlignment.Center, TextWrapping.NoWrap, 1f, FlaxEditor.Surface.Constants.NodeHeaderTextScale);
|
||||
|
||||
// Close button
|
||||
if ((Archetype.Flags & NodeFlags.NoCloseButton) == 0 && Surface.CanEdit)
|
||||
{
|
||||
bool highlightClose = _closeButtonRect.Contains(_mousePosition) && !Surface.IsConnecting && !Surface.IsSelecting;
|
||||
Render2D.DrawSprite(style.Cross, _closeButtonRect, highlightClose ? style.Foreground : style.ForegroundGrey);
|
||||
}
|
||||
|
||||
DrawChildren();
|
||||
|
||||
// Selection outline
|
||||
if (_isSelected)
|
||||
{
|
||||
var colorTop = Color.Orange;
|
||||
var colorBottom = Color.OrangeRed;
|
||||
Render2D.DrawRectangle(backgroundRect, colorTop, colorTop, colorBottom, colorBottom, 2.5f);
|
||||
}
|
||||
|
||||
// Breakpoint dot
|
||||
if (Breakpoint.Set)
|
||||
{
|
||||
var icon = Breakpoint.Enabled ? Surface.Style.Icons.BoxClose : Surface.Style.Icons.BoxOpen;
|
||||
Render2D.DrawSprite(icon, new Rectangle(-7, -7, 16, 16), new Color(0.9f, 0.9f, 0.9f));
|
||||
Render2D.DrawSprite(icon, new Rectangle(-6, -6, 14, 14), new Color(0.894117647f, 0.0784313725f, 0.0f));
|
||||
}
|
||||
|
||||
if (highlightBox != null)
|
||||
Render2D.DrawRectangle(highlightBox.Bounds, style.BorderHighlighted, 2f);
|
||||
|
||||
// Debug Info
|
||||
if (!string.IsNullOrEmpty(_debugInfo))
|
||||
{
|
||||
var style = Style.Current;
|
||||
Render2D.DrawText(style.FontSmall, _debugInfo, new Rectangle(4, _headerRect.Bottom + 4, _debugInfoSize), style.Foreground);
|
||||
}
|
||||
|
||||
// Debug relevancy outline
|
||||
if (_debugRelevant)
|
||||
{
|
||||
var colorTop = Color.LightYellow;
|
||||
var colorBottom = Color.Yellow;
|
||||
var backgroundRect = new Rectangle(Float2.One, Size - new Float2(2.0f));
|
||||
backgroundRect = new Rectangle(Float2.One, Size - new Float2(2.0f));
|
||||
Render2D.DrawRectangle(backgroundRect, colorTop, colorTop, colorBottom, colorBottom);
|
||||
}
|
||||
}
|
||||
@@ -515,7 +568,7 @@ namespace FlaxEditor.Surface.Archetypes
|
||||
height += decorator.Height + DecoratorsMarginY;
|
||||
width = Mathf.Max(width, decorator.Width - FlaxEditor.Surface.Constants.NodeCloseButtonSize - 2 * DecoratorsMarginX);
|
||||
}
|
||||
Size = new Float2(width + FlaxEditor.Surface.Constants.NodeMarginX * 2 + FlaxEditor.Surface.Constants.NodeCloseButtonSize, height + FlaxEditor.Surface.Constants.NodeHeaderHeight + FlaxEditor.Surface.Constants.NodeFooterSize);
|
||||
Size = new Float2(width + FlaxEditor.Surface.Constants.NodeMarginX * 2 + FlaxEditor.Surface.Constants.NodeCloseButtonSize, height + FlaxEditor.Surface.Constants.NodeHeaderHeight);
|
||||
UpdateRectangles();
|
||||
}
|
||||
|
||||
@@ -536,13 +589,13 @@ namespace FlaxEditor.Surface.Archetypes
|
||||
if (decorator.IndexInParent < indexInParent)
|
||||
decorator.IndexInParent = indexInParent + 1; // Push elements above the node
|
||||
}
|
||||
const float footerSize = FlaxEditor.Surface.Constants.NodeFooterSize;
|
||||
const float headerSize = FlaxEditor.Surface.Constants.NodeHeaderHeight;
|
||||
|
||||
const float headerHeight = FlaxEditor.Surface.Constants.NodeHeaderHeight;
|
||||
const float closeButtonMargin = FlaxEditor.Surface.Constants.NodeCloseButtonMargin;
|
||||
const float closeButtonSize = FlaxEditor.Surface.Constants.NodeCloseButtonSize;
|
||||
_headerRect = new Rectangle(0, bounds.Y - Y, bounds.Width, headerSize);
|
||||
float closeButtonSize = FlaxEditor.Surface.Constants.NodeCloseButtonSize * 0.65f;
|
||||
_headerRect = new Rectangle(0, bounds.Y - Y, bounds.Width, headerHeight);
|
||||
_headerTextRect = _headerRect with { X = 5f, Width = Width - closeButtonSize - closeButtonMargin * 4f };
|
||||
_closeButtonRect = new Rectangle(bounds.Width - closeButtonSize - closeButtonMargin, _headerRect.Y + closeButtonMargin, closeButtonSize, closeButtonSize);
|
||||
_footerRect = new Rectangle(0, bounds.Height - footerSize, bounds.Width, footerSize);
|
||||
if (_output != null && _output.Visible)
|
||||
{
|
||||
_footerRect.Y -= ConnectionAreaHeight;
|
||||
@@ -684,6 +737,9 @@ namespace FlaxEditor.Surface.Archetypes
|
||||
base.UpdateRectangles();
|
||||
|
||||
_footerRect = Rectangle.Empty;
|
||||
const float closeButtonMargin = FlaxEditor.Surface.Constants.NodeCloseButtonMargin;
|
||||
float closeButtonSize = FlaxEditor.Surface.Constants.NodeCloseButtonSize * 0.65f;
|
||||
_closeButtonRect = new Rectangle(Bounds.Width - closeButtonSize - closeButtonMargin, _headerRect.Y + closeButtonMargin, closeButtonSize, closeButtonSize);
|
||||
if (_dragIcon != null)
|
||||
_dragIcon.Bounds = new Rectangle(_closeButtonRect.X - _closeButtonRect.Width, _closeButtonRect.Y, _closeButtonRect.Size);
|
||||
}
|
||||
|
||||
@@ -159,7 +159,7 @@ namespace FlaxEditor.Surface
|
||||
public virtual string ContentSearchText => null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the color of the footer of the node.
|
||||
/// Gets the color of the header of the node.
|
||||
/// </summary>
|
||||
protected virtual Color ArchetypeColor => GroupArchetype.Color;
|
||||
|
||||
@@ -1061,7 +1061,7 @@ namespace FlaxEditor.Surface
|
||||
const float closeButtonMargin = Constants.NodeCloseButtonMargin;
|
||||
const float closeButtonSize = Constants.NodeCloseButtonSize;
|
||||
_headerRect = new Rectangle(0, 0, Width, headerSize);
|
||||
_headerTextRect = _headerRect with { Width = _headerRect.Width - 5f, X = _headerRect.X + 5f };
|
||||
_headerTextRect = _headerRect with { X = 5f, Width = Width - closeButtonSize - closeButtonMargin * 4f };
|
||||
_closeButtonRect = new Rectangle(Width - closeButtonSize - closeButtonMargin, closeButtonMargin, closeButtonSize, closeButtonSize);
|
||||
_footerRect = new Rectangle(0, Height - footerSize, Width, footerSize);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user