diff --git a/lang/en.json b/lang/en.json index 3a1340e0..a7713311 100755 --- a/lang/en.json +++ b/lang/en.json @@ -2887,7 +2887,9 @@ "iconName": "Icon Name", "iconNameHint": "Icons are from fontawesome", "bagName": "Bag Name", - "chestName": "Chest Name" + "chestName": "Chest Name", + "quantityName": "Quantity Name", + "initialAmount": "Starting Amount" }, "domains": { "domainsTitle": "Base Domains", diff --git a/module/config/resourceConfig.mjs b/module/config/resourceConfig.mjs index d33d7ab3..f03131ff 100644 --- a/module/config/resourceConfig.mjs +++ b/module/config/resourceConfig.mjs @@ -65,6 +65,7 @@ const companionBaseResources = Object.freeze({ export const character = { base: characterBaseResources, + initialCurrency: { coins: 0, handfuls: 1, bags: 0, chests: 0 }, custom: {}, // module stuff goes here all: { ...characterBaseResources } }; diff --git a/module/data/actor/character.mjs b/module/data/actor/character.mjs index 10d53c13..a8243336 100644 --- a/module/data/actor/character.mjs +++ b/module/data/actor/character.mjs @@ -3,7 +3,7 @@ import ForeignDocumentUUIDField from '../fields/foreignDocumentUUIDField.mjs'; import DhLevelData from '../levelData.mjs'; import { commonActorRules } from './base.mjs'; import DhCreature from './creature.mjs'; -import { attributeField, stressDamageReductionRule, bonusField, GoldField } from '../fields/actorField.mjs'; +import { attributeField, stressDamageReductionRule, bonusField, CharacterGoldField } from '../fields/actorField.mjs'; import { ActionField } from '../fields/actionField.mjs'; import DHCharacterSettings from '../../applications/sheets-configs/character-settings.mjs'; import { getArmorSources } from '../../helpers/utils.mjs'; @@ -64,7 +64,7 @@ export default class DhCharacter extends DhCreature { core: new fields.BooleanField({ initial: false }) }) ), - gold: new GoldField(), + gold: new CharacterGoldField(), scars: new fields.NumberField({ initial: 0, integer: true, label: 'DAGGERHEART.GENERAL.scars' }), biography: new fields.SchemaField({ background: new fields.HTMLField(), diff --git a/module/data/fields/actorField.mjs b/module/data/fields/actorField.mjs index a5f6f379..d634b3fd 100644 --- a/module/data/fields/actorField.mjs +++ b/module/data/fields/actorField.mjs @@ -126,4 +126,15 @@ class GoldField extends fields.SchemaField { } } -export { attributeField, ResourcesField, GoldField, stressDamageReductionRule, bonusField }; +class CharacterGoldField extends GoldField { + getInitialValue(options) { + const base = super.getInitialValue(options); + const initialCurrency = CONFIG.DH.RESOURCE.character.initialCurrency; + for (const type of ['coins', 'handfuls', 'bags', 'chests']) { + base[type] = initialCurrency[type]; + } + return base; + } +} + +export { attributeField, ResourcesField, GoldField, CharacterGoldField, stressDamageReductionRule, bonusField }; diff --git a/module/data/settings/Homebrew.mjs b/module/data/settings/Homebrew.mjs index 31247458..af4a871c 100644 --- a/module/data/settings/Homebrew.mjs +++ b/module/data/settings/Homebrew.mjs @@ -2,7 +2,7 @@ import { defaultRestOptions } from '../../config/generalConfig.mjs'; import { resetAndRerenderActors } from '../../helpers/utils.mjs'; import { ActionsField } from '../fields/actionField.mjs'; -const currencyField = (initial, label, icon) => +const currencyField = (initial, label, icon, initialAmount = 0) => new foundry.data.fields.SchemaField({ enabled: new foundry.data.fields.BooleanField({ required: true, initial: true }), label: new foundry.data.fields.StringField({ @@ -10,7 +10,14 @@ const currencyField = (initial, label, icon) => initial, label }), - icon: new foundry.data.fields.StringField({ required: true, nullable: false, blank: true, initial: icon }) + icon: new foundry.data.fields.StringField({ required: true, nullable: false, blank: true, initial: icon }), + initialAmount: new foundry.data.fields.NumberField({ + required: true, + integer: true, + min: 0, + initial: initialAmount, + label: 'DAGGERHEART.SETTINGS.Homebrew.currency.initialAmount' + }) }); const restMoveField = () => @@ -108,7 +115,8 @@ export default class DhHomebrew extends foundry.abstract.DataModel { handfuls: currencyField( 'Handfuls', 'DAGGERHEART.SETTINGS.Homebrew.currency.handfulName', - 'fa-solid fa-coins' + 'fa-solid fa-coins', + 1 ), bags: currencyField('Bags', 'DAGGERHEART.SETTINGS.Homebrew.currency.bagName', 'fa-solid fa-sack'), chests: currencyField( @@ -193,6 +201,7 @@ export default class DhHomebrew extends foundry.abstract.DataModel { for (const type of ['coins', 'handfuls', 'bags', 'chests']) { const initial = this.schema.fields.currency.fields[type].getInitialValue(); source.currency[type] = foundry.utils.mergeObject(initial, source.currency[type], { inplace: false }); + source.currency[type].initialAmount ??= 0; } return source; } @@ -230,6 +239,11 @@ export default class DhHomebrew extends foundry.abstract.DataModel { ...config.base }); } + + const currencyInitial = CONFIG.DH.RESOURCE.character.initialCurrency; + for (const type of ['coins', 'handfuls', 'bags', 'chests']) { + currencyInitial[type] = this.currency[type].initialAmount; + } } } diff --git a/styles/less/ui/settings/settings.less b/styles/less/ui/settings/settings.less index 35c48480..f2ab99e7 100644 --- a/styles/less/ui/settings/settings.less +++ b/styles/less/ui/settings/settings.less @@ -201,6 +201,23 @@ } } + .currency-rows { + display: grid; + grid-template-columns: auto 1fr 1fr auto; + gap: 4px; + align-items: center; + width: 100%; + + .currency-header-label { + text-align: center; + font-size: var(--font-size-14); + } + + input[type='checkbox'] { + justify-self: center; + } + } + .settings-hint { width: 100%; display: flex; diff --git a/templates/settings/homebrew-settings/settings.hbs b/templates/settings/homebrew-settings/settings.hbs index 4b6e7d85..7766c934 100644 --- a/templates/settings/homebrew-settings/settings.hbs +++ b/templates/settings/homebrew-settings/settings.hbs @@ -42,29 +42,35 @@
- {{localize "DAGGERHEART.SETTINGS.Homebrew.currency.title"}} + {{localize "DAGGERHEART.SETTINGS.Homebrew.currency.title"}}
{{formGroup settingFields.schema.fields.currency.fields.title value=settingFields._source.currency.title localize=true}}
-
+
+ + {{localize "DAGGERHEART.SETTINGS.Homebrew.currency.quantityName"}} + {{localize "DAGGERHEART.SETTINGS.Homebrew.currency.initialAmount"}} + + - {{formGroup settingFields.schema.fields.currency.fields.coins.fields.label value=settingFields._source.currency.coins.label localize=true}} + + -
-
+ - {{formGroup settingFields.schema.fields.currency.fields.handfuls.fields.label value=settingFields._source.currency.handfuls.label localize=true}} + + -
-
+ - {{formGroup settingFields.schema.fields.currency.fields.bags.fields.label value=settingFields._source.currency.bags.label localize=true}} + + -
-
+ - {{formGroup settingFields.schema.fields.currency.fields.chests.fields.label value=settingFields._source.currency.chests.label localize=true}} + +