This commit is contained in:
WBHarry 2025-07-11 22:49:03 +02:00
parent b6195127fe
commit 0c742eb91b
5 changed files with 200 additions and 131 deletions

View file

@ -345,6 +345,37 @@ export const refreshTypes = {
}
};
export const featureTokenTypes = {
tide: {
id: 'tide',
label: 'Tide',
group: 'TYPES.Actor.character'
},
chaos: {
id: 'chaos',
label: 'Chaos',
group: 'TYPES.Actor.character'
}
};
export const featureDiceTypes = {
prayer: {
id: 'prayer',
label: 'Prayer Dice',
group: 'TYPES.Actor.character'
},
favor: {
id: 'favor',
label: 'Favor Points',
group: 'TYPES.Actor.character'
},
slayer: {
id: 'slayer',
label: 'Slayer Dice',
group: 'TYPES.Actor.character'
}
};
export const abilityCosts = {
hp: {
id: 'hp',
@ -366,36 +397,13 @@ export const abilityCosts = {
label: 'Armor Stack',
group: 'TYPES.Actor.character'
},
prayer: {
id: 'prayer',
label: 'Prayer Dice',
group: 'TYPES.Actor.character'
},
favor: {
id: 'favor',
label: 'Favor Points',
group: 'TYPES.Actor.character'
},
slayer: {
id: 'slayer',
label: 'Slayer Dice',
group: 'TYPES.Actor.character'
},
tide: {
id: 'tide',
label: 'Tide',
group: 'TYPES.Actor.character'
},
chaos: {
id: 'chaos',
label: 'Chaos',
group: 'TYPES.Actor.character'
},
fear: {
id: 'fear',
label: 'Fear',
group: 'TYPES.Actor.adversary'
}
},
...featureTokenTypes,
...featureDiceTypes
};
export const countdownTypes = {

View file

@ -29,7 +29,18 @@ export default class BaseDataItem extends foundry.abstract.TypeDataModel {
/** @inheritDoc */
static defineSchema() {
const schema = {};
const schema = {
uses: new fields.SchemaField({
value: new fields.NumberField({ nullable: true, initial: null }),
max: new fields.NumberField({ nullable: true, initial: null }),
icon: new fields.StringField({ initial: 'fa-solid fa-hashtag' }),
recovery: new fields.StringField({
choices: CONFIG.DH.GENERAL.refreshTypes,
initial: null,
nullable: true
})
})
};
if (this.metadata.hasDescription) schema.description = new fields.HTMLField({ required: true, nullable: true });

View file

@ -1,16 +1,20 @@
export default class RegisterHandlebarsHelpers {
static registerHelpers() {
Handlebars.registerHelper({
emptyObject: this.emptyObject,
add: this.add,
includes: this.includes,
times: this.times,
damageFormula: this.damageFormula,
damageSymbols: this.damageSymbols,
tertiary: this.tertiary,
signedNumber: this.signedNumber
tertiary: this.tertiary
});
}
static emptyObject(a) {
return !a || typeof a !== 'object' || Object.keys(a).length === 0;
}
static add(a, b) {
const aNum = Number.parseInt(a);
const bNum = Number.parseInt(b);

View file

@ -21,10 +21,19 @@
}
}
.item-label-wrapper {
display: grid;
grid-template-columns: 1fr 60px;
}
.item-label {
font-family: @font-body;
align-self: center;
&.fullWidth {
grid-column: span 2;
}
.item-name {
font-size: 14px;
}
@ -58,6 +67,31 @@
}
}
.item-tokens {
display: flex;
flex-direction: column;
gap: 4px;
.item-token {
display: flex;
align-items: center;
gap: 4px;
i {
flex: none;
font-size: 14px;
}
input {
flex: 1;
&::-webkit-outer-spin-button {
opacity: 1;
}
}
}
}
.controls {
display: flex;
align-items: center;

View file

@ -1,6 +1,7 @@
<li class="inventory-item" data-item-id="{{item.id}}" data-item-uuid="{{item.uuid}}" data-type="{{type}}">
<img src="{{item.img}}" class="item-img {{#if isActor}}actor-img{{/if}}" data-action="useItem" {{#if (not noTooltip)}}data-tooltip="{{concat "#item#" item.uuid}}"{{/if}} />
<div class="item-label">
<div class="item-label-wrapper">
<div class="item-label {{#if (emptyObject item.system.tokens)}}fullWidth{{/if}}">
{{#if isCompanion}}
<a class="item-name" data-action="attackRoll">{{item.name}}</a>
{{else}}
@ -122,6 +123,17 @@
</div>
{{/if}}
</div>
{{#unless (emptyObject item.system.tokens)}}
<div class="item-tokens">
{{#each item.system.tokens as | token |}}
<div class="item-token">
<i class="fa-solid fa-hashtag"></i>
<input type="number" value="{{token.value}}" step="1" min="0" max="10" />
</div>
{{/each}}
</div>
{{/unless}}
</div>
{{#unless hideControls}}
{{#if isActor}}
<div class="controls">