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, then tightened the release filters so handoff notes, local dev settings, and other workspace-only artifacts stay out of the exported release archive.Arrow1 through Arrow4) plus one legacy sheet arrow (arrowold). The old default arrow.tga cache path was retired in favor of the new image-specific asset names, and a regression test now asserts that only arrowold remains a bundled sprite sheet.
+ Arrow1 through Arrow4) plus one legacy sheet arrow (arrowold). The old default arrow.tga cache path was retired in favor of the new image-specific asset names, and the generator now keeps sheet-mode detection isolated so only arrowold or an explicitly custom sheet can enter the sprite-sheet path.
Icons\\Arrows, with matching generated preview TGAs so the dropdown can show a visible swatch for each style.arrowold and explicitly custom sheet uploads only.Tests\\QuestieArrowAssets_spec.lua now checks the manifest labels, texture paths, sheet guard, and folder contents so a future asset rename cannot silently reintroduce sheet mode for every style.Icons\\Arrows\\*_preview.tga files so users can see the artwork at a glance instead of guessing from the name.arrowold.arrowold.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.The Arrow tab now ships with `Arrow1`-`Arrow4` as bundled image styles, keeps `arrowold` as the only sprite sheet, and lets users detach, lock, reattach, and preview custom arrow textures from `Icons/Arrows` without touching core files.
+The Arrow tab now ships with `Arrow1`-`Arrow4` as bundled image styles, keeps `arrowold` as the only sprite sheet, and lets users detach, lock, reattach, and preview custom arrow textures from `Icons/Arrows` without touching core files. Under the hood, the addon now distinguishes plain image TGAs from sprite sheets by texture format and alpha bounds, so only true sheets go through sheet-cell UV logic.
arrowold or an explicitly custom sheet upload.