daggerheart/templates/sheets/adversary.hbs
WBHarry a92221778e
Levelup Remake (#100)
* Set up DhLevelTier datamodel

* Added Levelup data model and started at the render

* Fixed data handling in the LevelUp view

* Added back the save function

* Finalised levelup selections and propagating to PC

* Added level advancement selection data

* Added DomainCard selection

* Css merge commit

* Added PC level/delevel benefits of leveling up

* Fixed sticky previous selections on continous leveling

* Fixed up Summary. Fixed multiclass/subclass blocking on selection

* Removed unused level.hbs

* Fixed attribute base for PC

* Improved naming of attribute properties

* Renamed/structured resources/evasion/proficiency

* Improved trait marking

* Rework to level up once at a time

* Added markers

* Removed tabs when in Summary

* Fixed multilevel buttons

* Improved multiclass/subclass recognition

* Fixed tagify error on selection

* Review fixes
2025-06-07 01:50:50 +02:00

238 lines
No EOL
15 KiB
Handlebars

<div>
<header class="adversary-header-container">
<div class="adversary-header flexrow">
<img class="flex0" src="{{document.img}}" data-edit="img" data-action="onEditImage" title="{{document.name}}" height="64" width="64"/>
<div class="adversary-title">
{{#if this.editMode}}
{{formInput fields.name value=source.name rootId=partId placeholder="{{ localize 'Name' }}"}}
{{else}}
<div class="title-text">{{this.title}}</div>
{{/if}}
</div>
</div>
<i class="fa-solid fa-wrench icon-button secondary {{#if this.editMode}}active{{/if}}" data-action="toggleSlider" style="position: absolute; right: 4px; top: 4px;"></i>
</header>
<section class="sheet-body">
{{#if this.editMode}}
<div>
<h2>{{localize "DAGGERHEART.Sheets.Adversary.Description"}}</h2>
<textarea name="system.description">{{source.system.description}}</textarea>
<h2 class="motive-container">
<div class="motive-title">
<div>{{localize "DAGGERHEART.Sheets.Adversary.MotivesAndTactics"}}</div>
<i class="fa-solid fa-plus" data-action="addMotive"></i>
</div>
</h2>
<div class="ability-choices">
{{#each source.system.motivesAndTactics as |motive index|}}
<div class="ability-chip">
<input type="text" name="system.motivesAndTactics.{{index}}" value="{{motive}}" />
<button><i data-action="removeMotive" data-motive="{{index}}" class="fa-solid fa-x"></i></button>
</div>
{{/each}}
</div>
</div>
<div class="adversary-content-container">
<div class="adversary-statistics-container">
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.Tier"}}</label>
<div class="form-fields">
<select name="system.tier">
{{selectOptions config.GENERAL.tiers selected=source.system.tier labelAttr="key"}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.Type"}}</label>
<div class="form-fields">
<select name="system.type">
{{selectOptions config.ACTOR.adversaryTypes selected=source.system.type labelAttr="name" localize=true}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.Attack.Modifier"}}</label>
<div class="form-fields">
<input type="text" name="system.attackModifier" value="{{source.system.attackModifier}}" data-dtype="Number" />
</div>
</div>
<div class="attack-container">
<h2>{{localize "DAGGERHEART.Sheets.Adversary.Attack.Title"}}</h2>
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.Attack.Name"}}</label>
<div class="form-fields">
<input type="text" name="system.attack.name" value="{{source.system.attack.name}}" />
</div>
</div>
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.Attack.Range"}}</label>
<div class="form-fields">
<select name="system.attack.range">
{{selectOptions config.GENERAL.range selected=source.system.attack.range labelAttr="name" localize=true}}
</select>
</div>
</div>
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.Attack.Damage.Title"}}</label>
<div class="form-fields">
<label>{{localize "DAGGERHEART.Sheets.Adversary.Attack.Damage.Value"}}</label>
<input type="text" name="system.attack.damage.value" value="{{source.system.attack.damage.value}}" />
<label>{{localize "DAGGERHEART.Sheets.Adversary.Attack.Damage.Type"}}</label>
<select name="system.attack.damage.type">
{{selectOptions config.GENERAL.damageTypes selected=source.system.attack.damage.type labelAttr="name" localize=true}}
</select>
</div>
</div>
</div>
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.Difficulty"}}</label>
<div class="form-fields">
<input type="text" name="system.difficulty" value="{{source.system.difficulty}}" data-dtype="Number" />
</div>
</div>
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.DamageThresholds.Title"}}</label>
<div class="form-fields adversary-damage-threshold-container">
<label>{{localize "DAGGERHEART.Sheets.Adversary.DamageThresholds.Major"}}</label>
<input type="text" name="system.damageThresholds.major" value="{{source.system.damageThresholds.major}}" data-dtype="Number" />
<label>{{localize "DAGGERHEART.Sheets.Adversary.DamageThresholds.Severe"}}</label>
<input type="text" name="system.damageThresholds.severe" value="{{source.system.damageThresholds.severe}}" data-dtype="Number" />
</div>
</div>
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.HP"}}</label>
<div class="form-fields">
<input type="text" name="system.resources.hitPoints.max" value="{{source.system.resources.hitPoints.max}}" data-dtype="Number" />
</div>
</div>
<div class="form-group">
<label>{{localize "DAGGERHEART.Sheets.Adversary.Stress"}}</label>
<div class="form-fields">
<input type="text" name="system.resources.stress.max" value="{{source.system.resources.stress.max}}" data-dtype="Number" />
</div>
</div>
<h2 class="experience-container">
<div class="flex-centered">
<div>{{localize "DAGGERHEART.Sheets.Adversary.Experiences"}}</div>
<i class="fa-solid fa-plus" data-action="addExperience"></i>
</div>
</h2>
{{#each source.system.experiences as |experience index|}}
<div class="experience-chip">
<input class="experience.value" type="text" name="system.experiences.{{index}}.name" value="{{experience.name}}" />
<input class="experience-value" type="text" name="system.experiences.{{index}}.value" value="{{experience.value}}" data-dtype="Number" />
<button class="experience-button" data-action="removeExperience" data-experience="{{experience.id}}"><i class="fa-solid fa-x"></i></button>
</div>
{{/each}}
</div>
<div class="adversary-moves-container">
<h2 class="moves-edit-container">{{localize "DAGGERHEART.Sheets.Adversary.Features"}} <i class="fa-solid fa-plus" data-action="addMove"></i></h2>
{{#each this.data.features as |feature key|}}
<div class="chip-container">
<div class="chip-inner-container">
<img src="{{feature.img}}" />
<div class="move-title">{{feature.name}}</div>
</div>
<div class="chip-inner-container">
<button data-action="viewMove" data-move={{feature.uuid}}><i class="fa-solid fa-fw fa-search"></i></button>
<button data-action="removeMove" data-move={{feature.uuid}}><i class="fa-solid fa-trash"></i></button>
</div>
</div>
{{/each}}
</div>
</div>
{{else}}
<div class="motive-container">
<div class="motive-title">
<span class="motive-title-value"><strong>{{localize "DAGGERHEART.Sheets.Adversary.Description"}}:</strong> {{this.data.description}}</span>
</div>
<div class="motive-title">
<span class="motive-title-value"><strong>{{localize "DAGGERHEART.Sheets.Adversary.MotivesAndTactics"}}:</strong> {{this.data.motivesAndTactics}}</span>
</div>
</div>
<div class="adversary-content-container">
<div class="adversary-statistics-container">
<div class="statistic-section">
<div class="statistic-row">
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.Adversary.Tier"}}:</label>
<span class="statistic-value">{{this.data.tier}}</span>
</div>
<div class="statistic-row">
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.Adversary.Type"}}:</label>
<span class="statistic-value">{{this.data.type}}</span>
</div>
</div>
<div class="statistic-section">
<div class="statistic-row">
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.Adversary.Difficulty"}}:</label>
<span class="statistic-value">{{this.data.difficulty}}</span>
</div>
<div class="statistic-row">
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.Adversary.Reaction"}}</label>
<img class="adversary-roll" data-action="reactionRoll" src="icons/svg/d20-grey.svg" />
</div>
<div class="statistic-row">
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.Adversary.Attack.Modifier"}}:</label>
<span class="statistic-value">+{{this.data.attack.attackModifier}}</span>
<img class="adversary-roll" data-action="attackRoll" data-value="{{this.data.attack.attackModifier}}" data-name="{{this.data.attack.name}}" data-damage="{{this.data.attack.damage.value}}" data-damage-type="{{this.data.attack.damage.type}}" src="icons/svg/d20-grey.svg" />
</div>
<div class="statistic-row">
<label class="statistic-title">{{localize this.data.attack.name}}</label>
<span class="statistic-value">{{this.data.attack.range}} | {{this.data.attack.damage.value}} {{this.data.attack.damage.typeName}}</span>
</div>
</div>
<div class="statistic-section">
<div class="statistic-row">
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.PC.Health.Major"}}</label>
<span class="statistic-value">{{this.data.damageThresholds.major}}</span>
<div class="vertical-separator" style="height: 16px; margin: 0 4px;"></div>
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.PC.Health.Severe"}}</label>
<span class="statistic-value">{{this.data.damageThresholds.severe}}</span>
</div>
<div class="statistic-resource-container">
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.Adversary.HP"}}</label>
<div class="statistic-resource-inner-container">
{{#times this.data.hp.max}}
<input class="statistic-resource-input" type="checkbox" data-action="toggleHP" data-index="{{this}}" {{checked (gt ../data.hp.value this)}} />
{{/times}}
</div>
</div>
<div class="statistic-resource-container">
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.Adversary.Stress"}}</label>
<div class="statistic-resource-inner-container">
{{#times this.data.stress.max}}
<input class="statistic-resource-input" type="checkbox" data-action="toggleStress" data-index="{{this}}" {{checked (gt ../data.stress.value this)}} />
{{/times}}
</div>
</div>
</div>
<div class="statistic-section">
<label class="statistic-title">{{localize "DAGGERHEART.Sheets.Adversary.Experience"}}</label>
{{#each source.system.experiences as |experience index|}}
<div class="experience-row">
<span>{{experience.name}}</span>
&nbsp;
<span>{{#if (gte experience.value 0)}}+{{else}}-{{/if}}{{experience.value}}</span>
</div>
{{/each}}
</div>
{{!-- <div class="statistic-resource-container">
<label class="statistic-title">{{localize "HP:"}}</label>
<span class="statistic-value">{{this.data.hp.max}}</span>
</div> --}}
</div>
<div class="adversary-moves-container">
<div class="moves-title">{{localize "DAGGERHEART.Sheets.Adversary.Features"}}</div>
{{#each this.data.features as |feature index|}}
<div class="move-container">
<label class="moves-name">{{feature.name}}</label>
<div class="move-description">{{{feature.system.description}}}</div>
</div>
{{/each}}
</div>
</div>
{{/if}}
</section>
</div>