TotemBar v0.2.5
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
-- TotemBar - core/optionslogic.lua
|
||||
-- PURE helpers for the options panel + minimap button (no WoW API), so the
|
||||
-- fiddly bits (orbit math, slider clamping, the macro contract) are
|
||||
-- offline-testable under real Lua 5.0. The UI (minimap.lua / options.lua)
|
||||
-- calls these.
|
||||
|
||||
TotemBar = TotemBar or {}
|
||||
|
||||
-- Orbit offset (x, y) for a minimap button at angleDeg on a circle of the
|
||||
-- given radius. 0deg -> (radius,0); 90 -> (0,radius); 180 -> (-radius,0).
|
||||
function TotemBar.angleToOffset(angleDeg, radius)
|
||||
local rad = math.rad(angleDeg)
|
||||
return math.cos(rad) * radius, math.sin(rad) * radius
|
||||
end
|
||||
|
||||
-- Clamp v into [minVal, maxVal].
|
||||
function TotemBar.clampValue(v, minVal, maxVal)
|
||||
if v < minVal then
|
||||
return minVal
|
||||
end
|
||||
if v > maxVal then
|
||||
return maxVal
|
||||
end
|
||||
return v
|
||||
end
|
||||
|
||||
-- The fixed spec for the "Totems" convenience macro: name, body, and a BARE
|
||||
-- icon file name (no Interface\Icons\ prefix, no extension - TurtleWoW's
|
||||
-- CreateMacro/EditMacro prepend the path themselves).
|
||||
function TotemBar.macroSpec()
|
||||
return "Totems", "/script TotemBar.recallAndCastAll()", "Spell_Nature_TremorTotem"
|
||||
end
|
||||
|
||||
-- Bar-layout grid data + math (feature: selectable 1x6 / 2x3 / 3x2 bar
|
||||
-- arrangement, see ui.lua's ApplyBarLayout). Pure so the button positions
|
||||
-- and pixel-size math can be pinned offline instead of eyeballed in-game.
|
||||
|
||||
-- Explicit per-layout button positions {col, row} (0-based), button order:
|
||||
-- Fire, Earth, Water, Air, Recall, DropSet. "2x3" groups the four element
|
||||
-- totems as a 2x2 block in the first two columns (user request); "3x2"
|
||||
-- groups them as the top 2x2 block with the utility row below.
|
||||
-- DropSet is deliberately the LAST slot in every layout: when it is hidden
|
||||
-- (TotemBarDB.showDropSetButton = false) the remaining five buttons keep
|
||||
-- their exact slots - the element 2x2 block and Recall never move, and no
|
||||
-- second positions table is needed. The multi-row layouts then leave the
|
||||
-- trailing grid cell empty, which is invisible (transparent backdrop) and
|
||||
-- still usable as drag surface.
|
||||
TotemBar.BAR_LAYOUT_POSITIONS = {
|
||||
["1x6"] = { {0,0},{1,0},{2,0},{3,0},{4,0},{5,0} },
|
||||
["2x3"] = { {0,0},{1,0},{0,1},{1,1},{2,0},{2,1} },
|
||||
["3x2"] = { {0,0},{1,0},{0,1},{1,1},{0,2},{1,2} },
|
||||
}
|
||||
|
||||
-- Pixel dimensions of the bar frame for a grid of `count` buttons arranged
|
||||
-- in at most `cols` columns of `size`x`size` buttons with `gap` spacing.
|
||||
-- `rowPitchExtra` widens the vertical pitch between rows (multi-row layouts:
|
||||
-- room for the timer text hanging below each row plus the next row's ring
|
||||
-- overhang - see ui.lua's BUTTON_GAP comment); pass 0 for a single row.
|
||||
-- height = top gap + rows*size + (rows-1)*(gap+extra) + bottom gap.
|
||||
-- `cols` is capped at `count` because a grid can never be wider than it has
|
||||
-- buttons: with the DropSet button hidden, "1x6" is a row of FIVE and the
|
||||
-- frame must shrink with it instead of trailing dead space. The multi-row
|
||||
-- layouts still need all of their columns at five buttons, so their size is
|
||||
-- unchanged (they just leave the last grid cell empty).
|
||||
function TotemBar.barDimensions(count, cols, size, gap, rowPitchExtra)
|
||||
if cols > count then
|
||||
cols = count
|
||||
end
|
||||
local rows = math.ceil(count / cols)
|
||||
local width = cols * (size + gap) + gap
|
||||
local height = gap + rows * size + (rows - 1) * (gap + rowPitchExtra) + gap
|
||||
return width, height, rows
|
||||
end
|
||||
Reference in New Issue
Block a user