diff --git a/CHANGELOG.md b/CHANGELOG.md index 69f6991..bbe8a87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ Two display fixes: the mana ticker spark moves smoothly again, and the global co - **The mana ticker spark moves smoothly again.** The spark was only redrawn once it had travelled half a pixel. That sounds frugal, but it crosses the bar in five seconds, roughly 20 pixels per second, so at 60 frames it advanced on every second frame at best and, depending on rounding, sometimes after one frame and sometimes after two. That uneven step was the stutter, and the fixed 0.03 second redraw step introduced in 1.4.5 made it worse. The threshold is now effectively gone (0.05 px) and the spark is drawn every frame again, which doubles its motion from 30 to 60 steps per second with an even gap. - **Drawing every frame still costs nothing.** Each spark remembers the width and height of its bar and re-reads them four times a second (`FBTICK_GEOM_STEP`) instead of asking the frame on every pass, and the gate check sits in front of it all: with a full mana bar there is no pass at all. -- **The global cooldown no longer darkens every button.** After casting anything, the client reports every spell as unusable for the length of the global cooldown. Taken literally, that turned all icons dark grey for a second and a half after every cast, as if nothing were available at all. A running cooldown no longer than the global one (`FBCD_MIN_DURATION`) is no longer treated as a reason to darken a button. Blue for missing mana, red for out of range and grey for a spell that really cannot be cast, for instance in the wrong shapeshift form, all work as before, and real cooldowns are still shown by the clock on the button. This affects the plates and the raid cells alike, both go through `FBHealBox_ButtonUsable`. +- **The global cooldown no longer darkens every button.** After casting anything, the client reports every spell as unusable for the length of the global cooldown. Taken literally, that turned all icons dark grey for a second and a half after every cast, as if nothing were available at all. A running cooldown no longer than the global one (`FBCD_MIN_DURATION`) is no longer treated as a reason to darken a button. Blue for missing mana, red for out of range and grey for a spell that really cannot be cast, for instance in the wrong shapeshift form, all work as before. This affects the plates and the raid cells alike, both go through `FBHealBox_ButtonUsable`. +- **The global cooldown does run as a sweep now.** Not showing it at all was the other half of the inconsistency: an instant like Renew left every button untouched while Power Word: Shield, which has a real cooldown in 1.12, showed one. The sweep is the calm way to show a short wait, so the display threshold moved into its own constant `FBCD_SHOW_MIN` (0, show everything) and is no longer tied to the darkening threshold `FBCD_MIN_DURATION`. Setting it to 2 restores the old quiet behaviour. The sweep starts in the very next frame, because the button pass is not throttled. ### Deutsch @@ -18,7 +19,8 @@ Two display fixes: the mana ticker spark moves smoothly again, and the global co - **Der Funke im Manabalken laeuft wieder rund.** Neu gezeichnet wurde er erst, wenn er einen halben Pixel weitergewandert war. Das klingt sparsam, er braucht fuer den Balken aber fuenf Sekunden, also rund 20 Pixel je Sekunde: Bei 60 Bildern kam er damit bestenfalls in jedem zweiten Frame voran und je nach Rundung mal nach einem, mal nach zwei Frames. Genau dieser ungleiche Schritt war das Ruckeln, und der feste Zeichentakt von 0,03 Sekunden aus 1.4.5 hat es verstaerkt. Die Schwelle ist jetzt praktisch weg (0,05 px) und gezeichnet wird wieder in jedem Frame, das verdoppelt die Bewegung von 30 auf 60 gleichmaessige Schritte je Sekunde. - **Das Zeichnen je Frame kostet trotzdem nichts.** Jeder Funke merkt sich Breite und Hoehe seines Balkens und liest sie viermal je Sekunde nach (`FBTICK_GEOM_STEP`), statt sie bei jedem Durchlauf zu erfragen, und der Torwaechter sitzt weiterhin davor: Bei vollem Manabalken laeuft gar kein Durchlauf. -- **Der globale Cooldown dunkelt nicht mehr alle Buttons ab.** Nach jedem gewirkten Zauber meldet der Client fuer die Dauer des globalen Cooldowns saemtliche Zauber als nicht nutzbar. Woertlich genommen wurden dadurch nach jedem Zauber anderthalb Sekunden lang alle Symbole dunkelgrau, als waere gar nichts mehr verfuegbar. Eine laufende Abklingzeit, die nicht laenger ist als der globale Cooldown (`FBCD_MIN_DURATION`), gilt jetzt nicht mehr als Grund zum Abdunkeln. Blau fuer fehlendes Mana, Rot fuer ausser Reichweite und Grau fuer einen Zauber, der wirklich nicht geht, etwa in der falschen Gestalt, arbeiten unveraendert weiter, und echte Abklingzeiten zeigt weiterhin die Uhr auf dem Button. Das gilt fuer Plaketten und Raidzellen gleichermassen, beide laufen ueber `FBHealBox_ButtonUsable`. +- **Der globale Cooldown dunkelt nicht mehr alle Buttons ab.** Nach jedem gewirkten Zauber meldet der Client fuer die Dauer des globalen Cooldowns saemtliche Zauber als nicht nutzbar. Woertlich genommen wurden dadurch nach jedem Zauber anderthalb Sekunden lang alle Symbole dunkelgrau, als waere gar nichts mehr verfuegbar. Eine laufende Abklingzeit, die nicht laenger ist als der globale Cooldown (`FBCD_MIN_DURATION`), gilt jetzt nicht mehr als Grund zum Abdunkeln. Blau fuer fehlendes Mana, Rot fuer ausser Reichweite und Grau fuer einen Zauber, der wirklich nicht geht, etwa in der falschen Gestalt, arbeiten unveraendert weiter. Das gilt fuer Plaketten und Raidzellen gleichermassen, beide laufen ueber `FBHealBox_ButtonUsable`. +- **Dafuer laeuft der globale Cooldown jetzt als Uhr mit.** Ihn gar nicht zu zeigen war die andere Haelfte der Ungereimtheit: Ein Instant wie Erneuerung liess alle Buttons unberuehrt, waehrend Machtwort: Schild, das in 1.12 eine echte Abklingzeit hat, eine Uhr zeigte. Die Uhr ist die ruhige Art, eine kurze Wartezeit anzuzeigen, deshalb sitzt die Anzeigeschwelle jetzt in einer eigenen Konstante `FBCD_SHOW_MIN` (0, also alles zeigen) und haengt nicht mehr an der Abdunkel-Schwelle `FBCD_MIN_DURATION`. Wer sie auf 2 setzt, hat das alte ruhige Verhalten zurueck. Die Uhr startet im naechsten Frame, weil der Button-Durchgang nicht gedrosselt ist. ## 1.4.5 (2026-09-08) diff --git a/FBHealBox.lua b/FBHealBox.lua index fc9c4a1..64c2167 100644 --- a/FBHealBox.lua +++ b/FBHealBox.lua @@ -207,7 +207,7 @@ FBLocale["enUS"] = { .. "• Decisions logged with /fbp debug", SMART_MARGIN = "Safety margin: |cFFFFFFFF%s %%", COOLDOWNS = "Cooldowns on buttons", - COOLDOWNS_TIP = "Shows the cooldown sweep on every button (Nature's Swiftness, Inner Focus, Lay on Hands, shield cooldown). The global cooldown is not shown.", + COOLDOWNS_TIP = "Shows the cooldown sweep on every button (Nature's Swiftness, Inner Focus, Lay on Hands, shield cooldown). The global cooldown runs as a sweep too, so after every cast you see the short wait run out instead of the icons going dark and bright again. Set FBCD_SHOW_MIN to 2 in the code to leave the global cooldown out.", AGGRO = "Mark who is attacked", AGGRO_TIP = "Red border on the plate or cell of the member your hostile target is currently targeting. Checked five times a second.", BUFFICONS = "Buff icons left of the bar", @@ -355,7 +355,7 @@ FBLocale["deDE"] = { .. "• Entscheidungen im Chat via /fbp debug", SMART_MARGIN = "Sicherheitsaufschlag: |cFFFFFFFF%s %%", COOLDOWNS = "Cooldowns auf den Buttons", - COOLDOWNS_TIP = "Zeigt die Cooldown-Uhr auf jedem Button (Naturschnelligkeit, Innerer Fokus, Handauflegung, Schild-Cooldown). Der globale Cooldown wird nicht angezeigt.", + COOLDOWNS_TIP = "Zeigt die Cooldown-Uhr auf jedem Button (Naturschnelligkeit, Innerer Fokus, Handauflegung, Schild-Cooldown). Auch der globale Cooldown laeuft als Uhr mit, nach jedem Zauber siehst du also die kurze Wartezeit ablaufen, statt dass die Symbole dunkel und wieder hell werden. Wer ihn nicht sehen will, setzt FBCD_SHOW_MIN im Code auf 2.", AGGRO = "Angegriffenen markieren", AGGRO_TIP = "Roter Rahmen auf der Plakette oder Zelle des Mitglieds, das dein feindliches Ziel gerade im Ziel hat. Fuenfmal je Sekunde geprueft.", BUFFICONS = "Buff-Icons links am Balken", @@ -528,7 +528,7 @@ FBLocale["esES"] = { .. "• Registro de decisiones con /fbp debug", SMART_MARGIN = "Margen de seguridad: |cFFFFFFFF%s %%", COOLDOWNS = "Reutilización en botones", - COOLDOWNS_TIP = "Muestra el barrido de reutilización en cada botón (Rapidez de la naturaleza, Enfoque interno, Imposición de manos, reutilización del escudo). La reutilización global no se muestra.", + COOLDOWNS_TIP = "Muestra el barrido de reutilización en cada botón (Rapidez de la naturaleza, Enfoque interno, Imposición de manos, reutilización del escudo). La reutilización global también se muestra como barrido, así ves correr la breve espera tras cada lanzamiento en lugar de que los iconos se oscurezcan y se aclaren. Para omitirla, pon FBCD_SHOW_MIN en 2 en el código.", AGGRO = "Marcar al atacado", AGGRO_TIP = "Borde rojo en la placa o celda del miembro al que tu objetivo hostil está apuntando. Se comprueba cinco veces por segundo.", BUFFICONS = "Iconos de beneficios (izq.)", @@ -667,7 +667,7 @@ FBLocale["frFR"] = { .. "• Décisions visibles via /fbp debug", SMART_MARGIN = "Marge de sécurité : |cFFFFFFFF%s %%", COOLDOWNS = "Recharges sur les boutons", - COOLDOWNS_TIP = "Affiche le balayage du temps de recharge sur chaque bouton (Rapidité de la nature, Focalisation intérieure, Imposition des mains, recharge du bouclier). Le temps de recharge global n'est pas affiché.", + COOLDOWNS_TIP = "Affiche le balayage du temps de recharge sur chaque bouton (Rapidité de la nature, Focalisation intérieure, Imposition des mains, recharge du bouclier). Le temps de recharge global est affiché lui aussi : après chaque incantation vous voyez la courte attente s'écouler au lieu de voir les icônes s'assombrir puis redevenir claires. Pour l'exclure, mettez FBCD_SHOW_MIN à 2 dans le code.", AGGRO = "Marquer la cible attaquée", AGGRO_TIP = "Bordure rouge sur la plaque ou la cellule du membre que votre cible hostile vise actuellement. Vérifié cinq fois par seconde.", BUFFICONS = "Icônes de buffs (gauche)", @@ -806,7 +806,7 @@ FBLocale["itIT"] = { .. "• Decisioni registrate con /fbp debug", SMART_MARGIN = "Margine di sicurezza: |cFFFFFFFF%s %%", COOLDOWNS = "Recuperi sui pulsanti", - COOLDOWNS_TIP = "Mostra l'animazione del tempo di recupero su ogni pulsante (Rapidità della Natura, Concentrazione Interiore, Imposizione delle Mani, recupero dello scudo). Il tempo di recupero globale non viene mostrato.", + COOLDOWNS_TIP = "Mostra l'animazione del tempo di recupero su ogni pulsante (Rapidità della Natura, Concentrazione Interiore, Imposizione delle Mani, recupero dello scudo). Anche il tempo di recupero globale scorre come animazione: dopo ogni lancio vedi scorrere la breve attesa invece di icone che si scuriscono e si riaccendono. Per escluderlo, imposta FBCD_SHOW_MIN a 2 nel codice.", AGGRO = "Segnala chi è attaccato", AGGRO_TIP = "Bordo rosso sulla targhetta o sulla cella del membro che il tuo bersaglio ostile sta puntando. Controllato cinque volte al secondo.", BUFFICONS = "Icone benefici (sinistra)", @@ -997,8 +997,21 @@ FBBUFF_NORMAL_COLOR = { 1.0, 1.0, 1.0, 1 }; -- Rahmenfarbe fuer den Angegriffenen (schlaegt die Buff-Wache) FBAGGRO_COLOR = { 1.0, 0.15, 0.15, 1 }; --- Cooldown-Uhr: kuerzere Cooldowns (globaler Cooldown) werden nicht gezeigt +-- Zwei Schwellen, die frueher eine waren, weil sie verschiedene Fragen +-- beantworten: +-- +-- FBCD_MIN_DURATION ist die Laenge des globalen Cooldowns. Eine Abklingzeit, +-- die nicht laenger ist, gilt nicht als Grund, einen Button abzudunkeln: +-- waehrend des globalen Cooldowns meldet der Client jeden Zauber als nicht +-- nutzbar, und alle Symbole grau zu faerben sieht aus, als ginge gar nichts. +-- +-- FBCD_SHOW_MIN entscheidet, ab welcher Laenge die Uhr laeuft. 0 heisst: +-- jede laufende Abklingzeit wird gezeigt, auch der globale Cooldown. Die Uhr +-- ist die ruhige Anzeige dafuer, sie laeuft weich ab, statt das Symbol +-- schlagartig dunkel und wieder hell zu machen. Wer den globalen Cooldown +-- nicht sehen will, setzt den Wert auf 2.0. FBCD_MIN_DURATION = 2.0; +FBCD_SHOW_MIN = 0; -- Buff-Icons mit Uhr: 8 px, aussen links neben der Plakette (und Zelle), -- vertikal mittig, von rechts nach links aufgereiht. Die Uhr: vier @@ -4738,7 +4751,7 @@ function FBHealBox_UpdateButtonState(b, event) local cd = nil; if (HealBox.Cooldowns == 1) then cd = FBHealBox_ButtonCooldown(b.id); - if (cd[2] > FBCD_MIN_DURATION) then key = cd[1].."|"..cd[2]; end + if (cd[1] > 0) and (cd[2] > FBCD_SHOW_MIN) then key = cd[1].."|"..cd[2]; end end if (b.cdKey ~= key) then b.cdKey = key;