mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-04-21 23:13:39 +02:00
128 lines
5.7 KiB
JavaScript
128 lines
5.7 KiB
JavaScript
export default class DhAppearance extends foundry.abstract.DataModel {
|
|
static LOCALIZATION_PREFIXES = ['DAGGERHEART.SETTINGS.Appearance'];
|
|
|
|
static sfxSchema = () =>
|
|
new foundry.data.fields.SchemaField({
|
|
class: new foundry.data.fields.StringField({
|
|
nullable: true,
|
|
initial: null,
|
|
blank: true,
|
|
choices: CONFIG.DH.GENERAL.diceSoNiceSFXClasses
|
|
})
|
|
});
|
|
|
|
static defineSchema() {
|
|
const { StringField, ColorField, BooleanField, SchemaField } = foundry.data.fields;
|
|
|
|
// helper to create dice style schema
|
|
const diceStyle = ({ fg, bg, outline, edge }) =>
|
|
new SchemaField({
|
|
foreground: new ColorField({ required: true, initial: fg }),
|
|
background: new ColorField({ required: true, initial: bg }),
|
|
outline: new ColorField({ required: true, initial: outline }),
|
|
edge: new ColorField({ required: true, initial: edge }),
|
|
texture: new StringField({ initial: 'astralsea', required: true, blank: false }),
|
|
colorset: new StringField({ initial: 'inspired', required: true, blank: false }),
|
|
material: new StringField({ initial: 'metal', required: true, blank: false }),
|
|
system: new StringField({ initial: 'standard', required: true, blank: false }),
|
|
font: new StringField({ initial: 'auto', required: true, blank: false }),
|
|
sfx: new SchemaField({
|
|
higher: DhAppearance.sfxSchema()
|
|
})
|
|
});
|
|
|
|
return {
|
|
useResourcePips: new BooleanField({ initial: false }),
|
|
displayFear: new StringField({
|
|
required: true,
|
|
choices: CONFIG.DH.GENERAL.fearDisplay,
|
|
initial: CONFIG.DH.GENERAL.fearDisplay.token.value
|
|
}),
|
|
displayCountdownUI: new BooleanField({ initial: true }),
|
|
diceSoNice: new SchemaField({
|
|
hope: diceStyle({ fg: '#ffffff', bg: '#ffe760', outline: '#000000', edge: '#ffffff' }),
|
|
fear: diceStyle({ fg: '#000000', bg: '#0032b1', outline: '#ffffff', edge: '#000000' }),
|
|
advantage: diceStyle({ fg: '#ffffff', bg: '#008000', outline: '#000000', edge: '#ffffff' }),
|
|
disadvantage: diceStyle({ fg: '#000000', bg: '#b30000', outline: '#ffffff', edge: '#000000' }),
|
|
sfx: new SchemaField({
|
|
critical: DhAppearance.sfxSchema()
|
|
})
|
|
}),
|
|
extendCharacterDescriptions: new BooleanField(),
|
|
extendAdversaryDescriptions: new BooleanField(),
|
|
extendEnvironmentDescriptions: new BooleanField(),
|
|
extendItemDescriptions: new BooleanField(),
|
|
expandRollMessage: new SchemaField({
|
|
desc: new BooleanField({ initial: true }),
|
|
roll: new BooleanField(),
|
|
damage: new BooleanField(),
|
|
target: new BooleanField()
|
|
}),
|
|
showTokenDistance: new StringField({
|
|
required: true,
|
|
choices: {
|
|
always: {
|
|
value: 'always',
|
|
label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.showTokenDistance.choices.always'
|
|
},
|
|
encounters: {
|
|
value: 'encounters',
|
|
label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.showTokenDistance.choices.encounters'
|
|
},
|
|
never: {
|
|
value: 'never',
|
|
label: 'DAGGERHEART.SETTINGS.Appearance.FIELDS.showTokenDistance.choices.never'
|
|
}
|
|
},
|
|
nullable: false,
|
|
initial: 'always'
|
|
}),
|
|
hideAttribution: new BooleanField(),
|
|
showGenericStatusEffects: new BooleanField({ initial: true })
|
|
};
|
|
}
|
|
|
|
get diceSoNiceData() {
|
|
const globalOverrides = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.GlobalOverrides);
|
|
const getSFX = (baseClientData, overrideKey) => {
|
|
if (!globalOverrides.diceSoNice.sfx.overrideEnabled) return baseClientData;
|
|
const overrideData = globalOverrides.diceSoNice.sfx[overrideKey];
|
|
const clientData = foundry.utils.deepClone(baseClientData);
|
|
return Object.keys(clientData).reduce((acc, key) => {
|
|
const data = clientData[key];
|
|
acc[key] = Object.keys(data).reduce((acc, dataKey) => {
|
|
const value = data[dataKey];
|
|
acc[dataKey] = value ? value : overrideData[key][dataKey];
|
|
return acc;
|
|
}, {});
|
|
return acc;
|
|
}, {});
|
|
};
|
|
|
|
return {
|
|
...this.diceSoNice,
|
|
sfx: getSFX(this.diceSoNice.sfx, 'global'),
|
|
hope: {
|
|
...this.diceSoNice.hope,
|
|
sfx: getSFX(this.diceSoNice.hope.sfx, 'hope')
|
|
},
|
|
fear: {
|
|
...this.diceSoNice.fear,
|
|
sfx: getSFX(this.diceSoNice.fear.sfx, 'fear')
|
|
}
|
|
};
|
|
}
|
|
|
|
/** Invoked by the setting when data changes */
|
|
handleChange() {
|
|
if (this.displayFear) {
|
|
if (ui.resources) {
|
|
if (this.displayFear === 'hide') ui.resources.close({ allowed: true });
|
|
else ui.resources.render({ force: true });
|
|
}
|
|
}
|
|
|
|
const globalOverrides = game.settings.get(CONFIG.DH.id, CONFIG.DH.SETTINGS.gameSettings.GlobalOverrides);
|
|
globalOverrides.diceSoNiceSFXUpdate(this);
|
|
}
|
|
}
|