Robust pause overlay + PNG NPC tokens — v2.0.3
The radar-scope pause overlay only applied via the renderGamePause hook, which does not fire on every pause toggle path — pressing Space after an unpause could show Foundry's default GAME PAUSED. The overlay injector is now idempotent and wired to renderGamePause AND pauseGame (plus a ready check), so the scope applies on every toggle; verified across repeated unpause/pause cycles. Also rasterize the three FALSE ALARM NPC tokens (Rostova, Changed Vance, the Tear) to 1024px PNGs, matching the map fix in v2.0.1. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+31
-10
@@ -221,16 +221,25 @@ Hooks.once("diceSoNiceReady", (dice3d) => {
|
||||
}
|
||||
});
|
||||
|
||||
Hooks.on("renderGamePause", function (_, html, options) {
|
||||
if (options.cssClass !== "paused") return;
|
||||
|
||||
/**
|
||||
* Replace the stock pause spinner with the DG2 radar-scope animation.
|
||||
* Idempotent: safe to call on every render/toggle; skips if already applied.
|
||||
* Wired to BOTH renderGamePause and pauseGame so the scope appears no matter
|
||||
* which path Foundry takes when the pause state changes.
|
||||
*/
|
||||
function applyDG2PauseOverlay(element) {
|
||||
try {
|
||||
const caption = game.i18n.translations.DG?.MissionPaused ?? "Mission Paused";
|
||||
const sub = game.i18n.translations.DG2?.PausedSub ?? "ALL STATIONS HOLD // AWAITING HANDLER";
|
||||
const el = element ?? document.getElementById("pause");
|
||||
if (!el || !game.paused) return;
|
||||
if (el.querySelector(".dg2-pause-scope")) return; // already applied
|
||||
|
||||
// Replace the default spinner with a DG2 radar-scope pause animation.
|
||||
html.classList.add("dg2-pause");
|
||||
html.innerHTML = `
|
||||
const caption = game.i18n.translations.DG?.MissionPaused ?? "Mission Paused";
|
||||
const sub =
|
||||
game.i18n.translations.DG2?.PausedSub ??
|
||||
"All stations hold // awaiting Handler";
|
||||
|
||||
el.classList.add("dg2-pause");
|
||||
el.innerHTML = `
|
||||
<div class="dg2-pause-scope" aria-hidden="true">
|
||||
<span class="dg2-pause-ring r1"></span>
|
||||
<span class="dg2-pause-ring r2"></span>
|
||||
@@ -246,11 +255,23 @@ Hooks.on("renderGamePause", function (_, html, options) {
|
||||
<span class="dg2-pause-title">${caption}</span>
|
||||
<span class="dg2-pause-sub">${sub}</span>
|
||||
</figcaption>`;
|
||||
} catch {
|
||||
// noop
|
||||
} catch (ex) {
|
||||
console.warn("Delta Green 2 | pause overlay failed", ex);
|
||||
}
|
||||
}
|
||||
|
||||
Hooks.on("renderGamePause", (_app, html) => {
|
||||
const el = html instanceof HTMLElement ? html : html?.[0];
|
||||
applyDG2PauseOverlay(el);
|
||||
});
|
||||
|
||||
Hooks.on("pauseGame", () => {
|
||||
// Run after Foundry finishes its own pause render/toggle.
|
||||
setTimeout(() => applyDG2PauseOverlay(), 60);
|
||||
});
|
||||
|
||||
Hooks.once("ready", () => applyDG2PauseOverlay());
|
||||
|
||||
function addEventListenerToChatMessage(element) {
|
||||
element.addEventListener("click", (event) => {
|
||||
const btnWithAction = event.target.closest("button[data-action]");
|
||||
|
||||
Reference in New Issue
Block a user