Skip to content

Commit cf06e7c

Browse files
committed
Add Combat Only setting
Fix #109
1 parent 635923a commit cf06e7c

4 files changed

Lines changed: 50 additions & 0 deletions

File tree

src/lang/en.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
"name": "Indicator Distance",
2020
"hint": "Set the multiplier for the indicator's distance. Math: Largest Size × (Multiplier / 2)."
2121
},
22+
"combatOnly": {
23+
"name": "Hide Indicator While Out Of Combat",
24+
"hint": "Hides the indicator when no combat is active."
25+
},
2226
"hideIndicatorOnDead": {
2327
"name": "Hide Indicator On Dead Tokens",
2428
"hint": "Hides the indicator from tokens marked as defeated on the combat tracker (e.g. the big skull marker on most systems)."

src/module/about-face.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ function addTokenConfigTab(cls, document = "document") {
6868
});
6969
}
7070

71+
function updateCombat(combat, updateData) {
72+
if (!game.aboutFace.combatOnly) return;
73+
game.aboutFace.combatRunning = game.aboutFace.isCombatRunning();
74+
canvas.tokens?.placeables.forEach((token) => {
75+
game.aboutFace.drawAboutFaceIndicator(token);
76+
});
77+
}
78+
7179
Hooks.once("init", () => {
7280
registerSettings();
7381
game.aboutFace = new AboutFace();
@@ -80,9 +88,19 @@ Hooks.once("init", () => {
8088
Hooks.on("highlightObjects", highlightObjects);
8189
}
8290
});
91+
Hooks.on("canvasInit", () => game.aboutFace.combatRunning = game.aboutFace.isCombatRunning());
8392
Hooks.on("canvasReady", async () => {
8493
canvas.scene.tokens.forEach((tokenDocument) => game.aboutFace.drawAboutFaceIndicator(tokenDocument.object));
8594
});
95+
Hooks.on("combatStart", (combat, updateData) => {
96+
if (!game.aboutFace.combatOnly) return;
97+
game.aboutFace.combatRunning = true;
98+
canvas.tokens?.placeables.forEach((token) => {
99+
game.aboutFace.drawAboutFaceIndicator(token);
100+
});
101+
});
102+
Hooks.on("updateCombat", updateCombat);
103+
Hooks.on("deleteCombat", updateCombat);
86104
Hooks.on("preCreateToken", onPreCreateToken);
87105
Hooks.on("preUpdateToken", onPreUpdateToken);
88106
Hooks.on("createToken", (tokenDocument, options, userId) => {

src/module/logic.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { IndicatorMode, MODULE_ID } from "./settings.js";
22

33
export class AboutFace {
44
constructor() {
5+
this.combatOnly = game.settings.get("about-face", "combatOnly");
56
this.indicatorColor = game.settings.get(MODULE_ID, "arrowColor").css;
67
this.indicatorDistance = game.settings.get(MODULE_ID, "arrowDistance");
78
this.hideIndicatorOnDead = game.settings.get("about-face", "hideIndicatorOnDead");
@@ -18,9 +19,19 @@ export class AboutFace {
1819
this._tokenRotation = value;
1920
}
2021

22+
isCombatRunning() {
23+
return game.combats.some((combat) => combat.started);
24+
}
25+
2126
drawAboutFaceIndicator(token) {
2227
const deadIcon = CONFIG.statusEffects.find((x) => x.id === "dead")?.icon;
2328
const isDead = token.actor?.effects.some((el) => el.statuses.has("dead") || el.img === deadIcon);
29+
if (this.combatOnly && !this.combatRunning) {
30+
if (token.aboutFaceIndicator && !token.aboutFaceIndicator?._destroyed) {
31+
token.aboutFaceIndicator.graphics.visible = false;
32+
}
33+
return;
34+
}
2435
if (this.hideIndicatorOnDead && isDead) {
2536
if (token.aboutFaceIndicator && !token.aboutFaceIndicator?._destroyed) {
2637
token.aboutFaceIndicator.graphics.visible = false;

src/module/settings.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,23 @@ export function registerSettings() {
174174
requiresReload: true,
175175
});
176176

177+
game.settings.register(MODULE_ID, "combatOnly", {
178+
name: "about-face.options.combatOnly.name",
179+
hint: "about-face.options.combatOnly.hint",
180+
scope: "world",
181+
config: true,
182+
default: false,
183+
type: Boolean,
184+
onChange: (value) => {
185+
game.aboutFace.combatOnly = value;
186+
if (canvas === null) return;
187+
const tokens = getAllTokens();
188+
for (const token of tokens) {
189+
game.aboutFace.drawAboutFaceIndicator(token);
190+
}
191+
},
192+
});
193+
177194
game.settings.register(MODULE_ID, "hideIndicatorOnDead", {
178195
name: "about-face.options.hideIndicatorOnDead.name",
179196
hint: "about-face.options.hideIndicatorOnDead.hint",

0 commit comments

Comments
 (0)