vagabond-rpg-foundryvtt/templates/actor/character-magic.hbs
Cal Corum 8e097c9b2d Implement character sheet foundation with ApplicationV2
Add actor sheet implementation using Foundry VTT v13 ApplicationV2 API:
- Base actor sheet class with tab navigation, drag-drop, scroll preservation
- Character sheet with header, main tab (stats, saves, skills, attacks)
- NPC sheet structure (templates only, styling pending)
- Resource bars with fill effect and backdrop pills for legibility
- Responsive layout using CSS Container Queries
- Fix for ApplicationV2 tab switching (cleanup stale parts)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 16:43:28 -06:00

115 lines
4.1 KiB
Handlebars

{{!-- Character Sheet Magic Tab --}}
<section class="sheet-body tab-content magic-tab">
{{!-- Mana Display --}}
<div class="magic-header">
<div class="mana-display">
<label>{{localize "VAGABOND.Mana"}}</label>
<div class="mana-values">
<input type="number" name="system.resources.mana.value"
value="{{resources.mana.value}}" min="0" max="{{resources.mana.max}}" />
<span class="separator">/</span>
<span class="max">{{resources.mana.max}}</span>
</div>
{{#if resources.mana.castingMax}}
<div class="casting-max">
<span class="label">{{localize "VAGABOND.CastingMax"}}:</span>
<span class="value">{{resources.mana.castingMax}}</span>
</div>
{{/if}}
</div>
{{!-- Focus Status --}}
{{#if hasFocus}}
<div class="focus-display">
<h3>{{localize "VAGABOND.FocusActive"}}</h3>
<ul class="focus-list">
{{#each focus.active}}
<li class="focus-item">
<span class="focus-spell">{{this.spellName}}</span>
{{#if this.target}}
<span class="focus-target">on {{this.target}}</span>
{{/if}}
{{#if this.manaCostPerRound}}
<span class="focus-cost">{{this.manaCostPerRound}} Mana/round</span>
{{/if}}
</li>
{{/each}}
</ul>
</div>
{{/if}}
</div>
{{!-- Known Spells Section --}}
<div class="spells-section">
<div class="section-header-row">
<h2 class="section-header">{{localize "VAGABOND.KnownSpells"}}</h2>
<button type="button" class="item-create" data-action="itemCreate" data-type="spell"
data-tooltip="{{localize 'VAGABOND.CreateSpell'}}">
<i class="fa-solid fa-plus"></i>
</button>
</div>
<ul class="spell-list">
{{#each items.spells}}
<li class="spell-item" data-item-id="{{this.id}}">
<img class="spell-img" src="{{this.img}}" alt="{{this.name}}" />
<div class="spell-info">
<span class="spell-name" data-action="itemEdit">{{this.name}}</span>
<span class="spell-type">{{this.system.damageType}}</span>
</div>
<div class="spell-details">
{{#if this.system.baseDamage}}
<span class="spell-damage">
<i class="fa-solid fa-burst"></i>
{{this.system.baseDamage}}
</span>
{{/if}}
{{#if this.system.baseEffect}}
<span class="spell-effect" data-tooltip="{{this.system.baseEffect}}">
<i class="fa-solid fa-wand-sparkles"></i>
Effect
</span>
{{/if}}
</div>
<div class="spell-actions">
<button type="button" class="spell-cast" data-action="castSpell" data-spell-id="{{this.id}}"
data-tooltip="{{localize 'VAGABOND.CastSpell'}}">
<i class="fa-solid fa-magic"></i>
{{localize "VAGABOND.Cast"}}
</button>
<button type="button" class="item-delete" data-action="itemDelete"
data-tooltip="{{localize 'VAGABOND.DeleteItem'}}">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</li>
{{else}}
<li class="spell-item empty">{{localize "VAGABOND.NoSpells"}}</li>
{{/each}}
</ul>
</div>
{{!-- Spell Casting Reference --}}
<div class="casting-reference">
<h3>{{localize "VAGABOND.SpellcastingReference"}}</h3>
<div class="reference-grid">
<div class="reference-section delivery">
<h4>{{localize "VAGABOND.Delivery"}}</h4>
<ul>
<li><strong>Touch/Remote/Imbue:</strong> 0 Mana</li>
<li><strong>Cube:</strong> +1 Mana</li>
<li><strong>Aura/Cone/Glyph/Line/Sphere:</strong> +2 Mana</li>
</ul>
</div>
<div class="reference-section duration">
<h4>{{localize "VAGABOND.Duration"}}</h4>
<ul>
<li><strong>Instant:</strong> Immediate effect</li>
<li><strong>Focus:</strong> Maintained (1 Mana/round vs unwilling)</li>
<li><strong>Continual:</strong> Lasts until conditions met</li>
</ul>
</div>
</div>
</div>
</section>