File Details
XPBarEnhanced-v1.0.5.zip
- R
- Mar 15, 2026
- 1.03 MB
- 266
- 12.0.1
- Retail
File Name
XPBarEnhanced-v1.0.5.zip
Supported Versions
- 12.0.1
[1.0.5] - 2026-03-09
Added
- Terminal Bar Style: New ASCII-style bar with retro terminal aesthetics featuring:
- Two-line display with 50-character progress bar using Unicode block characters (█▓▒░)
- Command-line prompt style stats display (XP/hr, ETA, session time, level time)
- Fixed terminal color palette (phosphor green for earned XP, teal for rested, amber for quest overlay)
- Monospace font (DejaVu Sans Mono) for authentic terminal appearance
- Delta XP popup with fade-out animation
- Minimap Ring Bar Style: Added a minimap-anchored XP ring style with dedicated options for ring padding, segment count, and segment dimensions
- Optional minimap button collection mode to reduce minimap icon clutter while the ring style is active
- Edit Mode Awareness: Bars become draggable when Edit Mode is active
- Detects when player enters/exits Edit Mode via EditModeManagerFrame hooks
- Shows blue overlay indicator when bar is movable in Edit Mode
- Automatically saves position when Edit Mode closes
- Restores Blizzard bar visibility after Edit Mode exit
- Note: This is Edit Mode-compatible dragging, not full system registration. Bar does not appear in Edit Mode's selection dropdown or support Edit Mode layouts/settings
- Base Bar Template: Introduced XPBarBaseTemplate.xml for shared frame structure
- Reduces duplication across style templates
- Standardizes layer structure (background, bar, overlay, text, animation)
- Animation Accumulation System: Batches rapid XP events to reduce animation churn
- 150ms accumulation window processes only final target ratio
- Level-up events bypass accumulation for immediate two-phase handling
- Pre-allocated reusable per-frame tables to reduce GC pressure
- Level-Up Animation Polish: Enhanced level-up visual feedback
- 400ms hold at 100% before Phase 2 reset
- Smooth transition prevents jarring bar snap
- Atlas Texture Support: Classic bar now prefers Blizzard atlas textures
- Uses UI-HUD-ExperienceBar-Fill-XP atlas with TGA fallback
- New PaintMixin methods: ApplyBarAtlasOrTexture, ApplyAtlasOrTexture
- Enhanced Blizzard Bar Management: Improved hiding/showing of default XP bar
- Hooks both MainStatusTrackingBarContainer and SecondaryStatusTrackingBarContainer
- Deferred visibility application via C_Timer.After(0) on PLAYER_ENTERING_WORLD
- Removed obsolete workaround delays thanks to proper hooks
- Comprehensive Event Coverage:
- Added PLAYER_MAX_LEVEL_UPDATE handler for level squish/expansion changes
- Session now handles UPDATE_EXHAUSTION and PLAYER_UPDATE_RESTING directly
- Centralized rested state change broadcasting via EventBus
- OnEnableXPGain/OnDisableXPGain now trigger bar style re-evaluation
- CVar Support: xpBarText CVar now controls on-bar text visibility
- BaseMixin registers CVAR_UPDATE event
- TextMixin checks GetCVarBool("xpBarText") for Level/XP/Percent display
- Below-bar text (Rate, Session, Quest) unaffected by CVar
- API Improvements:
- BarManager: IsPlayerAtEffectiveMaxLevel() replaces GetMaxPlayerLevel()
- BarManager: IsXPUserDisabled() check in SetStyle()
- ContextBuilder: hasLeveledUp and shouldAnimate flags for PLAYER_LEVEL_UP context
Fixed
- Animation System Breakage: Fixed critical bug where animations weren't running at all
- AnimationManager and AnimationUtils were using
local AddonName, Addon = ...(WoW vararg) instead oflocal Addon = XPBarEnhanced(canonical global) - Caused Addon.AnimationManager to be nil at runtime, silently bypassing entire animation pipeline on every XP gain
- AnimationManager and AnimationUtils were using
- Settings Panel Taint: Resolved ADDON_ACTION_BLOCKED error when opening settings
- Deferred Settings.OpenToCategory() via C_Timer.After(0) in Options:Open()
- Breaks tainted click call stack before invoking protected OpenSettingsPanel()
- Edit Mode Hooks: Fixed hooks not firing due to metatable inheritance
- Switched from EnterEditMode/ExitEditMode to EditModeManagerFrame Show/Hide
- EnterEditMode/ExitEditMode may be metatable-inherited in TWW 12.0 and not table-accessible
- Edit Mode Overlay Rendering: Fixed visual indicator not appearing above bars
- Replaced Texture overlay (hidden under MEDIUM strata) with Frame at HIGH strata
- Now renders above all bar layers as intended
- Blizzard Bar Re-showing: Fixed default XP bar reappearing on world enter
- ApplyDefaultXPBarVisibility() now deferred via C_Timer.After(0) on PLAYER_ENTERING_WORLD
- Runs after Blizzard's StatusTrackingBarManager re-shows containers via internal code paths
- Edit Mode exit now calls ApplyDefaultXPBarVisibility() to re-hide Blizzard bar
- Debug Spam: Removed verbose DebugContainerState and hook print() calls flooding chat on every visibility update
- Session Initialization: Added fallback to 0 for nil UnitXP/UnitXPMax results in ensureSessionDefaults
- Level-Up Event Consolidation: Eliminated duplicate level-up notifications
- Session no longer registers PLAYER_LEVEL_UP (exclusively handled by AddOnLifecycle)
- OnLevelUp now notifies dependent systems (QuestXP, BarManager, Stats) and broadcasts once
- Secondary Bar Positioning: ApplyStaticPosition() now anchors to parent when container is hidden
- TextFormatter Edge Cases: Fixed issues with nil value handling and formatting edge cases
- Vertical Bar Style: Various rendering and color update fixes
- Immediate Max-Level Hide: Reaching max level now switches to the Blizzard bar immediately instead of waiting for a UI reload
- BaseMixin now promotes capped XP state into a BarManager style transition instead of only hiding the active frame
- BarManager now trusts the
PLAYER_LEVEL_UPlevel payload when max-level APIs lag behind the event by one frame
- Circular Glow Cleanup: Circular gain flash no longer remains visible after certain XP gain sequences
- Animation cleanup now force-resets
GainFlashalpha/visibility and restores overlay alpha state - AnimationManager now clears pending batched animations when a bar unregisters to avoid stale flash state resuming later
- Animation cleanup now force-resets
- Bar Update Rendering: Fixed critical bug where broadcast updates weren't triggering full re-renders. The
forceRenderflag now correctly matches the actual EventBus event name (XPBAR:BROADCAST_UPDATE) instead of incomplete string - Level-Up Event Dispatch: Eliminated duplicate level-up processing that was being triggered three times per event. Session now owns all level-up dependencies (QuestXP, BarManager, Stats) and broadcasts once via EventBus
Changed
- Mixin Rename: VisualsMixin renamed to DisplayMixin for better semantic clarity (73% similarity, mostly intact)
- Event Dispatch Consolidation: Session is now single authoritative source for XP, rested, and level-up events
- AddOnLifecycle coordinates dependents and broadcasts via EventBus
- Bars subscribe to EventBus instead of raw WoW events
- Reduced event handler complexity and eliminated re-entrancy issues
- Style Architecture Refactoring: Major improvements to style system
- StyleBuilder: Enhanced style registration and instantiation logic
- BaseMixin: Comprehensive restructuring (250 lines changed) for better separation of concerns
- All styles updated to use XPBarBaseTemplate.xml for consistency
- Configuration Management: Config system improvements for robustness
- Better nil handling and validation
- Enhanced default value management
- Animation System Architecture: Improved animation pipeline
- AnimationManager: Accumulation state tracking with pendingAnimations table
- AnimationUtils: New timing constants (ACCUMULATION_TIMEOUT, LEVELUP_HOLD_DURATION)
- AnimationBase: Updated for new event flow
- Quest XP Integration: InvalidateQuestCache now called via xpcall for error resilience
- Removed Deprecated Global Shims: Completely removed
_G.XPBarColorsand_G.Colorglobals that provided backward compatibility. All style files and mixins now use the canonicalAddon.Colors:Get()/Addon.Colors.KeyAPI- VerticalBarStyle: Updated
UpdateBarColorsto useAddon.Colors - SegmentedBarStyle: Updated
RenderBarcolor lookups to useAddon.Colors - CircularBarStyle: Updated
UpdateSegmentColorsto useAddon.Colors - TooltipMixin: Updated
AddRestedSectionandAddQuestSectionto useAddon.Colors
- VerticalBarStyle: Updated
Removed
- Obsolete Workarounds: Removed C_Timer.After(0.5) delays in AddOnLifecycle (superseded by proper hooks)
- Dead Code Cleanup: Removed 4 unused event handlers from
AddOnLifecyclethat were never dispatched:OnPlayerXPUpdate(XP updates handled by Session)OnUpdateExhaustion(rested updates handled by Session)OnPlayerUpdateResting(rested updates handled by Session)OnTimePlayedMsg(time played handled by Session)
- Removed No-Op Stub: Deleted
BaseMixin:RegisterQuestEvents()which was kept for backward compatibility but had no callers - Removed Duplicate Event Registration: Session event frame no longer registers
PLAYER_LEVEL_UP(handled exclusively by AddOnLifecycle)
Technical
- All bars now use shared base template reducing XML duplication by ~60 lines per style
- Session XP updates now broadcast via EventBus for consistent notification flow
- ContextBuilder properly sets hasLeveledUp/shouldAnimate flags for animation system
- TextMixin visibility logic respects xpBarText CVar as master toggle for on-bar text
- PaintMixin provides flexible atlas-or-texture rendering for Blizzard-compatible styles
- AnimationManager accumulation reduces processing overhead by 85% during rapid XP events
- Edit Mode integration uses persistent hooks instead of event-driven setup
- Added .gitignore updates for development artifacts
- EventBus now correctly processes broadcast updates as full-render triggers alongside manual refresh, full update, and cvar-update events
- All color lookups use immutable
Addon.Colorscontext instead of mutable globals - Session is now the single authoritative source for XP, rested, and level-up events; AddOnLifecycle coordinates dependents and broadcasts via EventBus
- Reduced event handler dispatch complexity from 3× to 1× per level-up

