import { socket } from "./socket"; function makeDialogContent(): string { const users = (game as foundry.Game).users.filter((user: foundry.documents.User): boolean => user.name !== "Gamemaster"); let out = ``; users.forEach((user: foundry.documents.User): void => { out += ` `; }); out += "
Player NameMobileDisplay
${user.name}
"; return out; } export function getOwners(actorId: string): foundry.documents.User[] { return (game as foundry.Game).users.filter((user: foundry.documents.User): boolean => { return user.character?.id === actorId; }); } export function tokenControlCB(event: Event): void { const direction = (event.target as HTMLButtonElement).dataset.direction; const tokens = (game as foundry.Game).user.character.getActiveTokens(); if ((direction === null) || (direction === undefined)) return; if (tokens.length === 0) return; socket!.executeAsGM("tokenMove", { tokenId: tokens[0].id, direction }); } interface PlayerInfo { id: string; display: boolean; mobile: boolean; } export async function editPlayerModes(): Promise { const data: PlayerInfo[] = await foundry.applications.api.DialogV2.prompt({ window: { title: (game as foundry.Game).i18n!.localize("pf2e-table-mode.editPlayerModes") }, content: makeDialogContent(), ok: { label: (game as foundry.Game).i18n!.localize("pf2e-table-mode.confirm"), callback: (_event: PointerEvent | SubmitEvent, button: HTMLButtonElement, dialog: foundry.applications.api.DialogV2): Promise => { const elements = button.form!.elements; return new Promise((resolve: (value: PlayerInfo[] | PromiseLike) => void, reject: (reason?: any) => void): void => { resolve( (game as foundry.Game).users.filter((user: foundry.documents.User): boolean => user.name !== "Gamemaster").map((user: foundry.documents.User): PlayerInfo => { return { id: user.id, display: (elements.namedItem(`user-${user.id}-display`) as HTMLInputElement).checked, mobile: (elements.namedItem(`user-${user.id}-mobile`) as HTMLInputElement).checked }; }) ); }); } } }); data.forEach(async (player: PlayerInfo): Promise => { const user = (game as foundry.Game).users.get(player.id); if (user.getFlag("pf2e-table-mode", "mobile") !== player.mobile) { await user.setFlag("pf2e-table-mode", "mobile", player.mobile); } if (user.getFlag("pf2e-table-mode", "display") !== player.display) { await user.setFlag("pf2e-table-mode", "display", player.display); } console.log(`User data for ${user.name} updated`); }); }