Files
AetherBags/KamiToolKit/NodeBase/NodeBase.NativeProperties.cs
T
KnackAtNite 8db4ce6094
Debug Build and Test / Build against Latest Dalamud (push) Has been cancelled
Debug Build and Test / Build against Staging Dalamud (push) Has been cancelled
Initial commit: AetherBags + KamiToolKit for FC Gitea
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 14:46:31 -05:00

245 lines
6.5 KiB
C#

using System;
using Dalamud.Interface;
using FFXIVClientStructs.FFXIV.Common.Math;
using FFXIVClientStructs.FFXIV.Component.GUI;
using KamiToolKit.Enums;
using Bounds = KamiToolKit.Classes.Bounds;
using Vector2 = System.Numerics.Vector2;
using Vector3 = System.Numerics.Vector3;
using Vector4 = System.Numerics.Vector4;
namespace KamiToolKit;
public abstract unsafe partial class NodeBase {
public virtual float X {
get => ResNode->GetXFloat();
set => ResNode->SetXFloat(value);
}
public virtual float Y {
get => ResNode->GetYFloat();
set => ResNode->SetYFloat(value);
}
public virtual Vector2 Position {
get => ResNode->Position;
set => ResNode->Position = value;
}
public virtual float ScreenX {
get => ResNode->ScreenX;
set => ResNode->ScreenX = value;
}
public virtual float ScreenY {
get => ResNode->ScreenY;
set => ResNode->ScreenY = value;
}
public virtual Vector2 ScreenPosition
=> ResNode->ScreenPosition;
public virtual float Width {
get => ResNode->GetWidth();
set {
ResNode->SetWidth((ushort)value);
OnSizeChanged();
}
}
public virtual float Height {
get => ResNode->GetHeight();
set {
ResNode->SetHeight((ushort)value);
OnSizeChanged();
}
}
public virtual Vector2 Size {
get => ResNode->Size;
set {
ResNode->SetWidth((ushort)value.X);
ResNode->SetHeight((ushort)value.Y);
OnSizeChanged();
}
}
public Bounds Bounds
=> ResNode->Bounds;
public Vector2 Center
=> ResNode->Center;
public virtual float ScaleX {
get => ResNode->GetScaleX();
set => ResNode->SetScaleX(value);
}
public virtual float ScaleY {
get => ResNode->GetScaleY();
set => ResNode->SetScaleY(value);
}
public virtual Vector2 Scale {
get => ResNode->Scale;
set => ResNode->Scale = value;
}
public virtual float Rotation {
get => ResNode->GetRotation();
set => ResNode->SetRotation(value);
}
public virtual float RotationDegrees {
get => ResNode->RotationDegrees;
set => ResNode->RotationDegrees = value;
}
public virtual float OriginX {
get => ResNode->OriginX;
set => ResNode->OriginX = value;
}
public virtual float OriginY {
get => ResNode->OriginY;
set => ResNode->OriginY = value;
}
public virtual Vector2 Origin {
get => ResNode->Origin;
set => ResNode->Origin = value;
}
private bool? lastIsVisible;
public virtual bool IsVisible {
get => ResNode->Visible;
set {
ResNode->Visible = value;
if (lastIsVisible is null || lastIsVisible != value) {
OnVisibilityToggled?.Invoke(value);
lastIsVisible = value;
}
}
}
private Action<bool>? OnVisibilityToggled { get; set; }
public NodeFlags NodeFlags {
get => ResNode->NodeFlags;
set => ResNode->NodeFlags = value;
}
public virtual Vector4 Color {
get => ResNode->ColorVector;
set => ResNode->ColorVector = value;
}
public virtual ColorHelpers.HsvaColor ColorHsva {
get => ResNode->ColorHsva;
set => ResNode->ColorHsva = value;
}
public virtual float Alpha {
get => ResNode->Color.A;
set => ResNode->SetAlpha((byte)(value * 255.0f));
}
public virtual Vector3 AddColor {
get => ResNode->AddColor;
set => ResNode->AddColor = value;
}
public virtual ColorHelpers.HsvaColor AddColorHsva {
get => ResNode->AddColorHsva;
set => ResNode->AddColorHsva = value;
}
public virtual Vector3 MultiplyColor {
get => ResNode->MultiplyColor;
set => ResNode->MultiplyColor = value;
}
public virtual ColorHelpers.HsvaColor MultiplyColorHsva {
get => ResNode->MultiplyColorHsva;
set => ResNode->MultiplyColorHsva = value;
}
public uint NodeId {
get => ResNode->NodeId;
set => ResNode->NodeId = value;
}
public virtual DrawFlags DrawFlags {
get => (DrawFlags) ResNode->DrawFlags;
set => ResNode->DrawFlags = (uint) value & 0b1111_1111_1111_1100_0000_0011_1111_1111 |
ResNode->DrawFlags & 0b0000_0000_0000_0011_1111_1100_0000_0000;
}
public virtual int ClipCount {
get => (int)((ResNode->DrawFlags & 0b0000_0000_0000_0011_1111_1100_0000_0000) >> 10);
set => ResNode->DrawFlags = (uint)(value << 10 & 0b0000_0000_0000_0011_1111_1100_0000_0000)
| ResNode->DrawFlags & 0b1111_1111_1111_1100_0000_0011_1111_1111;
}
public void AddDrawFlags(params DrawFlags[] flags) {
foreach (var flag in flags) {
DrawFlags |= flag;
}
}
public void RemoveDrawFlags(params DrawFlags[] flags) {
foreach (var flag in flags) {
DrawFlags &= ~flag;
}
}
public int Priority {
get => ResNode->GetPriority();
set => ResNode->SetPriority((ushort)value);
}
protected virtual NodeType NodeType {
get => ResNode->GetNodeType();
set => ResNode->Type = value;
}
public virtual int ChildCount
=> ResNode->ChildCount;
protected virtual void OnSizeChanged() { }
public void AddNodeFlags(params NodeFlags[] flags) {
foreach (var flag in flags) {
NodeFlags |= flag;
}
}
public void RemoveNodeFlags(params NodeFlags[] flags) {
foreach (var flag in flags) {
NodeFlags &= ~flag;
}
}
public void MarkDirty() {
foreach (var child in GetAllChildren(this)) {
child.ResNode->AddDrawFlag( [ DrawFlags.IsDirty ] );
}
ResNode->AddDrawFlag([ DrawFlags.IsDirty ] );
}
public bool CheckCollision(short x, short y, bool inclusive = true)
=> ResNode->CheckCollision(x, y, inclusive);
public bool CheckCollision(Vector2 position, bool inclusive = true)
=> ResNode->CheckCollision((short) position.X, (short) position.Y, inclusive);
public bool CheckCollision(AtkEventData* eventData, bool inclusive = true)
=> ResNode->CheckCollision(eventData, inclusive);
public Matrix2x2 Transform {
get => ResNode->Transform;
set => ResNode->Transform = value;
}
}