2025-03-01 19:26:50 +01:00

95 lines
3.1 KiB
TypeScript

import {moduleId} from "../constants";
import {DiceTower} from "../types";
import {SocketType} from "../types/socketType";
export function currentActor() {
return ((game as Game).modules.get(moduleId) as unknown as DiceTower).controls.find('#dice-tower-actor').val()
}
export function getDiceSettings(): Dice {
let settingFor = currentActor();
if (settingFor) {
return Object.assign((getSetting("default-dice") as Dice), getSetting(`${settingFor}-dice`, "default-dice"));
} else {
return getSetting("default-dice")
}
}
export async function setDiceSettings(settings: Dice): Promise<void> {
let settingFor = currentActor();
if (settingFor) {
if (game.user?.isGM) {
await setSetting(`${settingFor}-dice`, settings, true);
ui.notifications?.info("Dice-Customization saved", {localize: true})
} else {
((game as Game).modules.get(moduleId) as unknown as DiceTower).diceSocket.emit({
type: SocketType.SETTINGS,
from: game.userId as string,
payload: {
key: settingFor,
value: settings
}
})
ui.notifications?.info("Dice-Customization save-request sent", {localize: true})
}
((game as Game).modules.get(moduleId) as unknown as DiceTower).diceSocket.emit({
type: SocketType.RERENDER,
from: game.userId as string,
payload: {
key: settingFor
}
}, 1000)
}
}
export function getSetting<D>(key: string, defaultKey?: any): D {
if (defaultKey) {
try {
getSetting(key)
} catch (_) {
registerSetting(key, getSetting(defaultKey));
}
return getSetting(key)
} else {
// @ts-ignore
return game.settings?.get(moduleId, key) as D
}
}
export async function setSetting(key: string, value: any, force = false) {
if (force) {
try {
await setSetting(key, value, false)
} catch (e) {
registerSetting(key, value);
}
} else {
// @ts-ignore
await game.settings?.set(moduleId, key, value);
}
}
export function registerSetting(key: string, value: any, options: {scope: 'client'|'world', config: boolean} = { scope: "world", config: false }) {
// @ts-ignore
game.settings?.register(moduleId, key, {
name: `DICETOWER.${key}Name`,
scope: options.scope,
default: value,
type: typeof value === 'string' ? String : typeof value === 'boolean' ? Boolean : typeof value === 'number' ? Number : Object,
config: options.config
})
}
export function overlayUrl(user: string): string {
let url = getSetting("diceTowerUrl") as String;
let room = getSetting("diceTowerRoom") as String;
return url + '/overlay/' + room + ':' + user + '?scale=10&clearAfter=30'
}
export function resultsUrl(user?: string): string {
let url = getSetting("diceTowerUrl") as String;
let room = getSetting("diceTowerRoom") as String;
return url + '/overlay/' + room + 'results' + (user ? '?user=' + user : '')
}