File Details
SuperSwingTimer v0.1.7
- R
- Jul 6, 2026
- 188.78 KB
- 190
- 2.5.5+1
- Classic + 1
File Name
SuperSwingTimer v0.1.7.zip
Supported Versions
- 2.5.5
- 1.15.8
v0.1.7 - 2026-07-05
WoWUnit test suite added: 9 test groups, 34 in-game unit tests via WoWUnit addon (
## OptionalDeps: WoWUnit). Tests cover constants integrity, aura parsing (both Classic + TBC API shapes),GetDebuffStackOffsetmath, Hunter Serpent Sting detection (by name + ID, caster filtering),MigrateDBchain (v1→v54), dispatch nil-guards, helpful aura parsing, and Flurry buff info — all runnable in-game with pass/fail UI. Internal functions exported onns._Testonly when WoWUnit is present — zero overhead otherwise.Expanded to 18 groups, 73 tests: Added CLEU event simulation (SWING_DAMAGE MH/OH/enemy, SWING_MISSED, DODGE path), timer state machine validation, cross-class debuff detection (Deep Wounds, Flame Shock, Mangle, Rupture, Seal of Vengeance, Sunder Armor), hunter cast spell detection, nil-stress tests, config toggle safety, Paladin seal family lookup, and buff icon tracking. Tests now assert duration, caster, and spellId values — not just existence.
GetHarmfulAuraData API shape detection fixed: The variable mapping was off-by-one for Classic 1.15.x+ / TBC Anniversary 2.5.5 UnitAura which added an
icontexture field at position 3. All 24 callers across all classes were silently returning the wrongcastervalue (a number instead of "player"), breaking everycaster == "player"debuff filter. Fixed with explicit shape detection (type(pos3) == "string"→ icon present).GetDebuffStackOffset sign inversion fixed: Was tracking
maxBarTop(bars below reference bar), should trackminBarTop(bars above reference bar). Caused buff icons to overlap debuff duration bars by ~6px. Also added visibility-bitmask cache to prevent one-frame bounce from WoW's deferred SetPoint layout.Buff icon border fixed: Was a full-face black
(0, 0, 0, 0.65)overlay covering the entire icon, causing permanent dimming. Replaced with 4 separate 1px edge strips (top/bottom/left/right) matching the existing debuff bar glow border pattern.Buff icon duration text moved above icon: Changed from
SetPoint("TOP", icon, "TOP", 0, -1)(overlapping icon top) toSetPoint("BOTTOM", icon, "TOP", 0, 2)(sits above icon with 2px gap).Buff icon gap increased: From 6px to 8px above highest debuff bar and above anchor bar.
Concussion Shot color: Changed from dark blue
(0.10, 0.15, 0.60)to grey(0.55, 0.55, 0.55)for better visibility.Serpent Sting color: Brightened from forest green
(0.05, 0.55, 0.20)to bright serpent green(0.10, 0.85, 0.15).Tests now deferred to PLAYER_ENTERING_WORLD: Test registration waits until all addons (including WoWUnit) are loaded, avoiding load-order race conditions. Added
/ssttestslash command for manual trigger. Chat-confirmed on registration.Show Advanced toggle (Phase 6): New "Show Advanced" toggle at top of panel (right side, below Minimal Mode) with descriptive label. When enabled, reveals fine-tuning controls across all sections: texture layer selectors (MH/OH, Spark, Weave, Spell Icon), spark dimensions and alpha, Indicator Glow Mode, bar background/border settings, and weave spark dimensions/alpha. Controlled by
SuperSwingTimerDB.showAdvanced(defaults false). Each advanced row tagged withisAdvanced = true— hidden automatically when toggle is off. Migration fill-in added for existing users.Per-section Reset buttons (Phase 4): Each collapsible section header (Appearance, Shaman Weave Assist, Combat & Timer Behavior, Shaman Weave Spells) now has a small red "Reset" button on the right side. Clicking resets only that section's DB keys to defaults and updates all controls (sliders, texture rows, color swatches) without affecting other sections. Reset button has hover highlighting and an
OnMouseDownhandler that prevents the click from also toggling section collapse. Reset callbacks defined after all controls exist for safe variable access.Texture preview chips (Phase 7): Browser-mode texture path rows (Spark Texture, Cast Breakpoint Spark Texture) now show a small 24×16 inline thumbnail preview of the current texture, bordered with a subtle UI-Tooltip-Border edge frame. The preview chip updates live when the texture changes. PathBox width adjusted by 20px to accommodate the chip and its border.
Keyboard navigation audit (Phase 9): Section headers now register
OnKeyDownfor Enter/Space to toggle collapse. Quick Controls tab buttons also handle Enter/Space for keyboard activation. All other controls (checkboxes via UICheckButtonTemplate, sliders via OptionsSliderTemplate, buttons via UIPanelButtonTemplate, edit boxes via InputBoxTemplate) already handle keyboard input natively through their Blizzard widget templates.setResetCallbackhelper: New method on section headers allows deferred assignment of reset callbacks after all controls are created. Reset buttons are created eagerly inCreateSectionHeaderwith anOnMouseDownconsumer to prevent collapse-toggle propagation.Minimal Mode moved to top area: The "Minimal Mode" toggle was moved from the Combat & Timer Behavior section to the top of the panel, right below the Global Scale slider. It sits on the right side with a descriptive label on the left explaining what it does ("Hide non-essential overlays for a cleaner combat view"). The rest of the panel sections shift down to accommodate it.
Tabbed Quick Controls: The Quick Controls section now has 3 tabs: Visibility (toggles only, single column), Colors (swatches only, 2-column grid), and Class (combined view for class-specific settings). Tab buttons with gold active state sit below the section header. Switching tabs preserves scroll position and collapses/expands correctly with the section header.
Search bar added: New "Search settings..." EditBox at the bottom of the /sst panel (always visible below the scroll frame). Filters all section rows in real-time — matching rows stay at full opacity, non-matching rows dim to 25% alpha. Press Escape to clear. Every toggle, slider, color swatch, dropdown, texture row, action button, and description text is searchable. Case-insensitive, matches any portion of the label.
Global Scale slider added: Master scale control (0.5x–3.0x) at the very top of
/sstpanel. Proportionally scales all bars, icons, sparks, borders, and fonts relative to their base (default) size. Individual sliders still fine-tune each dimension; the global scale multiplier applies on top. Gold label with descriptive subtitle. Implemented across 4 files with fresh-install, migration, reset-defaults, and panel-refresh wiring.OnUpdate hook infrastructure created: Replaced the fragile 9-link chain-overwriting pattern with
ns.RegisterOnUpdateHook()via newSuperSwingTimer_Hooks.lua. All 9 ClassMods chains converted to hooks — Paladin (3), Warrior (1), Shaman (1), Druid (2), Hunter (1), Rogue (1). Core render path registered as hook #1 viaCoreRenderHook. Test Bars hook inserts at position 1 for pre-render priority. TheDuplicate field OnUpdateerrors are eliminated. Each hook is now independent — a failure in one cannot break others.Config panel UX improvements — Phase 1+2: Section help texts added to all collapsible sections (Appearance, Shaman Weave Assist, Combat & Timer Behavior, Weave Families) with descriptive subtitles.
CreateSlider/CreateCompactSlidernow accept customtooltipText.CreateCycleRownow accepts custom tooltip text. 20+ sliders and cycle rows got descriptive tooltips (Bar Width, Bar Height, Cast Spark Width/Height, Spark Alpha/Width/Height, Bar Border Size, Background Alpha, Indicator Glow Mode, and all class-specific size sliders).CreateHelpButtonfunction added for future [?] help buttons on complex concepts. Quick Controls column labels updated from "Visibility"/"Key Colors" to "Visibility (show/hide bars)"/"Colors (bar/swatch tint)".Color swatch labels in Quick Controls: Swatch buttons now display text labels directly on the colored surface (e.g. "MH Color") with OUTLINE font. Labels auto-invert for readability.
Enterprise UX blueprint: Full redesign documented in AUDIT.md with 9 implementation phases based on research of WeakAuras, Details!, Plater, and Blizzard Interface Options patterns. Covers search bar, tabbed Quick Controls, section help text, per-section reset, progressive disclosure, texture previews, profile system, and keyboard navigation.
Config panel walkthrough in README: Added annotated ASCII layout diagram and section-by-section guide.
LDoc docstrings added: 20+ core public functions now documented with
--- @param/--- @return/@usage/@seeacross Constants.lua, State.lua, Weaving.lua, UI.lua, Config.lua, ClassMods.lua, and Hooks.lua. Critical engine functions (ns.GetAlignedTime, ns.GetSpellInfo, ns.HandleCLEU, ns.StartSwing, ns.ApplyParryHaste, etc.) now have full enterprise-grade documentation.Hunter bar globals fixed: 8 hunter trap/debuff bar globals (
serpentStingBarthroughfrostTrapBar) added to.luarc.jsondiagnostics globals. These are closure-local upvalues inSetupHunter()that the linter cannot trace through nested closures — same approach the old.luacheckrcused.get_errorswill clear after window reload.Deep quality audit completed:
AUDIT.mdcreated with 10-section scoring (overall 7.2/10), competitive analysis, file metrics, and checkbox-based roadmap to 10/10 covering critical fixes, UX overhaul, testing infrastructure, file splitting, and enterprise-grade documentation.Codebase conventions established: Phase 7 enterprise-grade Lua docstring standard defined in AGENTS.md and AUDIT.md — all new code and refactored files must use
--- @param/--- @returnLDoc-style comments. Module-level headers required for each file describing role and dependency order.Roadmap made actionable: AUDIT.md roadmap converted to checkbox format with 7 phases. Phase 1 items (OnUpdate chain fix, Hunter globals) marked <input disabled="disabled" type="checkbox" checked="checked" />. Phase 2 item A (Global Scale) marked <input disabled="disabled" type="checkbox" checked="checked" />.
GetCurrentTime() shims removed: 5 identical
GetCurrentTime()shims across all files replaced with directns.GetAlignedTime(). Eliminates duplicated clock-domain wrappers.GetTime/GetTimePreciseSecrawgets removed from files where they were only used by the shim.Fresh-install block replaced with DeepCopyDefaults: 155-line inline table literal replaced with
DeepCopyDefaults(ns.DB_DEFAULTS). Eliminates drift risk — adding a new default to Constants.lua now automatically applies to fresh installs.Font path constant:
ns.FONT_PATH = "Fonts\\FRIZQT__.TTF"defined in Constants.lua. 39 hardcoded FRIZQT paths replaced in ClassMods.lua.Config panel UX improvements: Comprehensive help blurb, section headers renamed ("General Behavior" → "Combat & Timer Behavior", "Weave Families" → "Shaman Weave Spells"), 7 missing tooltips added to Quick Toggles.
LDoc docstrings added: 6 core public functions (
ns.StartSwing,ns.HandleCLEU,ns.RefreshLatencyCache,ns.ApplyBarSize,ns.ApplyVisibility,ns.InitBars).CI pipeline:
.github/workflows/luac.yml— auto-runsluac -pon push/PR.QA checklist:
docs/QA.md— step-by-step manual smoke-test checklist.Migration test harness:
test_migrations.lua— 37 tests for DeepCopyDefaults correctness.DB schema: v54 (unchanged — no migration needed for these changes)
Quality gates:
luac -ppasses on all 9 files