@@ -94,6 +94,7 @@ Hooks.once("init", () => {
|
||||
config: false,
|
||||
type: Object,
|
||||
default: { _version: 1, matrix: {} },
|
||||
onChange: () => { stateStore?.init(); roleRenderer?.rerenderStrip(); },
|
||||
});
|
||||
|
||||
adapter.settings.register("showGMSelfFeed", {
|
||||
@@ -130,6 +131,25 @@ Hooks.once("init", () => {
|
||||
hint: "When enabled, scenes with a configured camera layout will automatically apply it on activation",
|
||||
});
|
||||
|
||||
// Dock layout — world-scoped so the GM controls the layout direction for all players
|
||||
adapter.settings.register("dockLayout", {
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: String,
|
||||
default: "vertical-sm",
|
||||
onChange: () => roleRenderer?.rerenderStrip(),
|
||||
});
|
||||
|
||||
// Per-user size toggle — client-scoped so each user can expand/collapse independently.
|
||||
// '' = no preference (follow world dockLayout), 'sm' = force small, 'md' = force large.
|
||||
adapter.settings.register("dockLayoutExpanded", {
|
||||
scope: "client",
|
||||
config: false,
|
||||
type: String,
|
||||
default: "",
|
||||
onChange: () => roleRenderer?.rerenderStrip(),
|
||||
});
|
||||
|
||||
// Construct data layer — constructors are side-effect-free
|
||||
// Note: ScenePresetManager is constructed in 'ready' hook after visibilityManager is available
|
||||
stateStore = new StateStore(adapter.settings);
|
||||
@@ -191,6 +211,15 @@ Hooks.once("init", () => {
|
||||
Hooks.once("ready", () => {
|
||||
console.log("[ScryingPool] ready — module active");
|
||||
|
||||
// Migration: reset stale boolean dockLayoutExpanded to '' (empty string)
|
||||
// Old registration used type:Boolean, saved value `false` persists in client storage
|
||||
try {
|
||||
const legacyVal = adapter.settings.get('dockLayoutExpanded');
|
||||
if (typeof legacyVal === 'boolean') {
|
||||
adapter.settings.set('dockLayoutExpanded', '').catch(() => {});
|
||||
}
|
||||
} catch (_) {}
|
||||
|
||||
// Hydrate StateStore from persisted world setting (AC-6, AC-7)
|
||||
stateStore.init();
|
||||
|
||||
@@ -270,9 +299,9 @@ Hooks.once("ready", () => {
|
||||
// Story 4.2: Pass portraitFallbackHandler for custom portrait display
|
||||
roleRenderer = new RoleRenderer(stateStore, scryingPoolController, avTileAdapter, adapter, portraitFallbackHandler);
|
||||
roleRenderer.init();
|
||||
if (adapter.users.isGM() && game.webrtc !== null) {
|
||||
roleRenderer.openStrip();
|
||||
|
||||
roleRenderer.openStrip();
|
||||
|
||||
if (adapter.users.isGM()) {
|
||||
// Story 3.2: Create ConfirmationBar for preset apply feedback (GM only)
|
||||
// Pass roleRenderer to access ScryingPoolStrip.stripOverlayLayer (created lazily)
|
||||
confirmationBar = new ConfirmationBar(adapter, visibilityManager, socketHandler, roleRenderer);
|
||||
|
||||
Reference in New Issue
Block a user