diff --git a/Icons/Arrows/AllianceArrow.tga b/Icons/Arrows/AllianceArrow.tga index 45720e9..4f2c3cf 100644 Binary files a/Icons/Arrows/AllianceArrow.tga and b/Icons/Arrows/AllianceArrow.tga differ diff --git a/Icons/Arrows/AllianceArrow_preview.tga b/Icons/Arrows/AllianceArrow_preview.tga index 4de9860..606585c 100644 Binary files a/Icons/Arrows/AllianceArrow_preview.tga and b/Icons/Arrows/AllianceArrow_preview.tga differ diff --git a/Icons/Arrows/Arrow1.tga b/Icons/Arrows/Arrow1.tga index 9c936d9..302d15c 100644 Binary files a/Icons/Arrows/Arrow1.tga and b/Icons/Arrows/Arrow1.tga differ diff --git a/Icons/Arrows/Arrow1_preview.tga b/Icons/Arrows/Arrow1_preview.tga index 039d632..fe3e466 100644 Binary files a/Icons/Arrows/Arrow1_preview.tga and b/Icons/Arrows/Arrow1_preview.tga differ diff --git a/Icons/Arrows/Arrow2.tga b/Icons/Arrows/Arrow2.tga index ddfba4f..08b88ca 100644 Binary files a/Icons/Arrows/Arrow2.tga and b/Icons/Arrows/Arrow2.tga differ diff --git a/Icons/Arrows/Arrow2_preview.tga b/Icons/Arrows/Arrow2_preview.tga index e40365d..680a324 100644 Binary files a/Icons/Arrows/Arrow2_preview.tga and b/Icons/Arrows/Arrow2_preview.tga differ diff --git a/Icons/Arrows/Arrow3.tga b/Icons/Arrows/Arrow3.tga index 20a5596..6c22dbd 100644 Binary files a/Icons/Arrows/Arrow3.tga and b/Icons/Arrows/Arrow3.tga differ diff --git a/Icons/Arrows/Arrow3_preview.tga b/Icons/Arrows/Arrow3_preview.tga index c8694a9..45f3663 100644 Binary files a/Icons/Arrows/Arrow3_preview.tga and b/Icons/Arrows/Arrow3_preview.tga differ diff --git a/Icons/Arrows/Arrow4.tga b/Icons/Arrows/Arrow4.tga index 040a39e..0f32146 100644 Binary files a/Icons/Arrows/Arrow4.tga and b/Icons/Arrows/Arrow4.tga differ diff --git a/Icons/Arrows/Arrow4_preview.tga b/Icons/Arrows/Arrow4_preview.tga index ec8a962..d740ee0 100644 Binary files a/Icons/Arrows/Arrow4_preview.tga and b/Icons/Arrows/Arrow4_preview.tga differ diff --git a/Icons/Arrows/HordeArrow.tga b/Icons/Arrows/HordeArrow.tga index a18fc69..8cfdf5f 100644 Binary files a/Icons/Arrows/HordeArrow.tga and b/Icons/Arrows/HordeArrow.tga differ diff --git a/Icons/Arrows/HordeArrow_preview.tga b/Icons/Arrows/HordeArrow_preview.tga index 3a66f07..38e426f 100644 Binary files a/Icons/Arrows/HordeArrow_preview.tga and b/Icons/Arrows/HordeArrow_preview.tga differ diff --git a/Icons/Arrows/Minimal1.tga b/Icons/Arrows/Minimal1.tga index f6101a2..c3036dc 100644 Binary files a/Icons/Arrows/Minimal1.tga and b/Icons/Arrows/Minimal1.tga differ diff --git a/Icons/Arrows/Minimal1_preview.tga b/Icons/Arrows/Minimal1_preview.tga index 33e0f3c..d8f9649 100644 Binary files a/Icons/Arrows/Minimal1_preview.tga and b/Icons/Arrows/Minimal1_preview.tga differ diff --git a/Icons/Arrows/Minimal2.tga b/Icons/Arrows/Minimal2.tga index 5939026..4b4903f 100644 Binary files a/Icons/Arrows/Minimal2.tga and b/Icons/Arrows/Minimal2.tga differ diff --git a/Icons/Arrows/Minimal2_preview.tga b/Icons/Arrows/Minimal2_preview.tga index de21ca9..5565963 100644 Binary files a/Icons/Arrows/Minimal2_preview.tga and b/Icons/Arrows/Minimal2_preview.tga differ diff --git a/Icons/Arrows/Minimal3.tga b/Icons/Arrows/Minimal3.tga index 78c5040..7c4fe88 100644 Binary files a/Icons/Arrows/Minimal3.tga and b/Icons/Arrows/Minimal3.tga differ diff --git a/Icons/Arrows/Minimal3_preview.tga b/Icons/Arrows/Minimal3_preview.tga index 4fde893..85776d9 100644 Binary files a/Icons/Arrows/Minimal3_preview.tga and b/Icons/Arrows/Minimal3_preview.tga differ diff --git a/Modules/Arrow/QuestieArrow.lua b/Modules/Arrow/QuestieArrow.lua index 7f886b3..efe0d3a 100644 --- a/Modules/Arrow/QuestieArrow.lua +++ b/Modules/Arrow/QuestieArrow.lua @@ -221,15 +221,16 @@ local function _GetArrowStyle() mode = isSheet and "sheet" or "image", displayWidth = displayWidth, displayHeight = displayHeight, + textureCoordLeft = 0, + textureCoordRight = 1, + textureCoordTop = 0, + textureCoordBottom = 1, } end local style = _GetBundledArrowStyle(styleKey) or _GetBundledArrowStyle(ARROW_DEFAULT_STYLE) local isSheet = _IsBundledSheetStyle(styleKey) - local runtimeTexture = style.preview - if isSheet then - runtimeTexture = style.texture - end + local runtimeTexture = style.texture return { label = style.label, texturePath = QuestieLib.AddonPath .. runtimeTexture, @@ -239,6 +240,10 @@ local function _GetArrowStyle() displayWidth = isSheet and (style.displayWidth or ARROW_CELL_W) or (style.displayWidth or ARROW_IMAGE_SIZE), displayHeight = isSheet and (style.displayHeight or ARROW_CELL_H) or (style.displayHeight or ARROW_IMAGE_SIZE), visualBottomInset = style.visualBottomInset or 0, + textureCoordLeft = style.textureCoordLeft or 0, + textureCoordRight = style.textureCoordRight or 1, + textureCoordTop = style.textureCoordTop or 0, + textureCoordBottom = style.textureCoordBottom or 1, } end @@ -262,13 +267,23 @@ local function _ApplyArrowStyle() end local style = _GetArrowStyle() - local styleSignature = table.concat({ _GetArrowStyleKey(), style.texturePath or "", style.previewPath or "", style.mode or "" }, "|") + local styleSignature = table.concat({ + _GetArrowStyleKey(), + style.texturePath or "", + style.previewPath or "", + style.mode or "", + tostring(style.textureCoordLeft or 0), + tostring(style.textureCoordRight or 1), + tostring(style.textureCoordTop or 0), + tostring(style.textureCoordBottom or 1), + }, "|") local styleChanged = arrowFrame._arrowStyleSignature ~= styleSignature arrowFrame._arrowStyle = style arrowFrame._arrowStyleSignature = styleSignature if styleChanged then + arrowFrame.arrow:SetTexture(nil) arrowFrame.arrow:SetTexture(style.texturePath) arrowFrame._arrowStyleMode = nil end @@ -277,7 +292,12 @@ local function _ApplyArrowStyle() if style.mode == "sheet" then arrowFrame.arrow:SetTexCoord(0, ARROW_CELL_W / ARROW_SHEET_SIZE, 0, ARROW_CELL_H / ARROW_SHEET_SIZE) else - arrowFrame.arrow:SetTexCoord(0, 1, 0, 1) + arrowFrame.arrow:SetTexCoord( + style.textureCoordLeft or 0, + style.textureCoordRight or 1, + style.textureCoordTop or 0, + style.textureCoordBottom or 1 + ) end if arrowFrame.arrow.SetRotation then arrowFrame.arrow:SetRotation(0) @@ -816,7 +836,13 @@ EnsureArrowFrame = function() yend = yend - padY self.arrow:SetTexCoord(xstart, xend, ystart, yend) else - self.arrow:SetTexCoord(0, 1, 0, 1) + local style = self._arrowStyle or _GetArrowStyle() + self.arrow:SetTexCoord( + style.textureCoordLeft or 0, + style.textureCoordRight or 1, + style.textureCoordTop or 0, + style.textureCoordBottom or 1 + ) if self.arrow.SetRotation then self.arrow:SetRotation(angle) end diff --git a/Modules/Arrow/QuestieArrowAssets.lua b/Modules/Arrow/QuestieArrowAssets.lua index 09fc743..e42a120 100644 --- a/Modules/Arrow/QuestieArrowAssets.lua +++ b/Modules/Arrow/QuestieArrowAssets.lua @@ -10,54 +10,78 @@ QuestieArrowAssets.styles = { texture = "Icons\\Arrows\\Arrow1.tga", preview = "Icons\\Arrows\\Arrow1_preview.tga", mode = "image", - displayWidth = 77, + displayWidth = 71, displayHeight = 96, visualBottomInset = 0, + textureCoordLeft = 0.187500, + textureCoordRight = 0.812500, + textureCoordTop = 0.078125, + textureCoordBottom = 0.917969, }, ["arrow2"] = { label = "Arrow 2", texture = "Icons\\Arrows\\Arrow2.tga", preview = "Icons\\Arrows\\Arrow2_preview.tga", mode = "image", - displayWidth = 75, - displayHeight = 96, + displayWidth = 96, + displayHeight = 92, visualBottomInset = 0, + textureCoordLeft = 0.082031, + textureCoordRight = 0.917969, + textureCoordTop = 0.097656, + textureCoordBottom = 0.898438, }, ["arrow3"] = { label = "Arrow 3", texture = "Icons\\Arrows\\Arrow3.tga", preview = "Icons\\Arrows\\Arrow3_preview.tga", mode = "image", - displayWidth = 64, + displayWidth = 65, displayHeight = 96, visualBottomInset = 0, + textureCoordLeft = 0.214844, + textureCoordRight = 0.785156, + textureCoordTop = 0.078125, + textureCoordBottom = 0.914062, }, ["arrow4"] = { label = "Arrow 4", texture = "Icons\\Arrows\\Arrow4.tga", preview = "Icons\\Arrows\\Arrow4_preview.tga", mode = "image", - displayWidth = 67, + displayWidth = 68, displayHeight = 96, visualBottomInset = 0, + textureCoordLeft = 0.203125, + textureCoordRight = 0.796875, + textureCoordTop = 0.078125, + textureCoordBottom = 0.917969, }, ["hordearrow"] = { label = "Horde Arrow", texture = "Icons\\Arrows\\HordeArrow.tga", preview = "Icons\\Arrows\\HordeArrow_preview.tga", mode = "image", - displayWidth = 96, + displayWidth = 84, displayHeight = 96, visualBottomInset = 0, + textureCoordLeft = 0.207031, + textureCoordRight = 0.789062, + textureCoordTop = 0.078125, + textureCoordBottom = 0.917969, }, ["alliancearrow"] = { label = "Alliance Arrow", texture = "Icons\\Arrows\\AllianceArrow.tga", preview = "Icons\\Arrows\\AllianceArrow_preview.tga", mode = "image", - displayWidth = 96, + displayWidth = 116, displayHeight = 96, visualBottomInset = 0, + textureCoordLeft = 0.222656, + textureCoordRight = 0.773438, + textureCoordTop = 0.078125, + textureCoordBottom = 0.917969, }, ["minimal1"] = { label = "Waypoint 1", @@ -67,6 +91,10 @@ QuestieArrowAssets.styles = { displayWidth = 68, displayHeight = 96, visualBottomInset = 0, + textureCoordLeft = 0.203125, + textureCoordRight = 0.796875, + textureCoordTop = 0.078125, + textureCoordBottom = 0.917969, }, ["minimal2"] = { label = "Waypoint 2", @@ -76,6 +104,10 @@ QuestieArrowAssets.styles = { displayWidth = 74, displayHeight = 96, visualBottomInset = 0, + textureCoordLeft = 0.175781, + textureCoordRight = 0.820312, + textureCoordTop = 0.078125, + textureCoordBottom = 0.917969, }, ["minimal3"] = { label = "Waypoint 3", @@ -85,6 +117,10 @@ QuestieArrowAssets.styles = { displayWidth = 83, displayHeight = 96, visualBottomInset = 0, + textureCoordLeft = 0.132812, + textureCoordRight = 0.863281, + textureCoordTop = 0.078125, + textureCoordBottom = 0.917969, }, ["arrowold"] = { label = "Arrow Old", @@ -94,6 +130,10 @@ QuestieArrowAssets.styles = { displayWidth = 56, displayHeight = 42, visualBottomInset = 0, + textureCoordLeft = 0.001953, + textureCoordRight = 0.982422, + textureCoordTop = 0.005859, + textureCoordBottom = 0.984375, }, } diff --git a/docs/changelog.html b/docs/changelog.html index ddb2926..546010f 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -179,11 +179,11 @@

[v1.6.3] — Arrow Redesign, Minimap Pin Drift Fix (Live API + Corrected Pixel Math), Sunstrider Isle Arrow Distance, Map Pins, Tooltip Schema Fixes, QuestData String Safety

-
  • [Fix — Arrow Runtime Texture Fallback] Bundled image arrows now use the generated preview texture path at runtime as the live render source, while the raw source TGA remains available for packaging and regeneration. This keeps image arrows stable even when the client behaves oddly with a specific source TGA, while the sheet arrow stays isolated to arrowold.
  • +
  • [Fix — Arrow Runtime Texture Fallback] Bundled image arrows now use the generated runtime TGA as the live render source, while the preview TGA stays dedicated to the dropdown swatch. This keeps image arrows stable even when the client behaves oddly with a specific source file, while the sheet arrow stays isolated to arrowold.
  • +
  • [Fix — Arrow2 Orientation] Rotated Arrow2 180 degrees so the pointed tip is the top-facing tip of the asset instead of the base. The runtime TGA and its preview stay in sync so the dropdown thumbnail and in-game arrow match exactly.
  • [Fix — Minimap Pin Drift: Live View-Radius API + Corrected Pixel Math] Resolved the long-running minimap pin drift bug where quest pins appeared to "follow" the player or jump on every frame. Pins now stay anchored to their world positions across all minimap zoom levels (0-5+) and across both Stock UI and ElvUI.