Hooks.once("ready", function () {
|
|
game.settings.register("bossbar", "currentHpPath", {
|
|
name: game.i18n.localize("bossbar.settings.currentHpPath.name"),
|
|
hint: game.i18n.localize("bossbar.settings.currentHpPath.hint"),
|
|
scope: "world",
|
|
config: true,
|
|
type: String,
|
|
default: "attributes.hp.value",
|
|
});
|
|
|
|
game.settings.register("bossbar", "maxHpPath", {
|
|
name: game.i18n.localize("bossbar.settings.maxHpPath.name"),
|
|
hint: game.i18n.localize("bossbar.settings.maxHpPath.hint"),
|
|
scope: "world",
|
|
config: true,
|
|
type: String,
|
|
default: "attributes.hp.max",
|
|
});
|
|
|
|
game.settings.register("bossbar", "barHeight", {
|
|
name: game.i18n.localize("bossbar.settings.barHeight.name"),
|
|
hint: game.i18n.localize("bossbar.settings.barHeight.hint"),
|
|
scope: "world",
|
|
config: true,
|
|
type: Number,
|
|
default: 20,
|
|
});
|
|
|
|
game.settings.register("bossbar", "textSize", {
|
|
name: game.i18n.localize("bossbar.settings.textSize.name"),
|
|
hint: game.i18n.localize("bossbar.settings.textSize.hint"),
|
|
scope: "world",
|
|
config: true,
|
|
type: Number,
|
|
default: 20,
|
|
});
|
|
|
|
game.settings.register("bossbar", "cameraPan", {
|
|
name: game.i18n.localize("bossbar.settings.cameraPan.name"),
|
|
hint: game.i18n.localize("bossbar.settings.cameraPan.hint"),
|
|
scope: "world",
|
|
config: true,
|
|
type: Boolean,
|
|
default: false,
|
|
});
|
|
|
|
game.settings.register("bossbar", "position", {
|
|
name: game.i18n.localize("bossbar.settings.position.name"),
|
|
hint: game.i18n.localize("bossbar.settings.position.hint"),
|
|
scope: "world",
|
|
config: true,
|
|
type: Number,
|
|
choices: {
|
|
0: game.i18n.localize("bossbar.settings.position.opt0"),
|
|
1: game.i18n.localize("bossbar.settings.position.opt1"),
|
|
},
|
|
default: 0,
|
|
});
|
|
|
|
game.settings.register("bossbar", "backgroundPath", {
|
|
name: game.i18n.localize("bossbar.settings.backgroundPath.name"),
|
|
hint: game.i18n.localize("bossbar.settings.backgroundPath.hint"),
|
|
scope: "world",
|
|
config: true,
|
|
type: String,
|
|
default: "modules/bossbar/resources/Dark.webp",
|
|
filePicker: true,
|
|
});
|
|
|
|
game.settings.register("bossbar", "foregroundPath", {
|
|
name: game.i18n.localize("bossbar.settings.foregroundPath.name"),
|
|
hint: game.i18n.localize("bossbar.settings.foregroundPath.hint"),
|
|
scope: "world",
|
|
config: true,
|
|
type: String,
|
|
default: "modules/bossbar/resources/Blood.webp",
|
|
filePicker: true,
|
|
});
|
|
|
|
new window.Ardittristan.ColorSetting("bossbar", "tempBarColor", {
|
|
name: game.i18n.localize("bossbar.settings.tempBarColor.name"),
|
|
hint: game.i18n.localize("bossbar.settings.tempBarColor.hint"),
|
|
label: game.i18n.localize("bossbar.settings.tempBarColor.label"),
|
|
restricted: true,
|
|
defaultColor: "#7e7e7e",
|
|
scope: "world",
|
|
});
|
|
|
|
Hooks.on("renderApplication", (app) => {
|
|
if (app.id == "controls" || app.id =="navigation" || app.id == "camera-views") {
|
|
BossBar.renderBossBar();
|
|
}
|
|
});
|
|
BossBar.renderBossBar();
|
|
});
|
|
|
|
Hooks.once("ready", function () {});
|
|
|
|
Hooks.on("updateScene", async (scene, updates) => {
|
|
if (!game.user.isGM) {
|
|
if (updates.flags?.bossbar) {
|
|
const ids = canvas.scene.getFlag("bossbar", "bossBarActive");
|
|
if (!ids) {
|
|
if (canvas.scene._bossBars) {
|
|
for (let bar of Object.entries(canvas.scene._bossBars)) {
|
|
bar[1].unHook();
|
|
}
|
|
delete canvas.scene._bossBars;
|
|
}
|
|
return;
|
|
}
|
|
for (let id of ids) {
|
|
if (canvas.scene._bossBars && canvas.scene._bossBars[id]) {
|
|
canvas.scene._bossBars[id].draw(
|
|
game.settings.get("bossbar", "barHeight")
|
|
);
|
|
return;
|
|
} else {
|
|
await BossBar.create(canvas.tokens.get(id));
|
|
}
|
|
}
|
|
} else {
|
|
//BossBar.clearAll();
|
|
}
|
|
}
|
|
});
|
|
|
|
Hooks.on("getSceneControlButtons", (controls, b, c) => {
|
|
if (!canvas.scene) return;
|
|
let isBoss = canvas.scene.getFlag("bossbar", "bossBarActive") ? true : false;
|
|
controls
|
|
.find((c) => c.name == "token")
|
|
.tools.push({
|
|
name: "bossBar",
|
|
title: game.i18n.localize("bossbar.controls.bossUI.name"),
|
|
icon: "fas fa-pastafarianism",
|
|
toggle: true,
|
|
visible: game.user.isGM,
|
|
active: isBoss,
|
|
onClick: async (toggle) => {
|
|
if (toggle) {
|
|
if (canvas.tokens.controlled[0]) {
|
|
for (let token of canvas.tokens.controlled) {
|
|
await BossBar.create(token);
|
|
if (game.settings.get("bossbar", "cameraPan"))
|
|
BossBar.panCamera(token);
|
|
}
|
|
} else {
|
|
ui.notifications.warn(
|
|
game.i18n.localize("bossbar.controls.bossUI.warn")
|
|
);
|
|
}
|
|
} else {
|
|
await canvas.scene.unsetFlag("bossbar", "bossBarActive");
|
|
BossBar.remove();
|
|
}
|
|
},
|
|
});
|
|
});
|
|
|
|
Object.byString = function (o, s) {
|
|
s = s.replace(/\[(\w+)\]/g, ".$1"); // convert indexes to properties
|
|
s = s.replace(/^\./, ""); // strip a leading dot
|
|
var a = s.split(".");
|
|
for (var i = 0, n = a.length; i < n; ++i) {
|
|
var k = a[i];
|
|
if (k in o) {
|
|
o = o[k];
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
return o;
|
|
};
|
|
|
|
|
|
|