diff --git a/module/applications/sidebar/tabs/actorDirectory.mjs b/module/applications/sidebar/tabs/actorDirectory.mjs index 16e490c4..1306de61 100644 --- a/module/applications/sidebar/tabs/actorDirectory.mjs +++ b/module/applications/sidebar/tabs/actorDirectory.mjs @@ -102,9 +102,7 @@ export default class DhActorDirectory extends foundry.applications.sidebar.tabs. const actor = game.actors.get(li.dataset.entryId); if (!actor) throw new Error('Unexpected missing actor'); - const currentActiveParty = game.actors.find(x => x.type === 'party' && x.system.active); - await currentActiveParty?.update({ 'system.active': false }); - await actor.update({ 'system.active': true }); + await game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, actor.id); ui.actors.render(); } } diff --git a/module/config/settingsConfig.mjs b/module/config/settingsConfig.mjs index 74315a8b..12e8536e 100644 --- a/module/config/settingsConfig.mjs +++ b/module/config/settingsConfig.mjs @@ -40,7 +40,8 @@ export const gameSettings = { LastMigrationVersion: 'LastMigrationVersion', SpotlightRequestQueue: 'SpotlightRequestQueue', CompendiumBrowserSettings: 'CompendiumBrowserSettings', - SpotlightTracker: 'SpotlightTracker' + SpotlightTracker: 'SpotlightTracker', + ActiveParty: 'ActiveParty', }; export const actionAutomationChoices = { diff --git a/module/data/actor/party.mjs b/module/data/actor/party.mjs index d35261fc..4fa295ef 100644 --- a/module/data/actor/party.mjs +++ b/module/data/actor/party.mjs @@ -9,7 +9,6 @@ export default class DhParty extends BaseDataActor { const fields = foundry.data.fields; return { ...super.defineSchema(), - active: new fields.BooleanField(), partyMembers: new ForeignDocumentUUIDArrayField({ type: 'Actor' }, { prune: true }), notes: new fields.HTMLField(), gold: new fields.SchemaField({ @@ -23,6 +22,10 @@ export default class DhParty extends BaseDataActor { }; } + get active() { + return game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty) === this.parent.id; + } + /* -------------------------------------------- */ /**@inheritdoc */ @@ -50,8 +53,15 @@ export default class DhParty extends BaseDataActor { const allowed = await super._preCreate(data, options, user); if (allowed === false) return; - if (!game.actors.some(x => x.type === 'party' && x.active)) - await this.updateSource({ active: true }); + if (!game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty)) + game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, this.parent.id); + } + + async _preDelete() { + super._preDelete(); + + if (this.active) + game.settings.set(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, null); } _onDelete(options, userId) { diff --git a/module/systemRegistration/settings.mjs b/module/systemRegistration/settings.mjs index 63611cda..ae78e23b 100644 --- a/module/systemRegistration/settings.mjs +++ b/module/systemRegistration/settings.mjs @@ -189,4 +189,11 @@ const registerNonConfigSettings = () => { config: false, type: SpotlightTracker }); + + game.settings.register(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.ActiveParty, { + scope: 'world', + config: false, + type: String, + default: null, + }); };