Initial commit: AetherBags + KamiToolKit for FC Gitea
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
using System.Numerics;
|
||||
using Dalamud.Game.Addon.Events;
|
||||
using FFXIVClientStructs.FFXIV.Component.GUI;
|
||||
using KamiToolKit.Classes;
|
||||
using KamiToolKit.Enums;
|
||||
|
||||
namespace KamiToolKit.Nodes;
|
||||
|
||||
internal unsafe class NodeEditOverlayNode : SimpleComponentNode {
|
||||
|
||||
private readonly NineGridNode backgroundNode;
|
||||
private readonly ResizeNineGridNode bottomEditNode;
|
||||
private readonly ResizeButtonNode leftCornerEditNode;
|
||||
private readonly ResizeNineGridNode leftEditNode;
|
||||
private readonly ResizeButtonNode rightCornerEditNode;
|
||||
private readonly ResizeNineGridNode rightEditNode;
|
||||
private readonly ResizeNineGridNode topEditNode;
|
||||
|
||||
public NodeEditOverlayNode() {
|
||||
backgroundNode = new SimpleNineGridNode {
|
||||
TexturePath = "ui/uld/HUDLayout.tex",
|
||||
TextureSize = new Vector2(44.0f, 32.0f),
|
||||
TextureCoordinates = new Vector2(0.0f, 0.0f),
|
||||
TopOffset = 20,
|
||||
BottomOffset = 8,
|
||||
LeftOffset = 21,
|
||||
RightOffset = 21,
|
||||
Alpha = 0.75f,
|
||||
};
|
||||
backgroundNode.AttachNode(this);
|
||||
|
||||
rightEditNode = new ResizeNineGridNode();
|
||||
rightEditNode.AttachNode(this);
|
||||
|
||||
bottomEditNode = new ResizeNineGridNode();
|
||||
bottomEditNode.AttachNode(this);
|
||||
|
||||
leftEditNode = new ResizeNineGridNode();
|
||||
leftEditNode.AttachNode(this);
|
||||
|
||||
topEditNode = new ResizeNineGridNode();
|
||||
topEditNode.AttachNode(this);
|
||||
|
||||
rightCornerEditNode = new ResizeButtonNode(ResizeDirection.BottomRight);
|
||||
rightCornerEditNode.AttachNode(this);
|
||||
|
||||
leftCornerEditNode = new ResizeButtonNode(ResizeDirection.BottomLeft);
|
||||
leftCornerEditNode.AttachNode(this);
|
||||
}
|
||||
|
||||
public bool ShowParts {
|
||||
get;
|
||||
set {
|
||||
field = value;
|
||||
rightEditNode.IsVisible = value;
|
||||
bottomEditNode.IsVisible = value;
|
||||
leftEditNode.IsVisible = value;
|
||||
topEditNode.IsVisible = value;
|
||||
rightCornerEditNode.IsVisible = value;
|
||||
leftCornerEditNode.IsVisible = value;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnSizeChanged() {
|
||||
base.OnSizeChanged();
|
||||
|
||||
backgroundNode.Size = Size - new Vector2(24.0f, 24.0f);
|
||||
backgroundNode.Position = new Vector2(12.0f, 12.0f);
|
||||
|
||||
const float lineThickness = 4.0f;
|
||||
|
||||
leftEditNode.Size = new Vector2(Height - 32.0f, lineThickness);
|
||||
leftEditNode.Position = new Vector2(16.0f + leftEditNode.Height / 2.0f, 16.0f);
|
||||
leftEditNode.RotationDegrees = 90.0f;
|
||||
|
||||
rightEditNode.Size = new Vector2(Height - 32.0f, lineThickness);
|
||||
rightEditNode.Position = new Vector2(Width - 16.0f + rightEditNode.Height / 2.0f, 16.0f);
|
||||
rightEditNode.RotationDegrees = 90.0f;
|
||||
|
||||
topEditNode.Size = new Vector2(Width - 32.0f, lineThickness);
|
||||
topEditNode.Position = new Vector2(16.0f, 16.0f - lineThickness / 2.0f);
|
||||
|
||||
bottomEditNode.Size = new Vector2(Width - 32.0f, lineThickness);
|
||||
bottomEditNode.Position = new Vector2(16.0f, Height - 16.0f - lineThickness / 2.0f);
|
||||
|
||||
leftCornerEditNode.Size = new Vector2(24.0f, 24.0f);
|
||||
leftCornerEditNode.Position = new Vector2(16.0f - lineThickness / 4.0f, Height - 16.0f - leftCornerEditNode.Height);
|
||||
|
||||
rightCornerEditNode.Size = new Vector2(24.0f, 24.0f);
|
||||
rightCornerEditNode.Position = new Vector2(Width - 16.0f - rightCornerEditNode.Width + lineThickness / 4.0f, Height - 16.0f - rightCornerEditNode.Height);
|
||||
}
|
||||
|
||||
public Vector2 GetSizeDelta(Vector2 mouseDelta) {
|
||||
if (leftEditNode.IsHovered) return new Vector2(-mouseDelta.X, 0.0f);
|
||||
if (rightEditNode.IsHovered) return new Vector2(mouseDelta.X, 0.0f);
|
||||
if (topEditNode.IsHovered) return new Vector2(0.0f, -mouseDelta.Y);
|
||||
if (bottomEditNode.IsHovered) return new Vector2(0.0f, mouseDelta.Y);
|
||||
if (rightCornerEditNode.IsHovered) return mouseDelta;
|
||||
if (leftCornerEditNode.IsHovered) return new Vector2(-mouseDelta.X, mouseDelta.Y);
|
||||
|
||||
return Vector2.Zero;
|
||||
}
|
||||
|
||||
public Vector2 GetPositionDelta(Vector2 mouseDelta) {
|
||||
if (leftEditNode.IsHovered) return new Vector2(mouseDelta.X, 0.0f);
|
||||
if (topEditNode.IsHovered) return new Vector2(0.0f, mouseDelta.Y);
|
||||
if (leftCornerEditNode.IsHovered) return new Vector2(mouseDelta.X, 0.0f);
|
||||
|
||||
return Vector2.Zero;
|
||||
}
|
||||
|
||||
public void UpdateHover(AtkEventData* eventData) {
|
||||
rightEditNode.IsHovered = rightEditNode.CheckCollision(eventData);
|
||||
bottomEditNode.IsHovered = bottomEditNode.CheckCollision(eventData);
|
||||
leftEditNode.IsHovered = leftEditNode.CheckCollision(eventData);
|
||||
topEditNode.IsHovered = topEditNode.CheckCollision(eventData);
|
||||
rightCornerEditNode.IsHovered = rightCornerEditNode.CheckCollision(eventData);
|
||||
leftCornerEditNode.IsHovered = leftCornerEditNode.CheckCollision(eventData);
|
||||
|
||||
if (rightCornerEditNode.IsHovered) {
|
||||
bottomEditNode.IsHovered = false;
|
||||
rightEditNode.IsHovered = false;
|
||||
}
|
||||
|
||||
if (leftCornerEditNode.IsHovered) {
|
||||
leftEditNode.IsHovered = false;
|
||||
bottomEditNode.IsHovered = false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool AnyHovered() {
|
||||
if (rightEditNode.IsHovered) return true;
|
||||
if (bottomEditNode.IsHovered) return true;
|
||||
if (leftEditNode.IsHovered) return true;
|
||||
if (topEditNode.IsHovered) return true;
|
||||
if (rightCornerEditNode.IsHovered) return true;
|
||||
if (leftCornerEditNode.IsHovered) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void SetCursor() {
|
||||
if (rightEditNode.IsHovered) SetCursor(AddonCursorType.ResizeWE);
|
||||
if (bottomEditNode.IsHovered) SetCursor(AddonCursorType.ResizeNS);
|
||||
if (leftEditNode.IsHovered) SetCursor(AddonCursorType.ResizeWE);
|
||||
if (topEditNode.IsHovered) SetCursor(AddonCursorType.ResizeNS);
|
||||
if (rightCornerEditNode.IsHovered) SetCursor(AddonCursorType.ResizeNWSR);
|
||||
if (leftCornerEditNode.IsHovered) SetCursor(AddonCursorType.ResizeNESW);
|
||||
}
|
||||
|
||||
private static void SetCursor(AddonCursorType cursor)
|
||||
=> DalamudInterface.Instance.AddonEventManager.SetCursor(cursor);
|
||||
}
|
||||
Reference in New Issue
Block a user