promotional bannermobile promotional banner

HealerCursor

A lightweight addon to show healing cooldowns on your mouse cursor

HealerCursor

Cursor-attached spell readiness icons. Spells you can press right now appear next to your pointer; spells on cooldown get out of the way.

The point is micro-decisions: your eyes are already on your cursor when you are healing, so that is where "what can I press" should live. Your Cooldown Manager stays where it is and keeps showing you the actual timers.

Using it

/hc opens the options. Or Game Menu → Options → AddOns → HealerCursor.

  • Import from Cooldown Manager copies whatever your Blizzard Cooldown Manager is tracking into the list. One-time copy, edit it afterwards.
  • Or drag a spell from your spellbook / action bars onto the drop box.
  • Or type a spell name or ID.

Spell lists are saved per specialization. Everything else (size, position, opacity, behaviour) is shared across all specs.

/hc toggle turns the display on and off without opening anything.

/hc status prints exactly why the display is or is not on screen right now: every visibility gate, and every tracked spell's live ready / on-cooldown / not-known state. Start here if something looks wrong.

Text

The Text tab controls the charge count and the cooldown countdown separately: font, size, outline, colour, and a 3x3 anchor grid with X/Y offsets. Fonts come from LibSharedMedia when any addon on your UI has loaded it (so you get the same list as everything else); without it you get the four that ship with the game. It is never embedded and never required.

Cooldown text is only visible in Dim mode. In Hide mode the icon is off screen for the entire cooldown, so there is nothing to count down on. It is drawn by the game engine rather than a Lua ticker, so it costs no frame time -- which is also why OmniCC is kept off these icons, since it would replace the countdown with its own and silently ignore every setting here.

Why it is light

The whole reason this addon exists is that the alternatives cost more frame time than the feature is worth. Two decisions do almost all of that work:

Cooldown state is never polled. The game already tells us when a cooldown, charge count, or resource state changes. Every event that fires in the same frame collapses into a single recompute, and the one thing no event covers -- "this cooldown just finished" -- is handled by scheduling one timer for the exact moment of expiry. While a cooldown runs, this addon does nothing at all.

Notably, the global cooldown is ignored. Without that, every cast would blink every icon out for a second and a half. The engine reports this directly as a clean isOnGCD flag, so no timing maths is needed to spot it, and the recompute on every GCD tick finds state unchanged and skips all the drawing work.

Secret values (Midnight / 12.x). Inside restricted content -- Mythic+, raids, rated PvP -- the cooldown APIs return secret numbers. startTime, duration and currentCharges can be passed to the engine but throw on any comparison or arithmetic in addon Lua. The boolean flags beside them (isActive, isOnGCD, maxCharges) stay readable, so every decision here is made from those, and the secret numbers are only ever handed straight back to SetCooldown and SetFormattedText.

One consequence: expiry cannot be computed while timing is secret, and the client sends no event when a cooldown merely runs out. In that case only -- in restricted content, and only while something is actually on cooldown -- the clean isActive flag is re-tested five times a second. Everywhere else the exact-expiry timer still does the job and nothing polls at all.

The cursor follow parks itself. Position cannot be throttled without visibly lagging the pointer, so while the cursor moves there is one reposition per rendered frame. But a cursor that is not moving needs nothing, and while you are flying across a city with your hand off the mouse it is not moving. So the per-frame handler removes itself after one second of stillness, and a self-stopping animation ticker -- which sleeps inside the C engine and costs no Lua at frame rate -- watches at 20 Hz for the first moved pixel and puts it back. After 30 seconds of stillness even that drops to 0.15s.

When there is nothing to show at all -- out of combat with "only in combat" on, no spells configured, every tracked spell on cooldown -- the handler and the ticker are both torn down and the addon costs literally nothing.

Mouse input

Every frame this addon creates is click-through and motion-through, always, with no option to change it. Icons riding your pointer that capture the mouse would break every [@mouseover] macro you own, which for a healer would be considerably worse than having no addon.

Files

File What is in it
Core.lua Spell state, event plumbing, saved variables, slash command
Display.lua Icons, layout, cursor follow
Options.lua Configuration window

The HealerCursor Team

profile avatar
  • 3
    Projects
  • 2.2K
    Downloads

More from Marminator