Bring back the "tint secret doors" feature (resolves #7)

This partially reverts commit 42529d3df6.
This commit is contained in:
2021-07-20 11:03:03 +02:00
parent e20b259d99
commit 2ce7e57f43
5 changed files with 60 additions and 6 deletions

View File

@@ -0,0 +1,34 @@
import {settingsKey} from "../settings.js"
const SECRET_DOOR_TINT = 0x888888
// Tint all secret doors dark grey
export function onCanvasReady(currentCanvas) {
if (game.settings.get(settingsKey, "highlightSecretDoors")) {
const types = CONST.WALL_DOOR_TYPES
const secretDoors = canvas.controls.doors.children.filter(control => control.wall.data.door == types.SECRET)
secretDoors.forEach(control => control.icon.tint = SECRET_DOOR_TINT)
}
}
// If door type has been changed, tint the door accordingly
export function onUpdateWall(scene, wall, update) {
if (!game.settings.get(settingsKey, "highlightSecretDoors"))
return
const types = CONST.WALL_DOOR_TYPES
if (wall.door === types.NONE)
return
// Find the door control corresponding to the changed door
const changedDoor = canvas.controls.doors.children.find(control => control.wall.data._id === wall._id);
// If the changed door doesn't have a control it's not on this scene - ignore it
if (!changedDoor)
return
// The wall object we got passed might be from another scene so we replace it with the door from the current scene
wall = changedDoor.wall.data
if (wall.door === types.DOOR)
changedDoor.icon.tint = 0xFFFFFF
else if (wall.door === types.SECRET)
changedDoor.icon.tint = SECRET_DOOR_TINT
else
console.warn("Smart Doors | Encountered unknown door type " + wall.door + " while highlighting secret doors.")
}

View File

@@ -2,6 +2,7 @@
import {libWrapper} from "../lib/libwrapper_shim.js";
import * as DoorControlIconScale from "./features/door_control_icon_scale.js"
import * as HighlightSecretDoors from "./features/highlight_secret_doors.js"
import * as LockedDoorAlert from "./features/locked_door_alert.js"
import * as SynchronizedDoors from "./features/synchronized_doors.js"
import * as ToggleSecretDoor from "./features/toggle_secret_door.js"
@@ -24,6 +25,9 @@ Hooks.once("ready", () => {
Hooks.on("renderChatMessage", LockedDoorAlert.onRenderChatMessage)
Hooks.on("canvasReady", DoorControlIconScale.onCanvasReady)
Hooks.on("canvasReady", HighlightSecretDoors.onCanvasReady)
Hooks.on("updateWall", HighlightSecretDoors.onUpdateWall)
// Inject our custom settings into the WallConfig dialog
Hooks.on("renderWallConfig", SynchronizedDoors.onRederWallConfig)

View File

@@ -1,5 +1,10 @@
export const settingsKey = "smart-doors";
function reloadGM() {
if (game.user.isGM)
location.reload()
}
export function registerSettings() {
game.settings.register(settingsKey, "dataVersion", {
scope: "world",
@@ -16,6 +21,15 @@ export function registerSettings() {
default: 1.5,
onChange: () => location.reload()
})
game.settings.register(settingsKey, "highlightSecretDoors", {
name: "smart-doors.settings.highlightSecretDoors.name",
hint: "smart-doors.settings.highlightSecretDoors.hint",
scope: "world",
config: true,
type: Boolean,
default: false,
onChange: reloadGM,
})
game.settings.register(settingsKey, "toggleSecretDoors", {
name: "smart-doors.settings.toggleSecretDoors.name",
hint: "smart-doors.settings.toggleSecretDoors.hint",