Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3c92532601 | |||
| 3fc10ad669 | |||
| 2e1c499c23 | |||
| 03c3f1757e |
@@ -685,9 +685,9 @@ export class BaseCharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
const data = {
|
||||
equipped: tmpItem.system.equipped,
|
||||
};
|
||||
// Only weapons
|
||||
// For weapons: sync readied with equipped so both toggle together
|
||||
if (tmpItem.system.readied !== undefined) {
|
||||
data.readied = tmpItem.system.readied;
|
||||
data.readied = type === "equipped" ? tmpItem.system.equipped : tmpItem.system.readied;
|
||||
}
|
||||
|
||||
// Update the Item: we need to manually notify the "Gm Monitor" as the Actor himself is not updated
|
||||
@@ -714,6 +714,7 @@ export class BaseCharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
return {
|
||||
uuid: item.uuid,
|
||||
skill: item.system.skill,
|
||||
bonus: parseInt(item.system.bonus || 0),
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
|
||||
template: CONFIG.l5r5e.paths.templates + "actors/character-sheet.html",
|
||||
tabs: [
|
||||
{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" },
|
||||
{ navSelector: ".advancements-tabs", contentSelector: ".advancements-body", initial: "last" },
|
||||
],
|
||||
});
|
||||
}
|
||||
@@ -82,11 +81,11 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
|
||||
}
|
||||
|
||||
// Chiaroscuro: Aspects gauge data
|
||||
const aspectsData = sheetData.data.system.aspects?.aspects ?? {};
|
||||
const aspectsData = sheetData.data.system.aspects ?? {};
|
||||
const gauge = aspectsData.gauge ?? 0;
|
||||
sheetData.data.aspectsData = {
|
||||
solar: aspectsData.solar ?? 0,
|
||||
lunar: aspectsData.lunar ?? 0,
|
||||
solar: aspectsData.solar ?? 2,
|
||||
lunar: aspectsData.lunar ?? 2,
|
||||
gauge,
|
||||
gaugePercent: ((gauge + 10) / 20) * 100,
|
||||
gaugeColor: gauge > 0 ? "#d4a855" : gauge < 0 ? "#5588aa" : "#888888",
|
||||
@@ -184,12 +183,6 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
|
||||
});
|
||||
|
||||
|
||||
// Advancements Tab to current rank onload
|
||||
// TODO class "Active" Bug on load, dunno why :/
|
||||
this._tabs
|
||||
.find((e) => e._navSelector === ".advancements-tabs")
|
||||
.activate("advancement_rank_" + (this.actor.system.identity.school_rank || 0));
|
||||
|
||||
// Arcane roll on name click
|
||||
html.find(".dice-picker-arcane").on("click", this._openDicePickerForArcane.bind(this));
|
||||
}
|
||||
@@ -289,7 +282,7 @@ export class CharacterSheetL5r5e extends BaseCharacterSheetL5r5e {
|
||||
const weapon = this._getWeaponInfos(el.data("weapon-id") || null);
|
||||
const skillId = weapon?.skill || el.data("skill");
|
||||
const ringId = el.data("ring") || this.actor.system?.default_ring || "void";
|
||||
new game.l5r5e.ChiaroscuroDiceDialog({ actor: this.actor, ringId, skillId, itemUuid: weapon?.uuid }).render(true);
|
||||
new game.l5r5e.ChiaroscuroDiceDialog({ actor: this.actor, ringId, skillId, itemUuid: weapon?.uuid, arcaneBonus: weapon?.bonus ?? 0 }).render(true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -127,6 +127,6 @@ export class NpcSheetL5r5e extends BaseCharacterSheetL5r5e {
|
||||
const weapon = this._getWeaponInfos(el.data("weapon-id") || null);
|
||||
const skillId = weapon?.skill || el.data("skill");
|
||||
const ringId = el.data("ring") || this.actor.system?.default_ring || "void";
|
||||
new game.l5r5e.ChiaroscuroDiceDialog({ actor: this.actor, ringId, skillId, itemUuid: weapon?.uuid }).render(true);
|
||||
new game.l5r5e.ChiaroscuroDiceDialog({ actor: this.actor, ringId, skillId, itemUuid: weapon?.uuid, arcaneBonus: weapon?.bonus ?? 0 }).render(true);
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -504,6 +504,58 @@
|
||||
&.experience {
|
||||
flex: 100%;
|
||||
height: calc(100% - 4rem);
|
||||
|
||||
.xp-summary {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
background: rgba($l5r5e-red, 0.08);
|
||||
border: 1px solid rgba($l5r5e-red, 0.3);
|
||||
border-radius: 4px;
|
||||
padding: 0.3rem 0.75rem;
|
||||
margin-bottom: 0.5rem;
|
||||
gap: 0;
|
||||
|
||||
.xp-block {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 0.4rem;
|
||||
flex: 1;
|
||||
justify-content: center;
|
||||
padding: 0 0.5rem;
|
||||
|
||||
.xp-label {
|
||||
font-size: 0.75rem;
|
||||
text-transform: uppercase;
|
||||
color: $l5r5e-title;
|
||||
letter-spacing: 0.04em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.xp-value {
|
||||
font-family: $font-secondary;
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
color: $l5r5e-red;
|
||||
width: 3.5rem;
|
||||
text-align: center;
|
||||
background: rgba($l5r5e-red, 0.06);
|
||||
border: 1px solid rgba($l5r5e-red, 0.25);
|
||||
border-radius: 3px;
|
||||
padding: 0.1rem 0.25rem;
|
||||
|
||||
&:disabled {
|
||||
opacity: 0.75;
|
||||
cursor: default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.xp-block + .xp-block {
|
||||
border-left: 1px solid rgba($l5r5e-red, 0.25);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,21 @@
|
||||
/** Rings — disposition en grille 2×2 + Vide centré en bas **/
|
||||
/** Rings — disposition pentagonale (5 éléments autour d'un cercle) **/
|
||||
// Centre (130, 130), rayon 75px, sens horaire depuis le haut (-90°)
|
||||
// Air(-90°) Eau(-18°) Feu(54°) Terre(126°) Vide(198°)
|
||||
|
||||
.rings {
|
||||
display: grid;
|
||||
grid-template-areas:
|
||||
"air water"
|
||||
"fire earth"
|
||||
"void void";
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 0.5rem;
|
||||
min-height: 0;
|
||||
padding: 0.25rem;
|
||||
position: relative;
|
||||
width: 260px;
|
||||
height: 260px;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
color: $white-light;
|
||||
|
||||
#air { grid-area: air; }
|
||||
#water { grid-area: water; }
|
||||
#fire { grid-area: fire; }
|
||||
#earth { grid-area: earth; }
|
||||
#void { grid-area: void; justify-self: center; }
|
||||
#air { left: 86px; top: 59px; z-index: 2; } // haut-gauche (−36°)
|
||||
#water { left: 174px; top: 59px; z-index: 2; } // haut-droite ( 36°)
|
||||
#fire { left: 59px; top: 153px; z-index: 1; } // gauche (252°)
|
||||
#earth { left: 201px; top: 153px; z-index: 1; } // droite (108°)
|
||||
#void { left: 130px; top: 205px; z-index: 1; } // bas (180°)
|
||||
|
||||
// — Common ring cell —
|
||||
#earth,
|
||||
@@ -25,7 +23,8 @@
|
||||
#water,
|
||||
#fire,
|
||||
#void {
|
||||
position: relative;
|
||||
position: absolute;
|
||||
transform: translate(-50%, -50%);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
@@ -93,27 +92,56 @@
|
||||
}
|
||||
}
|
||||
|
||||
// — Solaire / Lunaire badges —
|
||||
.ring-type {
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: 0.62rem;
|
||||
line-height: 1.2 !important;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.07em;
|
||||
white-space: nowrap;
|
||||
margin-top: 0.1rem;
|
||||
pointer-events: none;
|
||||
// — Solaire / Lunaire : masqués sur les anneaux, affichés latéralement —
|
||||
.ring-type { display: none; }
|
||||
|
||||
&.solaire {
|
||||
color: #f5c842;
|
||||
text-shadow: 0 0 4px rgba(245, 180, 0, 0.6);
|
||||
// Air et Eau : label texte flottant AU-DESSUS de l'icône, hors du flux
|
||||
// (position: absolute → ne décale pas le cercle, ne casse pas l'espacement)
|
||||
#air label strong, #water label strong {
|
||||
position: absolute;
|
||||
bottom: calc(100% + 0.3rem); // au-dessus du ring-circle
|
||||
left: 0; right: 0;
|
||||
text-align: center;
|
||||
visibility: visible;
|
||||
}
|
||||
&.lunaire {
|
||||
color: #9ecfef;
|
||||
text-shadow: 0 0 4px rgba(100, 180, 230, 0.6);
|
||||
|
||||
// Label vertical "☀ SOLAIRE" sur le côté gauche (entre Air et Feu)
|
||||
&::before {
|
||||
content: "☀ SOLAIRE";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 80px;
|
||||
writing-mode: vertical-lr;
|
||||
transform: rotate(180deg); // lecture de bas en haut
|
||||
font-size: 0.7rem;
|
||||
font-weight: bold;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
color: #ffe066;
|
||||
background: rgba(0, 0, 0, 0.55);
|
||||
padding: 4px 2px;
|
||||
border-radius: 3px;
|
||||
text-shadow: 0 0 4px #000, 0 0 8px rgba(255, 180, 0, 0.9);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
// Label vertical "☽ LUNAIRE" sur le côté droit (entre Eau et Terre)
|
||||
&::after {
|
||||
content: "☽ LUNAIRE";
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 80px;
|
||||
writing-mode: vertical-lr;
|
||||
font-size: 0.7rem;
|
||||
font-weight: bold;
|
||||
letter-spacing: 0.12em;
|
||||
text-transform: uppercase;
|
||||
color: #b8e4ff;
|
||||
background: rgba(0, 0, 0, 0.55);
|
||||
padding: 4px 2px;
|
||||
border-radius: 3px;
|
||||
text-shadow: 0 0 4px #000, 0 0 8px rgba(80, 160, 255, 0.9);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
// — Ring colors —
|
||||
@@ -122,4 +150,15 @@
|
||||
#water { color: $l5r5e-water; input { background: rgba($l5r5e-water, 0.7); } }
|
||||
#fire { color: $l5r5e-fire; input { background: rgba($l5r5e-fire, 0.7); } }
|
||||
#earth { color: $l5r5e-earth; input { background: rgba($l5r5e-earth, 0.7); } }
|
||||
|
||||
// — Input value orienté vers le centre du pentagone —
|
||||
// #air (haut-gauche) → centre est bas-droite → default (bottom/right) ✓
|
||||
// #water (haut-droite) → centre est bas-gauche → bottom / left
|
||||
#water .ring-circle input { right: auto; left: -0.5rem; }
|
||||
// #fire (gauche) → centre est haut-droite → top / right
|
||||
#fire .ring-circle input { bottom: auto; top: -0.5rem; }
|
||||
// #earth (droite) → centre est haut-gauche → top / left
|
||||
#earth .ring-circle input { bottom: auto; top: -0.5rem; right: auto; left: -0.5rem; }
|
||||
// #void (bas) → centre est haut-centre → top / centré
|
||||
#void .ring-circle input { bottom: auto; top: -0.5rem; right: auto; left: 50%; transform: translateX(-50%); }
|
||||
}
|
||||
|
||||
@@ -297,7 +297,6 @@
|
||||
.rings {
|
||||
padding: 0;
|
||||
margin-top: 0.5rem;
|
||||
width: 100%;
|
||||
}
|
||||
.social-content,
|
||||
.attributes-wrapper {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<tr data-group="advancements" data-tab="advancement_rank_{{rank}}" class="flexrow row advancement tab">
|
||||
<tr class="flexrow row advancement">
|
||||
<td class="name l5r5e-tooltip" data-item-id="{{advancement._id}}" name="advancement.name"><img src="{{advancement.img}}" title="{{advancement.name}}"> {{advancement.name}}</td>
|
||||
<td class="xp" name="advancement.xp">{{advancement.system.xp_used}}</td>
|
||||
{{#if editable}}
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
<div class="aspect-fields">
|
||||
<label class="attribute-label">
|
||||
{{localize 'chiaroscuro.aspects.solar'}}
|
||||
<input type="number" name="system.aspects.aspects.solar" value="{{data.system.aspects.aspects.solar}}" class="select-on-focus" data-dtype="Number" min="0" max="100" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
|
||||
<input type="number" name="system.aspects.solar" value="{{data.system.aspects.solar}}" class="select-on-focus" data-dtype="Number" min="0" max="100" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
|
||||
</label>
|
||||
<label class="attribute-label">
|
||||
{{localize 'chiaroscuro.aspects.lunar'}}
|
||||
<input type="number" name="system.aspects.aspects.lunar" value="{{data.system.aspects.aspects.lunar}}" class="select-on-focus" data-dtype="Number" min="0" max="100" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
|
||||
<input type="number" name="system.aspects.lunar" value="{{data.system.aspects.lunar}}" class="select-on-focus" data-dtype="Number" min="0" max="100" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
|
||||
</label>
|
||||
<label class="attribute-label">
|
||||
{{localize 'chiaroscuro.aspects.gauge'}}
|
||||
<input type="number" name="system.aspects.aspects.gauge" value="{{data.system.aspects.aspects.gauge}}" class="select-on-focus" data-dtype="Number" min="-10" max="10" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
|
||||
<input type="number" name="system.aspects.gauge" value="{{data.system.aspects.gauge}}" class="select-on-focus" data-dtype="Number" min="-10" max="10" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
|
||||
</label>
|
||||
<div class="gauge-bar-wrapper">
|
||||
<div class="gauge-bar" style="width: {{data.aspectsData.gaugePercent}}%; background-color: {{data.aspectsData.gaugeColor}};"></div>
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
{{!-- XP Summary banner --}}
|
||||
<div class="xp-summary" style="display:flex;flex-direction:row;align-items:center;gap:1rem;background:rgba(120,20,20,0.08);border:1px solid rgba(120,20,20,0.3);border-radius:4px;padding:0.3rem 0.75rem;margin-bottom:0.5rem;width:100%;box-sizing:border-box;">
|
||||
<div class="xp-block" style="display:flex;flex-direction:row;align-items:center;gap:0.4rem;flex:1;justify-content:center;">
|
||||
<label class="xp-label" style="font-size:0.75rem;text-transform:uppercase;white-space:nowrap;">{{localize 'l5r5e.advancements.total'}}</label>
|
||||
<input class="xp-value" type="number" name="system.xp_total" value="{{data.system.xp_total}}" min="0" style="width:3.5rem;text-align:center;" {{#unless data.editable_not_soft_locked}}disabled{{/unless}} />
|
||||
</div>
|
||||
<div class="xp-block" style="display:flex;flex-direction:row;align-items:center;gap:0.4rem;flex:1;justify-content:center;border-left:1px solid rgba(120,20,20,0.25);padding-left:1rem;">
|
||||
<label class="xp-label" style="font-size:0.75rem;text-transform:uppercase;white-space:nowrap;">{{localize 'l5r5e.advancements.spent'}}</label>
|
||||
<input class="xp-value" type="number" value="{{data.system.xp_spent}}" disabled style="width:3.5rem;text-align:center;" />
|
||||
</div>
|
||||
<div class="xp-block" style="display:flex;flex-direction:row;align-items:center;gap:0.4rem;flex:1;justify-content:center;border-left:1px solid rgba(120,20,20,0.25);padding-left:1rem;">
|
||||
<label class="xp-label" style="font-size:0.75rem;text-transform:uppercase;white-space:nowrap;">{{localize 'l5r5e.advancements.saved'}}</label>
|
||||
<input class="xp-value" type="number" value="{{data.system.xp_saved}}" disabled style="width:3.5rem;text-align:center;" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- School progession --}}
|
||||
<fieldset class="advancement advancements-body">
|
||||
<legend class="tools">
|
||||
@@ -10,14 +26,6 @@
|
||||
<a data-item-type="advancement" class="advancement-control item-add" title="{{localize 'l5r5e.global.add'}}"><i class="fas fa-plus"></i></a>
|
||||
{{/if}}
|
||||
</legend>
|
||||
<nav class="advancements-tabs tabs" data-group="advancements">
|
||||
<a class="item advancements-tab" data-tab="advancement_rank_0">{{localize 'l5r5e.advancements.school_rank_0'}}</a>
|
||||
{{#each data.advancementsListByRank as |rankObject|}}
|
||||
{{#ifCond rank '>' 0}}
|
||||
<a class="item advancements-tab" data-tab="advancement_rank_{{rank}}" title="{{localize 'l5r5e.advancements.school_rank'}} {{rankObject.rank}}">{{rankObject.rank}}</a>
|
||||
{{/ifCond}}
|
||||
{{/each}}
|
||||
</nav>
|
||||
<table>
|
||||
<thead class="flex">
|
||||
<tr class="flexrow row">
|
||||
@@ -37,7 +45,7 @@
|
||||
{{#if ../data.editable_not_soft_locked}}
|
||||
{{#ifCond ../data.system.identity.school_rank '<' 6}}
|
||||
{{#ifCond (ifCond ../data.system.identity.school_rank '==' rankObject.rank) '&&' (ifCond rankObject.spent.curriculum '>=' rankObject.goal)}}
|
||||
<tr class="tfoot flexrow row tab" data-group="advancements" data-tab="advancement_rank_{{rankObject.rank}}">
|
||||
<tr class="tfoot flexrow row">
|
||||
<th>
|
||||
<button type="button" name="validate-curriculum">
|
||||
<i class='fas fa-check-square'></i> {{ localize 'l5r5e.advancements.curriculum_validate'}}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<li class="item technique flexcol" data-item-id="{{item._id}}">
|
||||
<ul class="item-header technique-controls">
|
||||
<li class="item-img"><img src="{{item.img}}" title="{{item.name}}" width="32px" height="32px"/></li>
|
||||
<li class="item-name l5r5e-tooltip" data-item-id="{{item._id}}">{{item.name}}</li>
|
||||
<li class="item-name dice-picker-arcane l5r5e-tooltip" data-item-id="{{item._id}}">{{item.name}}</li>
|
||||
{{#if ../data.editable_not_soft_locked}}
|
||||
<li data-item-id="{{item._id}}" class="item-control item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
|
||||
<li data-item-id="{{item._id}}" class="item-control item-delete" title="{{localize 'Delete'}}"><i class="fas fa-trash"></i></li>
|
||||
|
||||
@@ -8,14 +8,12 @@
|
||||
<i class="fas fa-skull" title="{{localize 'l5r5e.weapons.deadliness'}}"> {{weapon.system.deadliness}}</i>
|
||||
</li>
|
||||
{{#if editable}}
|
||||
<li data-item-id="{{weapon._id}}" data-type="equipped" class="equip-readied-control" title="{{localize 'l5r5e.armors.equipped'}}"><i class="fas {{#if weapon.system.equipped}}fa-tshirt{{else}}fa-weight-hanging{{/if}}"></i></li>
|
||||
<li data-item-id="{{weapon._id}}" class="item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
|
||||
<li data-item-id="{{weapon._id}}" class="item-delete" title="{{localize 'Delete'}}"><i class="fas fa-trash"></i></li>
|
||||
{{/if}}
|
||||
</ul>
|
||||
<ul class="item-properties">
|
||||
<li class="equip-readied-control" data-item-id="{{weapon._id}}" data-type="readied">
|
||||
<i class="i_readied fa{{^if weapon.system.readied}}r{{/if}} fa-check-circle" title="{{#if weapon.system.readied}}{{localize 'l5r5e.weapons.readied'}}{{else}}{{localize 'l5r5e.weapons.sheathed'}}{{/if}}"></i>
|
||||
</li>
|
||||
{{#each weapon.system.properties as |property|}}
|
||||
<li class="l5r5e-tooltip" data-property-id="{{property.id}}">{{{property.name}}}</li>
|
||||
{{/each}}
|
||||
|
||||
Reference in New Issue
Block a user