HUDManager/HUD Manager/GameFunctions.cs

77 lines
2.9 KiB
C#

using System;
using System.Runtime.InteropServices;
using FFXIVClientStructs.FFXIV.Component.GUI;
namespace HUD_Manager {
public class GameFunctions {
// private delegate IntPtr GetBaseUiObjectDelegate();
private delegate void SetPositionDelegate(IntPtr windowBase, short x, short y);
private delegate void SetAlphaDelegate(IntPtr windowBase, byte alpha);
private delegate byte UpdateAddonPositionDelegate(IntPtr raptureAtkUnitManager, IntPtr addon, byte clicked);
// private readonly GetBaseUiObjectDelegate _getBaseUiObject;
private readonly SetPositionDelegate _setPosition;
private readonly SetAlphaDelegate _setAlpha;
private readonly UpdateAddonPositionDelegate _updateAddonPosition;
private Plugin Plugin { get; }
public GameFunctions(Plugin plugin) {
this.Plugin = plugin;
var setPositionPtr = this.Plugin.SigScanner.ScanText("4C 8B 89 ?? ?? ?? ?? 41 0F BF C0");
var setAlphaPtr = this.Plugin.SigScanner.ScanText("F6 81 ?? ?? ?? ?? ?? 88 91 ?? ?? ?? ??");
var updatePositionPtr = this.Plugin.SigScanner.ScanText("E8 ?? ?? ?? ?? 48 8B 8B ?? ?? ?? ?? 33 D2 48 8B 01 FF 90 ?? ?? ?? ??");
// var baseUiPtr = this.Plugin.Interface.TargetModuleScanner.ScanText("E8 ?? ?? ?? ?? 0F BF D5");
this._setPosition = Marshal.GetDelegateForFunctionPointer<SetPositionDelegate>(setPositionPtr);
this._setAlpha = Marshal.GetDelegateForFunctionPointer<SetAlphaDelegate>(setAlphaPtr);
this._updateAddonPosition = Marshal.GetDelegateForFunctionPointer<UpdateAddonPositionDelegate>(updatePositionPtr);
}
public void SetAddonPosition(string uiName, short x, short y) {
var addon = this.Plugin.GameGui.GetAddonByName(uiName, 1);
if (addon == IntPtr.Zero) {
return;
}
var baseUi = this.Plugin.GameGui.GetUIModule();
var manager = Marshal.ReadIntPtr(baseUi + 0x20);
this._updateAddonPosition(
manager,
addon,
1
);
this._setPosition(addon, x, y);
this._updateAddonPosition(
manager,
addon,
0
);
}
public unsafe Vector2<short>? GetAddonPosition(string uiName) {
var addon = this.Plugin.GameGui.GetAddonByName(uiName, 1);
if (addon == IntPtr.Zero) {
return null;
}
var unit = (AtkUnitBase*) addon;
return new Vector2<short>(unit->X, unit->Y);
}
public void SetAddonAlpha(string name, byte alpha) {
var addon = this.Plugin.GameGui.GetAddonByName(name, 1);
if (addon == IntPtr.Zero) {
return;
}
this._setAlpha(addon, alpha);
}
}
}