fix: update flytext API for damage type icon feature

This commit is contained in:
Liam 2023-01-10 06:25:00 -05:00
parent 684143c65b
commit 4a74c19b6f
2 changed files with 22 additions and 10 deletions

View file

@ -49,6 +49,7 @@ public sealed class FlyTextGui : IDisposable, IServiceType
/// <param name="text2">Text2 passed to the native flytext function.</param> /// <param name="text2">Text2 passed to the native flytext function.</param>
/// <param name="color">Color passed to the native flytext function. Changes flytext color.</param> /// <param name="color">Color passed to the native flytext function. Changes flytext color.</param>
/// <param name="icon">Icon ID passed to the native flytext function. Only displays with select FlyTextKind.</param> /// <param name="icon">Icon ID passed to the native flytext function. Only displays with select FlyTextKind.</param>
/// <param name="damageTypeIcon">Damage Type Icon ID passed to the native flytext function. Displayed next to damage values to denote damage type.</param>
/// <param name="yOffset">The vertical offset to place the flytext at. 0 is default. Negative values result /// <param name="yOffset">The vertical offset to place the flytext at. 0 is default. Negative values result
/// in text appearing higher on the screen. This does not change where the element begins to fade.</param> /// in text appearing higher on the screen. This does not change where the element begins to fade.</param>
/// <param name="handled">Whether this flytext has been handled. If a subscriber sets this to true, the FlyText will not appear.</param> /// <param name="handled">Whether this flytext has been handled. If a subscriber sets this to true, the FlyText will not appear.</param>
@ -60,6 +61,7 @@ public sealed class FlyTextGui : IDisposable, IServiceType
ref SeString text2, ref SeString text2,
ref uint color, ref uint color,
ref uint icon, ref uint icon,
ref uint damageTypeIcon,
ref float yOffset, ref float yOffset,
ref bool handled); ref bool handled);
@ -74,6 +76,7 @@ public sealed class FlyTextGui : IDisposable, IServiceType
IntPtr text2, IntPtr text2,
uint color, uint color,
uint icon, uint icon,
uint damageTypeIcon,
IntPtr text1, IntPtr text1,
float yOffset); float yOffset);
@ -120,7 +123,8 @@ public sealed class FlyTextGui : IDisposable, IServiceType
/// <param name="text2">Text2 passed to the native flytext function.</param> /// <param name="text2">Text2 passed to the native flytext function.</param>
/// <param name="color">Color passed to the native flytext function. Changes flytext color.</param> /// <param name="color">Color passed to the native flytext function. Changes flytext color.</param>
/// <param name="icon">Icon ID passed to the native flytext function. Only displays with select FlyTextKind.</param> /// <param name="icon">Icon ID passed to the native flytext function. Only displays with select FlyTextKind.</param>
public unsafe void AddFlyText(FlyTextKind kind, uint actorIndex, uint val1, uint val2, SeString text1, SeString text2, uint color, uint icon) /// <param name="damageTypeIcon">Damage Type Icon ID passed to the native flytext function. Displayed next to damage values to denote damage type.</param>
public unsafe void AddFlyText(FlyTextKind kind, uint actorIndex, uint val1, uint val2, SeString text1, SeString text2, uint color, uint icon, uint damageTypeIcon)
{ {
// Known valid flytext region within the atk arrays // Known valid flytext region within the atk arrays
var numIndex = 28; var numIndex = 28;
@ -134,7 +138,7 @@ public sealed class FlyTextGui : IDisposable, IServiceType
return; return;
var ui = (FFXIVClientStructs.FFXIV.Client.UI.UIModule*)gameGui.GetUIModule(); var ui = (FFXIVClientStructs.FFXIV.Client.UI.UIModule*)gameGui.GetUIModule();
var flytext = gameGui.GetAddonByName("_FlyText", 1); var flytext = gameGui.GetAddonByName("_FlyText");
if (ui == null || flytext == IntPtr.Zero) if (ui == null || flytext == IntPtr.Zero)
return; return;
@ -149,11 +153,12 @@ public sealed class FlyTextGui : IDisposable, IServiceType
numArray->IntArray[numOffset + 1] = (int)kind; numArray->IntArray[numOffset + 1] = (int)kind;
numArray->IntArray[numOffset + 2] = unchecked((int)val1); numArray->IntArray[numOffset + 2] = unchecked((int)val1);
numArray->IntArray[numOffset + 3] = unchecked((int)val2); numArray->IntArray[numOffset + 3] = unchecked((int)val2);
numArray->IntArray[numOffset + 4] = 5; // Unknown numArray->IntArray[numOffset + 4] = unchecked((int)damageTypeIcon); // Icons for damage type
numArray->IntArray[numOffset + 5] = unchecked((int)color); numArray->IntArray[numOffset + 5] = 5; // Unknown
numArray->IntArray[numOffset + 6] = unchecked((int)icon); numArray->IntArray[numOffset + 6] = unchecked((int)color);
numArray->IntArray[numOffset + 7] = 0; // Unknown numArray->IntArray[numOffset + 7] = unchecked((int)icon);
numArray->IntArray[numOffset + 8] = 0; // Unknown, has something to do with yOffset numArray->IntArray[numOffset + 8] = 0; // Unknown
numArray->IntArray[numOffset + 9] = 0; // Unknown, has something to do with yOffset
fixed (byte* pText1 = text1.Encode()) fixed (byte* pText1 = text1.Encode())
{ {
@ -200,6 +205,7 @@ public sealed class FlyTextGui : IDisposable, IServiceType
IntPtr text2, IntPtr text2,
uint color, uint color,
uint icon, uint icon,
uint damageTypeIcon,
IntPtr text1, IntPtr text1,
float yOffset) float yOffset)
{ {
@ -217,13 +223,14 @@ public sealed class FlyTextGui : IDisposable, IServiceType
var tmpText2 = text2 == IntPtr.Zero ? string.Empty : MemoryHelper.ReadSeStringNullTerminated(text2); var tmpText2 = text2 == IntPtr.Zero ? string.Empty : MemoryHelper.ReadSeStringNullTerminated(text2);
var tmpColor = color; var tmpColor = color;
var tmpIcon = icon; var tmpIcon = icon;
var tmpDamageTypeIcon = damageTypeIcon;
var tmpYOffset = yOffset; var tmpYOffset = yOffset;
var cmpText1 = tmpText1.ToString(); var cmpText1 = tmpText1.ToString();
var cmpText2 = tmpText2.ToString(); var cmpText2 = tmpText2.ToString();
Log.Verbose($"[FlyText] Called with addonFlyText({addonFlyText.ToInt64():X}) " + Log.Verbose($"[FlyText] Called with addonFlyText({addonFlyText.ToInt64():X}) " +
$"kind({kind}) val1({val1}) val2({val2}) " + $"kind({kind}) val1({val1}) val2({val2}) damageTypeIcon({damageTypeIcon}) " +
$"text1({text1.ToInt64():X}, \"{tmpText1}\") text2({text2.ToInt64():X}, \"{tmpText2}\") " + $"text1({text1.ToInt64():X}, \"{tmpText1}\") text2({text2.ToInt64():X}, \"{tmpText2}\") " +
$"color({color:X}) icon({icon}) yOffset({yOffset})"); $"color({color:X}) icon({icon}) yOffset({yOffset})");
Log.Verbose("[FlyText] Calling flytext events!"); Log.Verbose("[FlyText] Calling flytext events!");
@ -235,6 +242,7 @@ public sealed class FlyTextGui : IDisposable, IServiceType
ref tmpText2, ref tmpText2,
ref tmpColor, ref tmpColor,
ref tmpIcon, ref tmpIcon,
ref tmpDamageTypeIcon,
ref tmpYOffset, ref tmpYOffset,
ref handled); ref handled);
@ -262,7 +270,7 @@ public sealed class FlyTextGui : IDisposable, IServiceType
if (!dirty) if (!dirty)
{ {
Log.Verbose("[FlyText] Calling flytext with original args."); Log.Verbose("[FlyText] Calling flytext with original args.");
return this.createFlyTextHook.Original(addonFlyText, kind, val1, val2, text2, color, icon, text1, yOffset); return this.createFlyTextHook.Original(addonFlyText, kind, val1, val2, text2, color, icon, damageTypeIcon, text1, yOffset);
} }
var terminated1 = Terminate(tmpText1.Encode()); var terminated1 = Terminate(tmpText1.Encode());
@ -281,6 +289,7 @@ public sealed class FlyTextGui : IDisposable, IServiceType
pText2, pText2,
tmpColor, tmpColor,
tmpIcon, tmpIcon,
tmpDamageTypeIcon,
pText1, pText1,
tmpYOffset); tmpYOffset);

View file

@ -99,6 +99,7 @@ internal class DataWindow : Window
private string flyText1 = string.Empty; private string flyText1 = string.Empty;
private string flyText2 = string.Empty; private string flyText2 = string.Empty;
private int flyIcon; private int flyIcon;
private int flyDmgIcon;
private Vector4 flyColor = new(1, 0, 0, 1); private Vector4 flyColor = new(1, 0, 0, 1);
// ImGui fields // ImGui fields
@ -1157,6 +1158,7 @@ internal class DataWindow : Window
ImGui.InputInt("Val2", ref this.flyVal2); ImGui.InputInt("Val2", ref this.flyVal2);
ImGui.InputInt("Icon ID", ref this.flyIcon); ImGui.InputInt("Icon ID", ref this.flyIcon);
ImGui.InputInt("Damage Icon ID", ref this.flyDmgIcon);
ImGui.ColorEdit4("Color", ref this.flyColor); ImGui.ColorEdit4("Color", ref this.flyColor);
ImGui.InputInt("Actor Index", ref this.flyActor); ImGui.InputInt("Actor Index", ref this.flyActor);
var sendColor = ImGui.ColorConvertFloat4ToU32(this.flyColor); var sendColor = ImGui.ColorConvertFloat4ToU32(this.flyColor);
@ -1171,7 +1173,8 @@ internal class DataWindow : Window
this.flyText1, this.flyText1,
this.flyText2, this.flyText2,
sendColor, sendColor,
unchecked((uint)this.flyIcon)); unchecked((uint)this.flyIcon),
unchecked((uint)this.flyDmgIcon));
} }
} }